1 TODO

1.1 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.2 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 = TRUE,
                                     year = 2025, month = "08")
## Using mart: ENSEMBL_MART_ENSEMBL from host: useast.ensembl.org.
## Successfully connected to the hsapiens_gene_ensembl database.
## Finished downloading ensembl gene annotations.
## Finished downloading ensembl structure annotations.
## symbol columns is null, pattern matching 'symbol' and taking the first.
## Found 2 potential symbol columns, using the first:hgnc_symbol.
## Including symbols, there are 86371 vs the 533740 gene annotations.
## Not dropping haplotype chromosome annotations, set drop_haplotypes = TRUE if this is bad.
## Saving annotations to hsapiens_biomart_annotations.rda.
## Finished save().
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
## 
## 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, intersect, is.unsorted, lapply, Map, mapply, match, mget, order, paste, pmax, pmax.int, pmin,
##     pmin.int, Position, rank, rbind, Reduce, rownames, sapply, saveRDS, setdiff, table, tapply, union, unique, unsplit,
##     which.max, which.min
## Loading required package: Biobase
## Welcome to Bioconductor
## 
##     Vignettes contain introductory material; view with 'browseVignettes()'. To cite Bioconductor, see 'citation("Biobase")',
##     and for packages 'citation("pkgname")'.
## 
## 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

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"                             "aim"                                        
##  [4] "participant_code"                            "sample_type"                                 "tube_label_origin"                          
##  [7] "number_of_vials"                             "sample_collection_date"                      "exp_person"                                 
## [10] "clinical_presentation"                       "parasite"                                    "prior_host_hpgl_code"                       
## [13] "prior_parasite_hpgl_code"                    "initial_recurrent"                           "drug_susceptibility_perc_reduction_gluc"    
## [16] "drug_susceptibility_perc_reduction_mlf"      "zymodeme_by_electrophoresis"                 "zymodeme_by_pca"                            
## [19] "rna_extraction_date"                         "rna_volume_ul"                               "rna_qc_date"                                
## [22] "rna_nanodrop_ng_ul"                          "X260_280_ratio"                              "X260_230_ratio"                             
## [25] "rna_bioanalyzer_or_qubit_ng_ul"              "rin"                                         "rna_qc_passed"                              
## [28] "library_type"                                "library_version"                             "library_name"                               
## [31] "library_const_date"                          "rna_used_to_construct_libraries_ul"          "rna_used_to_construct_libraries_ng"         
## [34] "library_qc_date"                             "lib_qc_passed"                               "library_volume_ul"                          
## [37] "unique_dual_index_set"                       "unique_dual_index_plate_coordinate"          "unique_dual_index_id"                       
## [40] "concentrations_determined_by_1"              "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"      "library_ave_frag_size_bp_2001000bp_region_1"
## [46] "calculated_adapter_dimer_percent_1"          "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"       "library_molarity_nm_2001000bp_region_2"     
## [52] "library_ave_frag_size_bp_2001000bp_region_2" "calculated_adapter_dimer_percent_2"          "library_volume_ul_sent_to_umd"              
## [55] "shipment_date"                               "bbiagtc_date_received"                       "bbiagtc_library_cleanup"                    
## [58] "bbiagtc_date_sequenced"                      "bbiagtc_sequence_batch"                      "bbiagtc_pe_reads_pf"                        
## [61] "bbiagtc_fastp_duplication_rate"              "hisat2inputreads"                            "lpsingleconaligned"                         
## [64] "hg38singleconaligned"                        "lpmulticonaligned"                           "hg38multiconaligned"                        
## [67] "lpsingleallaligned"                          "hg38singleallaligned"                        "lpmultiallaligned"                          
## [70] "hg38multiallaligned"                         "lppercentmappedfromlog"                      "hg38percentmappedfromlog"                   
## [73] "lphisatobservedcds"                          "hg38hisatobservedcds"                        "krakenmatrix"                               
## [76] "lphisatgenematrix"                           "hg38hisatgenematrix"                         "lpsalmontranscriptmatrix"                   
## [79] "hg38salmontranscriptmatrix"                  "detectionparasiteby7sl"                      "detectionparasiteby18s"                     
## [82] "detectionparasitebykdnasec"                  "metabolomicnasalswaborplasma"                "immunophenotypingnasalswaborpbmcs"
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.
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 sample_collection_date exp_person
## PRHU0001   1        PRHU0001 aim1           PP1006       PBMCs      PP1006 PBMCs               1             2024-01-29         LG
## PRHU0002   2        PRHU0002 aim1           PP2001  nasal swab         PP2001 HN               1             2024-02-05         LG
## PRHU0009   4        PRHU0009 aim1           PP2003       PBMCs      PP2003 PBMCs               1                   <NA>         LG
## PRHU0010   5        PRHU0010 aim1           PP2004       PBMCs      PP2004 PBMCs               1             2024-04-05         LG
## PRHU0011   6        PRHU0011 aim1           PP2005       PBMCs      PP2005 PBMCs               1             2024-04-12         LG
## PRHU0018   7        PRHU0018 aim1           PP2003        WBCs       PP2003 WBCs               1             2024-03-22         LG
##          clinical_presentation            prior_host_hpgl_code rna_extraction_date rna_volume_ul rna_qc_date rna_nanodrop_ng_ul X260_280_ratio
## PRHU0001                    HD                            <NA>          2024-01-31            25  2024-02-15             338.43           2.04
## PRHU0002                    HD                            <NA>          2024-02-14            25  2024-02-15              84.82           2.08
## PRHU0009                  H-CL TMRC30130; TMRC30124; TMRC30131          2024-05-06            25  2024-05-06              115.1           1.99
## PRHU0010                  H-CL                            <NA>          2024-05-06            25  2024-05-06             185.28           2.03
## PRHU0011                  H-CL                            <NA>          2024-05-06            25  2024-05-06              70.12           1.95
## PRHU0018                  H-CL TMRC30130; TMRC30124; TMRC30131          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 library_version             library_name
## PRHU0001           1.73                            407  NA           yes         mRNA               1      PP1006.PBMCs.mRNA.1
## PRHU0002           1.97                            101  NA           yes         mRNA               1 PP2001.nasal swab.mRNA.1
## PRHU0009           1.34                            167 8.0           yes         mRNA               1      PP2003.PBMCs.mRNA.1
## PRHU0010           1.91                            264 8.5           yes         mRNA               1      PP2004.PBMCs.mRNA.1
## PRHU0011           0.85                            113 8.7           yes         mRNA               1      PP2005.PBMCs.mRNA.1
## PRHU0018           1.56                             70 9.1           yes         mRNA               1       PP2003.WBCs.mRNA.1
##          library_const_date rna_used_to_construct_libraries_ul rna_used_to_construct_libraries_ng library_qc_date lib_qc_passed
## PRHU0001         2024-02-09                               1.48                                500      2024-02-12           yes
## PRHU0002         2024-02-15                               3.54                                300      2024-02-16           yes
## PRHU0009         2024-06-05                               1.79                                300      2024-06-11           yes
## PRHU0010         2024-06-05                               1.14                                300      2024-06-11           yes
## PRHU0011         2024-06-05                               2.65                                300      2024-06-11           yes
## PRHU0018         2024-06-05                               4.29                                300      2024-06-11           yes
##          library_volume_ul                 unique_dual_index_set unique_dual_index_plate_coordinate unique_dual_index_id
## PRHU0001                15 IDT for Illumina RNA UD Indexes Set A                                C04              UDP0027
## PRHU0002                15 IDT for Illumina RNA UD Indexes Set A                                F04              UDP0030
## PRHU0009                15 IDT for Illumina RNA UD Indexes Set A                                B05              UDP0034
## PRHU0010                15 IDT for Illumina RNA UD Indexes Set A                                C05              UDP0035
## PRHU0011                15 IDT for Illumina RNA UD Indexes Set A                                D05              UDP0036
## PRHU0018                15 IDT for Illumina RNA UD Indexes Set A                                E05              UDP0037
##          concentrations_determined_by_1 primer_conc_ng_ul_30100bp_region_1 adapter_dimer_conc_ng_ul_100200bp_region_1
## PRHU0001                    TapeStation                                  -                                          -
## PRHU0002                    TapeStation                                  -                                          -
## PRHU0009                    Bioanalyzer                               0.49                                       0.27
## PRHU0010                    Bioanalyzer                               0.58                                       0.35
## PRHU0011                    Bioanalyzer                                0.7                                       0.27
## PRHU0018                    Bioanalyzer                               0.58                                       0.12
##          library_conc_ng_ul_2001000bp_region_1 library_molarity_nm_2001000bp_region_1 library_ave_frag_size_bp_2001000bp_region_1
## PRHU0001                                 69.50                                  321.0                                         353
## PRHU0002                                 17.50                                   82.3                                         345
## PRHU0009                                 60.64                                  293.3                                         336
## PRHU0010                                 64.84                                  314.0                                         340
## PRHU0011                                 56.86                                  279.9                                         330
## PRHU0018                                 85.33                                  421.9                                         328
##          calculated_adapter_dimer_percent_1 concentrations_determined_by_2 primer_conc_ng_ul_30100bp_region_2
## PRHU0001                                  0                           <NA>                               <NA>
## PRHU0002                                  0                           <NA>                               <NA>
## PRHU0009                0.00445250659630607                           <NA>                               <NA>
## PRHU0010                 0.0053979025293029                           <NA>                               <NA>
## PRHU0011                0.00474850510024622                           <NA>                               <NA>
## PRHU0018                0.00140630493378648                           <NA>                               <NA>
##          adapter_dimer_conc_ng_ul_100200bp_region_2 library_conc_ng_ul_2001000bp_region_2 library_molarity_nm_2001000bp_region_2
## PRHU0001                                       <NA>                                    NA                                     NA
## PRHU0002                                       <NA>                                    NA                                     NA
## PRHU0009                                       <NA>                                    NA                                     NA
## PRHU0010                                       <NA>                                    NA                                     NA
## PRHU0011                                       <NA>                                    NA                                     NA
## PRHU0018                                       <NA>                                    NA                                     NA
##          library_ave_frag_size_bp_2001000bp_region_2 calculated_adapter_dimer_percent_2 library_volume_ul_sent_to_umd shipment_date
## PRHU0001                                          NA                                 NA                            14    2024-02-20
## PRHU0002                                          NA                                 NA                            14    2024-02-20
## PRHU0009                                          NA                                 NA                            14    2024-08-26
## PRHU0010                                          NA                                 NA                            14    2024-08-26
## PRHU0011                                          NA                                 NA                            14    2024-08-26
## PRHU0018                                          NA                                 NA                            14    2024-08-26
##          bbiagtc_date_received bbiagtc_library_cleanup bbiagtc_date_sequenced bbiagtc_sequence_batch bbiagtc_pe_reads_pf
## PRHU0001            2024-04-05              not needed             2024-05-03                PERS001            13167287
## PRHU0002            2024-04-05              not needed             2024-05-03                PERS001             9815642
## PRHU0009            2024-11-05              not needed             2024-11-08                PERS002            23614271
## PRHU0010            2024-11-05                     yes             2024-11-08                PERS002            22777166
## PRHU0011            2024-11-05              not needed             2024-11-08                PERS002            23458700
## PRHU0018            2024-11-05              not needed             2024-11-08                PERS002            20907177
##          bbiagtc_fastp_duplication_rate detectionparasiteby7sl detectionparasiteby18s detectionparasitebykdnasec metabolomicnasalswaborplasma
## PRHU0001                           13.9                   <NA>                   <NA>                       <NA>                         <NA>
## PRHU0002                           18.4                   <NA>                   <NA>                       <NA>                         <NA>
## PRHU0009                           19.9                   <NA>                   <NA>                       <NA>                          yes
## PRHU0010                           16.9                   <NA>                   <NA>                       <NA>                          yes
## PRHU0011                           20.4                   <NA>                   <NA>                       <NA>                          yes
## PRHU0018                           16.6               positive               positive                       <NA>                          yes
##          immunophenotypingnasalswaborpbmcs condition     batch sampleid trimomatic_input trimomatic_output trimomatic_percent fastqc_pct_gc
## PRHU0001                              <NA> undefined undefined PRHU0001         13167287          12085247              0.918            49
## PRHU0002                              <NA> undefined undefined PRHU0002               NA                NA                 NA            50
## PRHU0009                              <NA> undefined undefined PRHU0009         23614271          22272928              0.943            51
## PRHU0010                              <NA> undefined undefined PRHU0010         22777166          21621102              0.949            51
## PRHU0011                              <NA> undefined undefined PRHU0011         23458700          22252717              0.949            51
## PRHU0018                              <NA> undefined undefined PRHU0018         20907177          19815284              0.948            52
##          kraken_bacterial_classified kraken_bacterial_unclassified kraken_first_bacterial_species kraken_first_bacterial_species_reads
## PRHU0001                      418110                      11667137          Staphylococcus aureus                               117628
## PRHU0002                      324998                       8681618         Bacillus thuringiensis                                48125
## PRHU0009                       86840                        866454        Porphyrobacter sp. GA68                                11937
## PRHU0010                       76438                       1056370          Klebsiella pneumoniae                                 7070
## PRHU0011                       70332                        803596          Klebsiella pneumoniae                                 6002
## PRHU0018                       46603                        619808            Priestia megaterium                                 7831
##          kraken_viral_classified kraken_viral_unclassified kraken_first_viral_species kraken_first_viral_species_reads
## PRHU0001                   58135                  12027112      Proteus virus Isfahan                            35851
## PRHU0002                   43789                   8962827      Proteus virus Isfahan                            28527
## PRHU0009                  197113                  22075815      Proteus virus Isfahan                           146195
## PRHU0010                  132560                  21488542      Proteus virus Isfahan                            90884
## PRHU0011                  204047                  22048670      Proteus virus Isfahan                           160954
## PRHU0018                  108172                  19707112      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 hisat_rrna_input_reads_hg38_115
## PRHU0001 preprocessing/PRHU0001/outputs/02kraken_bacteria/kraken_report_matrix.tsv                        12085247
## PRHU0002 preprocessing/PRHU0002/outputs/02kraken_bacteria/kraken_report_matrix.tsv                         9006616
## PRHU0009 preprocessing/PRHU0009/outputs/06kraken_bacteria/kraken_report_matrix.tsv                        22272928
## PRHU0010 preprocessing/PRHU0010/outputs/06kraken_bacteria/kraken_report_matrix.tsv                        21621102
## PRHU0011 preprocessing/PRHU0011/outputs/06kraken_bacteria/kraken_report_matrix.tsv                        22252717
## PRHU0018 preprocessing/PRHU0018/outputs/06kraken_bacteria/kraken_report_matrix.tsv                        19815284
##          hisat_rrna_input_reads_lpanamensis_mhomcol_v68 hisat_rrna_single_concordant_hg38_115
## PRHU0001                                             NA                                 73426
## PRHU0002                                             NA                                 80682
## PRHU0009                                             NA                                408744
## PRHU0010                                             NA                                149371
## PRHU0011                                             NA                                200482
## PRHU0018                                             NA                                117268
##          hisat_rrna_single_concordant_lpanamensis_mhomcol_v68 hisat_rrna_multi_concordant_hg38_115
## PRHU0001                                                   NA                                    0
## PRHU0002                                                   NA                                    3
## PRHU0009                                                   NA                                   40
## PRHU0010                                                   NA                                    6
## PRHU0011                                                   NA                                    1
## PRHU0018                                                   NA                                    3
##          hisat_rrna_multi_concordant_lpanamensis_mhomcol_v68 hisat_rrna_percent_log_hg38_115 hisat_rrna_percent_log_lpanamensis_mhomcol_v68
## PRHU0001                                                  NA                            0.63                                             NA
## PRHU0002                                                  NA                            0.94                                             NA
## PRHU0009                                                  NA                            1.93                                             NA
## PRHU0010                                                  NA                            0.73                                             NA
## PRHU0011                                                  NA                            0.94                                             NA
## PRHU0018                                                  NA                            0.62                                             NA
##          hisat_genome_input_reads_hg38_115 hisat_genome_input_reads_lpanamensis_mhomcol_v68 hisat_genome_single_concordant_hg38_115
## PRHU0001                          12085247                                         12085247                                11027565
## PRHU0002                           9006616                                          9006616                                 8119315
## PRHU0009                          22272928                                         22272928                                19763135
## PRHU0010                          21621102                                         21621102                                19276929
## PRHU0011                          22252717                                         22252717                                19973324
## PRHU0018                          19815284                                         19815284                                18103721
##          hisat_genome_single_concordant_lpanamensis_mhomcol_v68 hisat_genome_multi_concordant_hg38_115
## PRHU0001                                                    838                                 621289
## PRHU0002                                                    760                                 505363
## PRHU0009                                                   1382                                1516414
## PRHU0010                                                    559                                1171082
## PRHU0011                                                    662                                1356659
## PRHU0018                                                    415                                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 hisat_genome_multi_all_lpanamensis_mhomcol_v68
## PRHU0001                                           14329                           84362                                           6702
## PRHU0002                                           13432                           71982                                           7507
## PRHU0009                                           22507                          235198                                          17740
## PRHU0010                                           10941                          242320                                          12474
## PRHU0011                                           12590                          206128                                          13330
## PRHU0018                                            8241                          133869                                           9468
##          hisat_unmapped_hg38_115 hisat_unmapped_lpanamensis_mhomcol_v68 hisat_genome_percent_log_hg38_115
## PRHU0001                   36996                               24147571                             99.85
## PRHU0002                  131347                               17990551                             99.27
## PRHU0009                  220613                               44502561                             99.50
## PRHU0010                  189403                               43217431                             99.56
## PRHU0011                  233569                               44477964                             99.48
## PRHU0018                  177472                               39611887                             99.55
##          hisat_genome_percent_log_lpanamensis_mhomcol_v68                                                  hisat_alignment_hg38_115
## PRHU0001                                             0.09 preprocessing/PRHU0001/outputs/20250918hisat_hg38_115/hg38_115_genome.bam
## PRHU0002                                             0.13 preprocessing/PRHU0002/outputs/20250918hisat_hg38_115/hg38_115_genome.bam
## PRHU0009                                             0.10 preprocessing/PRHU0009/outputs/20250918hisat_hg38_115/hg38_115_genome.bam
## PRHU0010                                             0.06 preprocessing/PRHU0010/outputs/20250918hisat_hg38_115/hg38_115_genome.bam
## PRHU0011                                             0.06 preprocessing/PRHU0011/outputs/20250918hisat_hg38_115/hg38_115_genome.bam
## PRHU0018                                             0.05 preprocessing/PRHU0018/outputs/20250918hisat_hg38_115/hg38_115_genome.bam
##                                                                          hisat_alignment_lpanamensis_mhomcol_v68 salmon_mapped_hg38_115
## PRHU0001 preprocessing/PRHU0001/outputs/20250918hisat_lpanamensis_mhomcol_v68/lpanamensis_mhomcol_v68_genome.bam                     NA
## PRHU0002 preprocessing/PRHU0002/outputs/20250918hisat_lpanamensis_mhomcol_v68/lpanamensis_mhomcol_v68_genome.bam                     NA
## PRHU0009 preprocessing/PRHU0009/outputs/20250918hisat_lpanamensis_mhomcol_v68/lpanamensis_mhomcol_v68_genome.bam                     NA
## PRHU0010 preprocessing/PRHU0010/outputs/20250918hisat_lpanamensis_mhomcol_v68/lpanamensis_mhomcol_v68_genome.bam                     NA
## PRHU0011 preprocessing/PRHU0011/outputs/20250918hisat_lpanamensis_mhomcol_v68/lpanamensis_mhomcol_v68_genome.bam                     NA
## PRHU0018 preprocessing/PRHU0018/outputs/20250918hisat_lpanamensis_mhomcol_v68/lpanamensis_mhomcol_v68_genome.bam                     NA
##          salmon_mapped_lpanamensis_mhomcol_v68 salmon_percent_hg38_115 salmon_percent_lpanamensis_mhomcol_v68 salmon_observed_genes_hg38_115
## PRHU0001                                   228                   54.62                               0.001887                          40892
## PRHU0002                                    NA                   61.09                               0.023971                          37639
## PRHU0009                                   514                   53.76                               0.002308                          47176
## PRHU0010                                   532                   55.29                               0.002461                          47162
## PRHU0011                                   564                   56.48                               0.002535                          46983
## PRHU0018                                   411                   57.38                               0.002074                          43731
##          salmon_observed_genes_lpanamensis_mhomcol_v68                                 input_r1                                 input_r2
## PRHU0001                                            12 unprocessed/PRHU0001_S49_R1_001.fastq.gz unprocessed/PRHU0001_S49_R2_001.fastq.gz
## PRHU0002                                            12                                                                                  
## PRHU0009                                            14  unprocessed/PRHU0009_S7_R1_001.fastq.gz  unprocessed/PRHU0009_S7_R2_001.fastq.gz
## PRHU0010                                            13  unprocessed/PRHU0010_S8_R1_001.fastq.gz  unprocessed/PRHU0010_S8_R2_001.fastq.gz
## PRHU0011                                            15  unprocessed/PRHU0011_S9_R1_001.fastq.gz  unprocessed/PRHU0011_S9_R2_001.fastq.gz
## PRHU0018                                            14 unprocessed/PRHU0018_S16_R1_001.fastq.gz 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
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"
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: 115.
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 108 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 
## summarizing abundance
## summarizing counts
## summarizing length
## Matched 22263 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 22263 rows and 108 columns.
## The numbers of samples by condition are:
## 
##             nasal swab                  PBMCs    skin biopsy healthy skin biopsy non-lesion       skin biopsy scar                   WBCs 
##                     20                     25                     15                      4                     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 108 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 108 columns.
## The numbers of samples by condition are:
## 
##             nasal swab                  PBMCs    skin biopsy healthy skin biopsy non-lesion       skin biopsy scar                   WBCs 
##                     20                     25                     15                      4                     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 <- paste0(colData(hu_se_hisat_gene)[["sample_type"]], "_",
                     colData(hu_se_hisat_gene)[["detectionparasiteby7sl"]])
colData(hu_se_hisat_gene)[["sample_7sl"]] <- sample_7sl
colData(hu_se_salmon)[["sample_7sl"]] <- sample_7sl

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       skin biopsy scar                   WBCs 
##                     20                     25                     15                      4                     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       skin biopsy scar                   WBCs 
##                     20                     25                     15                      4                     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       skin biopsy scar                   WBCs 
##                     20                     25                     15                      4                     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       skin biopsy scar                   WBCs 
##                     20                     25                     15                      4                     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

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.

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.

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.

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 every 8 hours.
## 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 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 2,281,699 to 14,374,842.

plot_nonzero(hu_se_salmon, y_intercept = 0.75)
## 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 every 8 hours.
## 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 8.943 CPM coverage and 16231 genes observed, ranging from 15093 to
## 17527.
## Warning: ggrepel: 56 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.

10 Normalize

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

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.

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       skin biopsy scar                   WBCs 
##                     20                     25                     15                      4                     16                     23
hu_detect_nb <- normalize(hu_detected, transform = "log2", convert = "cpm",
                          filter = TRUE, batch = "svaseq")
## Removing 4599 low-count genes (17664 remaining).
## transform_counts: Found 64135 values less than 0.
## transform_counts: Found 64135 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.

11 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.

salmon_mrna_7sl <- set_conditions(hu_se_salmon_mrna, fact = "detectionparasiteby7sl") %>%
  subset_se(subset = "condition!='notapplicable'")
## The numbers of samples by condition are:
## 
##      negative notapplicable      positive 
##            57            28             6
salmon_mrna_7sl_norm <- normalize(salmon_mrna_7sl, convert = "cpm", filter = TRUE,
                                  norm = "quant", transform = "log2")
## Removing 5488 low-count genes (16775 remaining).
## transform_counts: Found 64911 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, positive
## Shapes are defined by negative, positive.
## 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 5488 low-count genes (16775 remaining).
## transform_counts: Found 20417 values less than 0.
## transform_counts: Found 20417 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, positive
## Shapes are defined by negative, positive.

hisat_mrna_7sl <- set_conditions(hu_se_hisat_gene_mrna, fact = "detectionparasiteby7sl") %>%
  subset_se(subset = "condition!='notapplicable'")
## The numbers of samples by condition are:
## 
##      negative notapplicable      positive 
##            57            28             6
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, positive
## Shapes are defined by negative, positive.
## 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, positive
## Shapes are defined by negative, positive.

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'")
## The numbers of samples by condition are:
## 
##      negative notapplicable      positive 
##             8             1             2
salmon_nasal_mrna_norm <- normalize(salmon_nasal_mrna, convert = "cpm", filter = TRUE,
                                    norm = "quant", transform = "log2")
## Removing 8374 low-count genes (13889 remaining).
## transform_counts: Found 2353 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, positive
## Shapes are defined by negative, positive.

salmon_nasal_mrna_nb <- normalize(salmon_nasal_mrna, convert = "cpm", filter = TRUE,
                                  batch = "sva", transform = "log2")
## Removing 8374 low-count genes (13889 remaining).
## transform_counts: Found 841 values less than 0.
## transform_counts: Found 841 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, positive
## Shapes are defined by negative, positive.

hisat_nasal_mrna <- subset_se(hu_se_hisat_gene_mrna, subset = "sample_type=='nasal swab'") %>%
  set_conditions(fact = "detectionparasiteby7sl") %>%
  subset_se(subset = "condition!='notapplicable'")
## The numbers of samples by condition are:
## 
##      negative notapplicable      positive 
##             8             1             2
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, positive
## Shapes are defined by negative, positive.

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, positive
## Shapes are defined by negative, positive.

11.1 Repeat with the ribo zero samples

salmon_rz_7sl <- set_conditions(hu_se_salmon_rz, fact = "detectionparasiteby7sl") %>%
  subset_se(subset = "condition!='notapplicable'")
## The numbers of samples by condition are:
## 
##      negative notapplicable      positive 
##             6             1             5
salmon_rz_7sl_norm <- normalize(salmon_rz_7sl, convert = "cpm", filter = TRUE,
                                norm = "quant", transform = "log2")
## Removing 6360 low-count genes (15903 remaining).
## transform_counts: Found 8271 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, positive
## Shapes are defined by negative, positive.

salmon_rz_7sl_nb <- normalize(salmon_rz_7sl, convert = "cpm", filter = TRUE,
                              batch = "sva", transform = "log2")
## Removing 6360 low-count genes (15903 remaining).
## transform_counts: Found 1964 values less than 0.
## transform_counts: Found 1964 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, positive
## Shapes are defined by negative, positive.

hisat_rz_7sl <- set_conditions(hu_se_hisat_gene_rz, fact = "detectionparasiteby7sl") %>%
  subset_se(subset = "condition!='notapplicable'")
## The numbers of samples by condition are:
## 
##      negative notapplicable      positive 
##             6             1             5
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, positive
## Shapes are defined by negative, positive.

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, positive
## Shapes are defined by negative, positive.

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'")
## The numbers of samples by condition are:
## 
##      negative notapplicable      positive 
##             3             1             5
salmon_nasal_rz_norm <- normalize(salmon_nasal_rz, convert = "cpm", filter = TRUE,
                                    norm = "quant", transform = "log2")
## Removing 7557 low-count genes (14706 remaining).
## transform_counts: Found 2498 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, positive
## Shapes are defined by negative, positive.

salmon_nasal_rz_nb <- normalize(salmon_nasal_rz, convert = "cpm", filter = TRUE,
                                  batch = "sva", transform = "log2")
## Removing 7557 low-count genes (14706 remaining).
## transform_counts: Found 1303 values less than 0.
## transform_counts: Found 1303 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, positive
## Shapes are defined by negative, positive.

hisat_nasal_rz <- subset_se(hu_se_hisat_gene_rz, subset = "sample_type=='nasal swab'") %>%
  set_conditions(fact = "detectionparasiteby7sl") %>%
  subset_se(subset = "condition!='notapplicable'")
## The numbers of samples by condition are:
## 
##      negative notapplicable      positive 
##             3             1             5
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, positive
## Shapes are defined by negative, positive.

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, positive
## Shapes are defined by negative, positive.

12 Look at sample type and 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               nasal swab_positive               PBMCs_notapplicable 
##                                 8                                 1                                 2                                25 
##      skin biopsy healthy_negative skin biopsy healthy_notapplicable   skin biopsy non-lesion_negative         skin biopsy scar_negative 
##                                14                                 1                                 2                                14 
##    skin biopsy scar_notapplicable                     WBCs_negative                     WBCs_positive 
##                                 1                                19                                 4
hu_nasal <- subset_se(hu_s7sl, subset = "sample_type=='nasal swab'")
hu_nasal_nb <- normalize(hu_nasal, transform = "log2", convert = "cpm",
                          batch = "svaseq", filter = TRUE)
## Removing 8223 low-count genes (14040 remaining).
## transform_counts: Found 1045 values less than 0.
## transform_counts: Found 1045 values equal to 0, adding 1 to the matrix.
pp(file = "images/nasal_sample_np.png")
plot_pca(hu_nasal_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 nasal swab_negative, nasal swab_notapplicable, nasal swab_positive
## Shapes are defined by negative, notapplicable, positive.
dev.off()
## png 
##   2
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 8982 low-count genes (13281 remaining).
## transform_counts: Found 2601 values less than 0.
## transform_counts: Found 2601 values equal to 0, adding 1 to the matrix.
pp(file = "images/wbc_sample_np.png")
plot_pca(hu_wbc_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 WBCs_negative, WBCs_positive
## Shapes are defined by negative, positive.
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 8374 low-count genes (13889 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 6305 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.52525
## basic_vs_dream     0.70791
## basic_vs_ebseq     0.67788
## basic_vs_edger     0.60628
## basic_vs_limma     0.71872
## basic_vs_noiseq    0.11718
## deseq_vs_dream     0.69773
## deseq_vs_ebseq     0.74945
## deseq_vs_edger     0.90410
## deseq_vs_limma     0.65985
## deseq_vs_noiseq    0.33641
## dream_vs_ebseq     0.69816
## dream_vs_edger     0.80879
## dream_vs_limma     0.97772
## dream_vs_noiseq    0.09634
## ebseq_vs_edger     0.80917
## ebseq_vs_limma     0.68784
## ebseq_vs_noiseq    0.54862
## edger_vs_limma     0.76926
## edger_vs_noiseq    0.33872
## limma_vs_noiseq    0.10929
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 limma_sigdown
## 1 positive_vs_negative          21            69          19            69           0             0
## 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 every 8 hours.
## 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 every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was generated.
## 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 ebseq_down basic_up basic_down
## positive_vs_negative        0          0       19         69       21         69       85         54        0          0

13 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, filter = TRUE, force = TRUE,
                         model_svs = "svaseq", model_fstring = "~ 0 + condition")
## Error in h(simpleError(msg, call)): error in evaluating the argument 'object' in selecting a method for function 'pData': object 'hu_hs' not found
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.
## Error: object 'hu_hs_de' not found
hu_hs_table
## Error: object 'hu_hs_table' not found
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.
## Error: object 'hu_hs_table' not found
hu_hs_sig
## Error: object 'hu_hs_sig' not found

14 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       skin biopsy scar                   WBCs 
##                     20                     25                     15                      4                     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 <- subset_se(hu_kraken_viral, subset = "condition=='nasal swab'")
nasal_norm <- normalize(nasal_kraken_viral, filter = TRUE, norm = "cpm", transform = "log2")
## Error in h(simpleError(msg, call)): error in evaluating the argument 'object' in selecting a method for function 'normalize': object 'nasal_kraken_viral' not found
plot_corheat(nasal_norm)
## Error in h(simpleError(msg, call)): error in evaluating the argument 'input_data' in selecting a method for function 'plot_heatmap': object 'nasal_norm' not found
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       skin biopsy scar                   WBCs 
##                     20                     25                     15                      4                     16                     23
## The number of samples by batch are:
## 
## negative positive  unknown 
##       63       11       29
colData(hu_kraken_bacteria)[["kraken_bacteria"]] <- kraken_bacteria
## Error: object 'kraken_bacteria' not found
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

15 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(simpleError(msg, call)): 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 4599 low-count genes (17664 remaining).
## transform_counts: Found 43532 values less than 0.
## transform_counts: Found 43532 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 4599 low-count genes (17664 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 440621 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.5423
## basic_vs_ebseq      0.5845
## basic_vs_edger      0.4407
## basic_vs_limma      0.6008
## basic_vs_noiseq     0.5254
## dream_vs_ebseq      0.5379
## dream_vs_edger      0.6983
## dream_vs_limma      0.9815
## dream_vs_noiseq     0.6734
## ebseq_vs_edger      0.7371
## ebseq_vs_limma      0.5669
## ebseq_vs_noiseq     0.7698
## edger_vs_limma      0.6834
## edger_vs_noiseq     0.7224
## limma_vs_noiseq     0.6947
nasal_7sl_hisat_de <- all_pairwise(nasal_7sl_hisat_se, filter = TRUE,
                                   model_svs = "svaseq", model_fstring = "~ 0 + condition")
## Error in h(simpleError(msg, call)): 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 limma_sigdown
## 1 positive_vs_negative           0             0          26            49          80            54
## 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 3479 low-count genes (18784 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 140680 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 
##       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.

16 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 3727 low-count genes (18536 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 130319 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.
LS0tCnRpdGxlOiAiRXhhbWluaW5nIGh1bWFuIHNhbXBsZXMiCmF1dGhvcjogImF0YiBhYmVsZXdAZ21haWwuY29tIgpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCmJpYmxpb2dyYXBoeTogYXRiLmJpYgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKICAgIGNvZGVfZm9sZGluZzogc2hvdwogICAgZmlnX2NhcHRpb246IHRydWUKICAgIGZpZ19oZWlnaHQ6IDcKICAgIGZpZ193aWR0aDogNwogICAgaGlnaGxpZ2h0OiB6ZW5idXJuCiAgICBrZWVwX21kOiBmYWxzZQogICAgbW9kZTogc2VsZmNvbnRhaW5lZAogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQogICAgdGhlbWU6IHJlYWRhYmxlCiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDoKICAgICAgY29sbGFwc2VkOiBmYWxzZQogICAgICBzbW9vdGhfc2Nyb2xsOiBmYWxzZQotLS0KCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CmJvZHksIHRkIHsKICBmb250LXNpemU6IDE2cHg7Cn0KY29kZS5yewogIGZvbnQtc2l6ZTogMTZweDsKfQpwcmUgewogIGZvbnQtc2l6ZTogMTZweAp9CmJvZHkgLm1haW4tY29udGFpbmVyIHsKICBtYXgtd2lkdGg6IDE2MDBweDsKfQo8L3N0eWxlPgoKYGBge3Igb3B0aW9ucywgaW5jbHVkZT1GQUxTRX0KbGlicmFyeShocGdsdG9vbHMpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShyZXRpY3VsYXRlKQp0dCA8LSB0cnkoZGV2dG9vbHM6OmxvYWRfYWxsKCJ+L2hwZ2x0b29scyIpKQprbml0cjo6b3B0c19rbml0JHNldCgKICBwcm9ncmVzcyA9IFRSVUUsIHZlcmJvc2UgPSBUUlVFLCB3aWR0aCA9IDkwLCBlY2hvID0gVFJVRSkKa25pdHI6Om9wdHNfY2h1bmskc2V0KAogIGVycm9yID0gVFJVRSwgZmlnLndpZHRoID0gOCwgZmlnLmhlaWdodCA9IDgsIGZpZy5yZXRpbmEgPSAyLAogIG91dC53aWR0aCA9ICIxMDAlIiwgZGV2ID0gInBuZyIsCiAgZGV2LmFyZ3MgPSBsaXN0KHBuZyA9IGxpc3QodHlwZSA9ICJjYWlyby1wbmciKSkpCm9sZF9vcHRpb25zIDwtIG9wdGlvbnMoZGlnaXRzID0gNCwgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFLCBrbml0ci5kdXBsaWNhdGUubGFiZWwgPSAiYWxsb3ciKQpnZ3Bsb3QyOjp0aGVtZV9zZXQoZ2dwbG90Mjo6dGhlbWVfYncoYmFzZV9zaXplID0gMTIpKQp2ZXIgPC0gIjIwMjQwNSIKcHJldmlvdXNfZmlsZSA8LSAiIgp2ZXIgPC0gZm9ybWF0KFN5cy5EYXRlKCksICIlWSVtJWQiKQoKIyN0bXAgPC0gc20obG9hZG1lKGZpbGVuYW1lPXBhc3RlMChnc3ViKHBhdHRlcm49IlxcLlJtZCIsIHJlcGxhY2U9IiIsIHg9cHJldmlvdXNfZmlsZSksICItdiIsIHZlciwgIi5yZGEueHoiKSkpCnJtZF9maWxlIDwtICJodW1hbl9zYW1wbGVzXzIwMjUuUm1kIgpgYGAKCiMgVE9ETwoKIyMgMjAyNTExCgoxLiAgV2UgaGF2ZSBzb21lIHNhbXBsZXMgd2hpY2ggYXJlIGRlZmluZWQgYXMgcGVyc2lzdGVudCB2aWEgN1NMLiAgQ2FuCiAgICB3ZSBzZWUgc29tZSByZWFkcyBpbiB0aG9zZSBzYW1wbGVzPwoyLiAgU2VuZCBmaWxlIHdpdGggbWFwcGVkIHJlYWRzIHBlciBzYW1wbGUgZm9yIGFsbCBodW1hbiBzYW1wbGVzLgozLiAgUXVldWUgU0wgcmVhZCBjb3VudGVyIGZvciBhbGwgaHVtYW4gc2FtcGxlcy4KNC4gIEFsbCBzYW1wbGVzIGhhdmUgbmFzYWwsIHNraW4sIFBCTUM7IGFsbCBwYXRpZW50cyBhcmUgbmFzYWwgKyBvcgogICAgbmFzYWwgLTsgcGVyZm9ybSBjb250cmFzdHMgb2YgbmFzYWwrL25hc2FsLSBvZiB0aGUgUEJNQyBzYW1wbGVzLgogICAgRm9yIHRoZSBQQk1DIHNhbXBsZXMsIHJlY2FzdCB0aGVtIGFzICsvLQoKIyMgMjAyNjAxCgoxLiAgN1NMIHBvc2l0aXZlIHZzIG5lZ2F0aXZlIGZvcgoyLiAgQWRkIHBsb3Qgb2YgdHJhbnNjcmlwdG9tZSBjbHVzdGVyaW5nIG9mIG5hc2FsIHN3YWJzIGJldHdlZW4gbmFzYWwKICAgIHBvc2l0aXZlL25lZ2F0aXZlIHdpdGggdGhlIGNhdmVhdCB0aGF0IHRoZSBhcmUgb25seSAyIHBvc2l0aXZlcywgOAogICAgbmVnYXRpdmVzLCBhbmQgMSB1bmRldGVybWluZWQgaW4gdGhlIHN0cmFuZGVkIGxpYnJhcnk7IHRoZQogICAgcmlib3plcm8gaGF2ZSA1IHBvc2l0aXZlLCAzIG5lZ2F0aXZlLCBhbmQgMSB1bmRldGVybWluZWQuCjMuICBDcmVhdGUgYSByZWxhdGl2ZSBhYnVuZGFuY2Ugb2YgYmFjdGVyaWEvdmlydXNlcyBvYnNlcnZlZCBpbiB0aGUKICAgIG5hc3NhbCBzYW1wbGVzOyBjb3VudGluZyBhdCBnZW51cy4KCk5vdGUgdGhhdCB0aGlzIHJlcXVpcmVzIHNwbGl0dGluZyB0aGUgZGF0YSBpbnRvIDQgZ3JvdXBzOiBzYWxtb24rcnosCnNhbG1vbittcm5hLCBoaXNhdCtyeiwgaGlzYXQrbXJuYS4KCiMgQ2hhbmdlbG9nCgojIyAyMDI1MTEKCkZvbGxvd2luZyBteSBjb252ZXJzYXRpb24gd2l0aCBNYXJpYSBBZGVsYWlkYSwgSSBkb3dubG9hZGVkIGEgbmV3IGNvcHkKb2Ygb3VyIG9ubGluZSBzYW1wbGUgc2hlZXQgYW5kIG1hZGUgYSBzdWItY29weSB3aXRoIG9ubHkgdGhlIGh1bWFuCnNhbXBsZXMuICBJdCBpcyBuYW1lZCAoY3JlYXRpdmVseSkgc2FtcGxlX3NoZWV0cy9odW1hbl9zYW1wbGVzXzIwMjUxMS54bHN4CgojIEludHJvZHVjdGlvbgoKSSB3YW50IHRvIHVzZSB0aGlzIGRvY3VtZW50IHRvIGV4YW1pbmUgb3VyIGZpcnN0IHJvdW5kIG9mIHBlcnNpc3RlbmNlCnNhbXBsZXMuICBJIGNoZWNrZWQgbXkgZW1haWwgZnJvbSBOYWppYiBhbmQgZGlkIG5vdCBmaW5kIGEgc2FtcGxlCnNoZWV0IGJ1dCBkaWQgZmluZCBhbiBleHBsYW5hdGlvbiBvZiB0aGUgdGhyZWUgc2FtcGxlIHR5cGVzIHdlIGV4cGVjdC4KCkluIHByZXBhcmF0aW9uIGZvciB0aGlzLCBJIGRvd25sb2FkZWQgYSBuZXcgaGczOCBnZW5vbWUuICBTaW5jZSB0aGUKcGFuYW1lbnNpcyBhc2VtYmx5IGhhcyBub3Qgc2lnbmlmaWNhbnRseSBjaGFuZ2VkIChleGNlcHRpbmcgdGhlCnB1dGF0aXZlIGxvbmcgcmVhZCBnZW5vbWUgd2hpY2ggSSBoYXZlIG5vdCB5ZXQgc2VlbiksIEkgYW0ganVzdCB1c2luZwp0aGUgc2FtZSBvbmUuCgojIExvYWRpbmcgYW5ub3RhdGlvbgoKVGhlIGhnMzggZ2Vub21lIEkgZ290IGlzIGJyYW5kIG5ldyAoMjAyNDA1KSwgc28gZG8gbm90IHVzZSB0aGUgYXJjaGl2ZQpmb3IgYSB3aGlsZS4KCmBgYHtyfQojIyBPaywgc28gdXNlYXN0LmVuc2VtYmwgaXMgZmFpbGluZyB0b2RheSwgbGV0IHVzIHVzZSB0aGUgamFuMjAyNCBhcmNoaXZlPwojaHNfYW5ub3QgPC0gbG9hZF9iaW9tYXJ0X2Fubm90YXRpb25zKGFyY2hpdmUgPSBGQUxTRSwgc3BlY2llcyA9ICJoc2FwaWVucyIpCiMjIFNlZW1zIGxpa2UgdGhlIDIwMjQwMSBhcmNoaXZlIGlzIGEgZ29vZCBjaG9pY2UsIGl0IGlzIGV4cGxpY2l0bHkgdGhlIGhnMzhfMTExIHJlbGVhc2UuCiMjIGFuZCBpdCBpcyB3YWFhYWF5IGZhc3RlciAobGlrZSAxMDB4KSB0aGFuIHVzZWFzdCByaWdodCBub3cuCmhzX2Fubm90IDwtIGxvYWRfYmlvbWFydF9hbm5vdGF0aW9ucyhhcmNoaXZlID0gRkFMU0UsIHNwZWNpZXMgPSAiaHNhcGllbnMiLCBvdmVyd3JpdGUgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVhciA9IDIwMjUsIG1vbnRoID0gIjA4IikKCnBhbmFtZW5zaXNfb3JnZGJfaWR4IDwtIGdyZXAocGF0dGVybiA9ICJeb3JnLitwYW5hbWVuLitNSE9NLitkYiQiLCB4ID0gcm93bmFtZXMoaW5zdGFsbGVkLnBhY2thZ2VzKCkpKQpwYW5hbWVuc2lzX29yZ2RiIDwtIHRhaWwocm93bmFtZXMoaW5zdGFsbGVkLnBhY2thZ2VzKCkpW3BhbmFtZW5zaXNfb3JnZGJfaWR4XSwgbiA9IDEpCmxwX2Fubm90IDwtIGxvYWRfb3JnZGJfYW5ub3RhdGlvbnMocGFuYW1lbnNpc19vcmdkYiwga2V5dHlwZSA9ICJnaWQiKQpgYGAKClRoaXMgaXMgYSBsaXR0bGUgc2lsbHksIGJ1dCBJIGFtIGdvaW5nIHRvIHJlbG9hZCB0aGUgYW5ub3RhdGlvbnMgdXNpbmcKdGhlIHByZXZpb3VzIGludm9jYXRpb24gdG8gZXh0cmFjdCB0aGUgYW5ub3RhdGlvbiB0YWJsZSB3aXRob3V0IGhhdmluZwp0byB0aGluay4gIFRoZSBwcmV2aW91cyBibG9jayBsb2FkcyB0aGUgb3JnZGIgZm9yIG1lLCBzbyBJIGNhbiBqdXN0CnVzZSB0aGF0IHRvIGdldCB0aGUgZnVuIGFubm90YXRpb25zLgoKYGBge3J9CmxwX2Fubm90IDwtIGxvYWRfb3JnZGJfYW5ub3RhdGlvbnMocGFuYW1lbnNpc19vcmdkYiwga2V5dHlwZSA9ICJnaWQiLCBmaWVsZHMgPSAiXmFubm90IikKYGBgCgojIENvbGxlY3QgcHJlcHJvY2Vzc2VkIG1ldGFkYXRhCgpVc2UgbXkgbmV3IHNhbXBsZSBzaGVldCBoZXJlLgoKYGBge3J9CmN1cnJlbnRfc2FtcGxlc2hlZXQgPC0gInNhbXBsZV9zaGVldHMvaHVtYW5fc2FtcGxlc18yMDI1MTEueGxzeCIKZmlyc3Rfc3BlYyA8LSBtYWtlX3JuYXNlcV9zcGVjKCkKaW5wdXQgPC0gcmVhZF9tZXRhZGF0YShjdXJyZW50X3NhbXBsZXNoZWV0KQpjb2xuYW1lcyhpbnB1dCkKCnByZV9tZXRhIDwtIGdhdGhlcl9wcmVwcm9jZXNzaW5nX21ldGFkYXRhKAogIHN0YXJ0aW5nX21ldGFkYXRhID0gY3VycmVudF9zYW1wbGVzaGVldCwgaWRfY29sdW1uID0gImhwZ2xfaWRlbnRpZmllciIsCiAgc3BlY2lmaWNhdGlvbiA9IGZpcnN0X3NwZWMsIG5ld19tZXRhZGF0YSA9ICJwZXJzaXN0ZW5jZV9odV9tb2RpZmllZC54bHN4IiwKICBiYXNlZGlyID0gInByZXByb2Nlc3NpbmciLCBzcGVjaWVzID0gYygiaGczOF8xMTUiLCAibHBhbmFtZW5zaXNfbWhvbWNvbF92NjgiKSkKCm1vZGlmaWVkX21ldGEgPC0gcHJlX21ldGFbWyJuZXdfbWV0YSJdXQojIyBBZGRlZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gZ2F0aGVyX3ByZXByb2Nlc3NpbmdfbWV0YWRhdGEoKQpyb3duYW1lcyhtb2RpZmllZF9tZXRhKSA8LSBtYWtlLm5hbWVzKG1vZGlmaWVkX21ldGFbWyJocGdsX2lkZW50aWZpZXIiXV0sIHVuaXF1ZSA9IFRSVUUpCgojIyBGSVhNRTogMjAyNTExOiBJIGJyb2tlIHNvbWV0aGluZyBpbiBzb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBhbmQgaXQgaXMgcHVsbGluZwojIyB0aGUgd3JvbmcgaW5mb3JtYXRpb24gZm9yIG51bWJlciBvZiBvYnNlcnZlZCBnZW5lcy4KaGVhZChtb2RpZmllZF9tZXRhKQpoZWFkKG1vZGlmaWVkX21ldGFbWyJzYWxtb25fb2JzZXJ2ZWRfZ2VuZXNfaGczOF8xMTUiXV0pCgptb2RpZmllZF9tZXRhW1siZGV0ZWN0aW9ucGFyYXNpdGVieTdzbCJdXSA8LSBzYW5pdGl6ZV9tZXRhZGF0YShtb2RpZmllZF9tZXRhW1siZGV0ZWN0aW9ucGFyYXNpdGVieTdzbCJdXSkKc3VtbWFyeShtb2RpZmllZF9tZXRhW1siZGV0ZWN0aW9ucGFyYXNpdGVieTdzbCJdXSkKCmBgYAoKQ3JlYXRlIGEgZmFjdG9yIG9mIHRoZSA3U0wgZGV0ZWN0aW9uIG9mIG5hc2FsIHNhbXBsZXMuICBOb3RlLCB3ZSBuZWVkCnRvIHJlY2FzdCB0aGUgTkFzIGFzIHVuZGVmaW5lZC4gIEkgd291bGQgaGF2ZSBzd29ybiB0aGF0IG15IGdhdGhlcgpmdW5jdGlvbiB3b3VsZCBkbyB0aGF0PwoKYGBge3J9Cm1vZGlmaWVkX21ldGFbWyJuYXNhbF83c2xfc3RhdHVzIl1dIDwtIG1vZGlmaWVkX21ldGFbWyJkZXRlY3Rpb25wYXJhc2l0ZWJ5N3NsIl1dCgpuYXNhbF9zYW1wbGVzIDwtIG1vZGlmaWVkX21ldGFbWyJzYW1wbGVfdHlwZSJdXSA9PSAibmFzYWwgc3dhYiIKc3VtbWFyeShuYXNhbF9zYW1wbGVzKQpzbF9wb3NpdGl2ZSA8LSBtb2RpZmllZF9tZXRhW1sibmFzYWxfN3NsX3N0YXR1cyJdXSA9PSAicG9zaXRpdmUiCnN1bW1hcnkoc2xfcG9zaXRpdmUpCm5hc2FsX3Bvc2l0aXZlIDwtIG5hc2FsX3NhbXBsZXMgJiBzbF9wb3NpdGl2ZQpzdW1tYXJ5KG5hc2FsX3Bvc2l0aXZlKQpuYXNhbF9wb3NpdGl2ZV9zYW1wbGVzIDwtIHJvd25hbWVzKG1vZGlmaWVkX21ldGEpW25hc2FsX3Bvc2l0aXZlXQpuYXNhbF9wb3NpdGl2ZV9wZW9wbGUgPC0gbW9kaWZpZWRfbWV0YVtuYXNhbF9wb3NpdGl2ZV9zYW1wbGVzLCAicGFydGljaXBhbnRfY29kZSJdCm5hc2FsX3Bvc2l0aXZlX3Blb3BsZQpuYXNhbF9wb3NpdGl2ZV9wZW9wbGVfc2FtcGxlcyA8LSBtb2RpZmllZF9tZXRhW1sicGFydGljaXBhbnRfY29kZSJdXSAlaW4lIG5hc2FsX3Bvc2l0aXZlX3Blb3BsZQptb2RpZmllZF9tZXRhW1sibmFzYWxfN3NsX3N0YXR1cyJdXSA8LSAibmVnYXRpdmUiCm1vZGlmaWVkX21ldGFbbmFzYWxfcG9zaXRpdmVfcGVvcGxlX3NhbXBsZXMsICJuYXNhbF83c2xfc3RhdHVzIl0gPC0gInBvc2l0aXZlIgp3cml0ZV94bHN4KGRhdGEgPSBtb2RpZmllZF9tZXRhLCBleGNlbCA9ICJzYW1wbGVfc2hlZXRzL2h1bWFuX3NhbXBsZXNfMjAyNTExX3dpdGhfbmFzYWxfZmFjdG9yLnhsc3giKQpgYGAKCmBgYHtyLCBldmFsPUZBTFNFfQpoaXNhdF9pZHggPC0gZ3JlcChwYXR0ZXJuID0gIl5oaXNhdCIsIHggPSBuYW1lcyhmaXJzdF9zcGVjKSkKc2Vjb25kX3NwZWMgPC0gZmlyc3Rfc3BlY1toaXNhdF9pZHhdCnBvc3RfbWV0YSA8LSBnYXRoZXJfcHJlcHJvY2Vzc2luZ19tZXRhZGF0YSgKICBzdGFydGluZ19tZXRhZGF0YSA9IHByZV9tZXRhW1sibmV3X21ldGEiXV0sCiAgc3BlY2lmaWNhdGlvbiA9IHNlY29uZF9zcGVjLCBiYXNlZGlyID0gInByZXByb2Nlc3NpbmcvMjAyNDA1Iiwgc3BlY2llcyA9ICJoZzM4XzExMSIsCiAgbmV3X21ldGFkYXRhID0gInNhbXBsZV9zaGVldHMvdG1yYzJfcGVyc2lzdGVuY2VfMjAyNDA1X2xwX2hnLnhsc3giKQoKYm90aF9tZXRhIDwtIGdhdGhlcl9wcmVwcm9jZXNzaW5nX21ldGFkYXRhKAogIHN0YXJ0aW5nX21ldGFkYXRhID0gInNhbXBsZV9zaGVldHMvdG1yY19wZXJzaXN0ZW5jZV8yMDI0MDUueGxzeCIsCiAgc3BlY2lmaWNhdGlvbiA9IGZpcnN0X3NwZWMsCiAgYmFzZWRpciA9ICJwcmVwcm9jZXNzaW5nLzIwMjQwNSIsIHNwZWNpZXM9IGMoImxwYW5hbWVuc2lzX3Y2OCIsICJoZzM4XzExMSIpLAogIG5ld19tZXRhZGF0YSA9ICJzYW1wbGVfc2hlZXRzL3RtcmNfcGVyc2lzdGVuY2VfMjAyNDA1X2JvdGgueGxzeCIpCmBgYAoKIyBDb2xsZWN0IGdlbmUgYW5ub3RhdGlvbnMKCkkgc2hvdWxkIGhhdmUgYWxsIG15IGxvYWRfeHl6X2Fubm90YXRpb24gZnVuY3Rpb25zIHJldHVybiBzb21lIG9mIHRoZQpzYW1lIGVsZW1lbnRzIGluIHRoZWlyIHJldGxpc3RzLgoKYGBge3J9CmxwX2dlbmVzIDwtIGxwX2Fubm90W1siZ2VuZXMiXV0KaGdfZ2VuZXMgPC0gaHNfYW5ub3RbWyJnZW5lX2Fubm90YXRpb25zIl1dCmBgYAoKIyBRdWljayBwZWVrIGF0IHRoZSBTTCBzYW1wbGVzLCBoZzM4IHJlbGVhc2UgMTE1CgojIyBHYXRoZXIgdGhlIHRyYW5zY3JpcHQgYW5kIGdlbmUgYW5ub3RhdGlvbnMuCgpgYGB7cn0KaGdfdHggPC0gaHNfYW5ub3RbWyJhbm5vdGF0aW9uIl1dCmhnX21hcCA8LSBoc19hbm5vdFtbImdlbmVfdHhfbWFwIl1dCmxwX2dlbmVzIDwtIGxwX2Fubm90W1siZ2VuZXMiXV0KYGBgCgojIyBDcmVhdGUgaW5pdGlhbCBoaXNhdC9zYWxtb24gdGFibGVzCgpgYGB7cn0KaHVfc2Vfc2FsbW9uIDwtIGNyZWF0ZV9zZShtb2RpZmllZF9tZXRhLCBnZW5lX2luZm8gPSBoZ190eCwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eF9nZW5lX21hcCA9IGhnX21hcCwgZmlsZV9jb2x1bW4gPSAic2FsbW9uX2NvdW50X3RhYmxlX2hnMzhfMTE1IikgJT4lCiAgc2V0X2NvbmRpdGlvbnMoZmFjdCA9ICJzYW1wbGVfdHlwZSIpICU+JQogIHNldF9iYXRjaGVzKGZhY3QgPSAibGlicmFyeV90eXBlIikKaHVfc2VfaGlzYXRfZ2VuZSA8LSBjcmVhdGVfc2UobW9kaWZpZWRfbWV0YSwgZ2VuZV9pbmZvID0gaGdfZ2VuZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfY29sdW1uID0gImhpc2F0X2NvdW50X3RhYmxlX2hnMzhfMTE1IikgJT4lCiAgc2V0X2NvbmRpdGlvbnMoZmFjdCA9ICJzYW1wbGVfdHlwZSIpICU+JQogIHNldF9iYXRjaGVzKGZhY3QgPSAibGlicmFyeV90eXBlIikKYGBgCgojIyBGaWd1cmUgb3V0IHdoaWNoIHNhbXBsZXMgZG8gbm90IGhhdmUgN1NMIGNhdGVnb3JpZXMKCmBgYHtyfQp1bmRlZl83c2wgPC0gaXMubmEoY29sRGF0YShodV9zZV9zYWxtb24pW1siZGV0ZWN0aW9ucGFyYXNpdGVieTdzbCJdXSkKY29sRGF0YShodV9zZV9zYWxtb24pW3VuZGVmXzdzbCwgImRldGVjdGlvbnBhcmFzaXRlYnk3c2wiXSA8LSAidW5rbm93biIKY29sRGF0YShodV9zZV9oaXNhdF9nZW5lKVt1bmRlZl83c2wsICJkZXRlY3Rpb25wYXJhc2l0ZWJ5N3NsIl0gPC0gInVua25vd24iCnNhbXBsZV83c2wgPC0gcGFzdGUwKGNvbERhdGEoaHVfc2Vfc2FsbW9uKVtbInNhbXBsZV90eXBlIl1dLCAiXyIsCiAgICAgICAgICAgICAgICAgICAgIGNvbERhdGEoaHVfc2Vfc2FsbW9uKVtbImRldGVjdGlvbnBhcmFzaXRlYnk3c2wiXV0pCnNhbXBsZV83c2wgPC0gZ3N1Yih4ID0gc2FtcGxlXzdzbCwgcGF0dGVybiA9ICJbWzpzcGFjZTpdXSIsIHJlcGxhY2VtZW50ID0gIl8iKQpjb2xEYXRhKGh1X3NlX3NhbG1vbilbWyJzYW1wbGVfN3NsIl1dIDwtIHNhbXBsZV83c2wKY29sRGF0YShodV9zZV9oaXNhdF9nZW5lKVtbInNhbXBsZV83c2wiXV0gPC0gc2FtcGxlXzdzbApgYGAKCiMjIEhlYWx0aHkgdnMgc2NhciBzYW1wbGVzCgpgYGB7cn0KaGVhbHRoeV92c19zY2FyIDwtIGdzdWIoeCA9IGNvbERhdGEoaHVfc2Vfc2FsbW9uKVtbInNhbXBsZV90eXBlIl1dLAogICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuID0gIl5za2luIGJpb3BzeSAiLCByZXBsYWNlbWVudCA9ICIiKQpjb2xEYXRhKGh1X3NlX3NhbG1vbilbWyJocyJdXSA8LSBoZWFsdGh5X3ZzX3NjYXIKY29sRGF0YShodV9zZV9oaXNhdF9nZW5lKVtbImhzIl1dIDwtIGhlYWx0aHlfdnNfc2NhcgpgYGAKCiMjIENsZWFuIHVwIG1pc3NpbmcgN1NMIGRldGVjdGlvbiBzYW1wbGVzCgpJIHRoaW5rIHRoZSBsYXN0IG9mIHRoZXNlIGhhcyBiZWVuIGZpeGVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgSSB1cGRhdGVkCnRoaXMgc2hlZXQuCgpgYGB7cn0KdW5kZWZfN3NsIDwtIGlzLm5hKGNvbERhdGEoaHVfc2VfaGlzYXRfZ2VuZSlbWyJkZXRlY3Rpb25wYXJhc2l0ZWJ5N3NsIl1dKQpzdW1tYXJ5KHVuZGVmXzdzbCkKaWYgKHN1bSh1bmRlZl83c2wpKSB7CiAgY29sRGF0YShodV9zZV9zYWxtb24pW3VuZGVmXzdzbCwgImRldGVjdGlvbnBhcmFzaXRlYnk3c2wiXSA8LSAidW5rbm93biIKICBjb2xEYXRhKGh1X3NlX2hpc2F0X2dlbmUpW3VuZGVmXzdzbCwgImRldGVjdGlvbnBhcmFzaXRlYnk3c2wiXSA8LSAidW5rbm93biIKfSBlbHNlIHsKICBtZXNzYWdlKCJUaGVyZSBhcHBlYXIgdG8gYmUgbm8gbWlzc2luZyA3U0wgZW50cmllcy4iKQp9CmBgYAoKIyMgUHJpbnQgY3VycmVudCBzdGF0ZQoKYGBge3J9CnRhYmxlKGNvbERhdGEoaHVfc2VfaGlzYXRfZ2VuZSlbWyJsaWJyYXJ5X3R5cGUiXV0pCnRhYmxlKGNvbERhdGEoaHVfc2VfaGlzYXRfZ2VuZSlbWyJkZXRlY3Rpb25wYXJhc2l0ZWJ5N3NsIl1dKQp0YWJsZShjb2xEYXRhKGh1X3NlX2hpc2F0X2dlbmUpW1siY2xpbmljYWxfcHJlc2VudGF0aW9uIl1dKQpgYGAKCiMjIENvbWJpbmUgN1NMIHN0YXR1cyBhbmQgdGhlIHNhbXBsZSB0eXBlIGludG8gb25lIGZhY3RvcgoKYGBge3J9CnNhbXBsZV83c2wgPC0gcGFzdGUwKGNvbERhdGEoaHVfc2VfaGlzYXRfZ2VuZSlbWyJzYW1wbGVfdHlwZSJdXSwgIl8iLAogICAgICAgICAgICAgICAgICAgICBjb2xEYXRhKGh1X3NlX2hpc2F0X2dlbmUpW1siZGV0ZWN0aW9ucGFyYXNpdGVieTdzbCJdXSkKY29sRGF0YShodV9zZV9oaXNhdF9nZW5lKVtbInNhbXBsZV83c2wiXV0gPC0gc2FtcGxlXzdzbApjb2xEYXRhKGh1X3NlX3NhbG1vbilbWyJzYW1wbGVfN3NsIl1dIDwtIHNhbXBsZV83c2wKYGBgCgojIyBTZXBhcmF0ZSB0aGUgbVJOQSBzYW1wbGVzIGZyb20gcmliby16ZXJvCgpOb3RlLCB3aGVuIHdlIGFyZSBmaW5pc2hlZCwgd2Ugd2lsbCBiZSB1c2luZyBvbmx5IHRoZSBtUk5BIHNhbXBsZXMgYW5kCmlnbm9yaW5nIHRoZSByaWJvLXplcm8uICBCdXQgdGhlcmUgYXJlIHNvbWUgcXVlc3Rpb25zIGFib3V0IHRoZSBkYXRhCnByb3ZpZGVkIGJ5IHRoZSB0d28gbGlicmFyaWVzLgoKYGBge3J9Cmh1X3NlX3NhbG1vbl9tcm5hIDwtIHNldF9jb25kaXRpb25zKGh1X3NlX3NhbG1vbiwgZmFjdCA9ICJzYW1wbGVfdHlwZSIpICU+JQogIHN1YnNldF9zZShzdWJzZXQgPSAibGlicmFyeV90eXBlPT0nbVJOQSciKSAlPiUKICBzZXRfYmF0Y2hlcygiZGV0ZWN0aW9ucGFyYXNpdGVieTdzbCIpCmh1X3NlX3NhbG1vbl9yeiA8LSBzZXRfY29uZGl0aW9ucyhodV9zZV9zYWxtb24sIGZhY3QgPSAic2FtcGxlX3R5cGUiKSAlPiUKICBzdWJzZXRfc2Uoc3Vic2V0ID0gImxpYnJhcnlfdHlwZT09J1JaJyIpICU+JQogIHNldF9iYXRjaGVzKCJkZXRlY3Rpb25wYXJhc2l0ZWJ5N3NsIikKCmh1X3NlX2hpc2F0X2dlbmVfbXJuYSA8LSBzZXRfY29uZGl0aW9ucyhodV9zZV9oaXNhdF9nZW5lLCBmYWN0ID0gInNhbXBsZV90eXBlIikgJT4lCiAgc3Vic2V0X3NlKHN1YnNldCA9ICJsaWJyYXJ5X3R5cGU9PSdtUk5BJyIpICU+JQogIHNldF9iYXRjaGVzKCJkZXRlY3Rpb25wYXJhc2l0ZWJ5N3NsIikKaHVfc2VfaGlzYXRfZ2VuZV9yeiA8LSBzZXRfY29uZGl0aW9ucyhodV9zZV9oaXNhdF9nZW5lLCBmYWN0ID0gInNhbXBsZV90eXBlIikgJT4lCiAgc3Vic2V0X3NlKHN1YnNldCA9ICJsaWJyYXJ5X3R5cGU9PSdSWiciKSAlPiUKICBzZXRfYmF0Y2hlcygiZGV0ZWN0aW9ucGFyYXNpdGVieTdzbCIpCmBgYAoKIyMgRXh0cmFjdCBvbmx5IHRoZSBoZWFsdGh5IG9mIHNjYXIgc2FtcGxlcywgb25seSBtUk5BCgpgYGB7cn0KaHVfaHNfc2FsbW9uX21ybmEgPC0gc3Vic2V0X3NlKGh1X3NlX3NhbG1vbiwgc3Vic2V0ID0gImhzPT0naGVhbHRoeSd8aHM9PSdzY2FyJyIpICU+JQogIHNldF9jb25kaXRpb25zKGZhY3QgPSAiaHMiKQpodV9oc19oaXNhdF9tcm5hIDwtIHN1YnNldF9zZShodV9zZV9oaXNhdF9nZW5lX21ybmEsIHN1YnNldCA9ICJocz09J2hlYWx0aHknfGhzPT0nc2NhciciKSAlPiUKICBzZXRfY29uZGl0aW9ucyhmYWN0ID0gImhzIikKYGBgCgojIEhVIE1ldGFkYXRhCgpgYGB7cn0KaHVfbWFwcGVkX21ybmEgPC0gcGxvdF9tZXRhZGF0YV9mYWN0b3JzKGh1X3NlX2hpc2F0X2dlbmVfbXJuYSwgY29sdW1uID0gImhpc2F0X2dlbm9tZV9wZXJjZW50X2xvZ19oZzM4XzExNSIpCmh1X21hcHBlZF9tcm5hCgpodV9tYXBwZWRfcnogPC0gcGxvdF9tZXRhZGF0YV9mYWN0b3JzKGh1X3NlX2hpc2F0X2dlbmVfcnosIGNvbHVtbiA9ICJoaXNhdF9nZW5vbWVfcGVyY2VudF9sb2dfaGczOF8xMTUiKQpodV9tYXBwZWRfcnoKCmh1X29ic2VydmVkX21ybmEgPC0gcGxvdF9tZXRhZGF0YV9mYWN0b3JzKGh1X3NlX2hpc2F0X2dlbmVfbXJuYSwgY29sdW1uID0gInNhbG1vbl9vYnNlcnZlZF9nZW5lc19oZzM4XzExNSIpCmh1X29ic2VydmVkX21ybmEKCmh1X29ic2VydmVkX3J6IDwtIHBsb3RfbWV0YWRhdGFfZmFjdG9ycyhodV9zZV9oaXNhdF9nZW5lX3J6LCBjb2x1bW4gPSAic2FsbW9uX29ic2VydmVkX2dlbmVzX2hnMzhfMTE1IikKaHVfb2JzZXJ2ZWRfcnoKCmh1X3BjdF9tcm5hIDwtIHBsb3RfbWV0YWRhdGFfZmFjdG9ycyhodV9zZV9zYWxtb25fbXJuYSwgY29sdW1uID0gInNhbG1vbl9wZXJjZW50X2hnMzhfMTE1IikKaHVfcGN0X21ybmEKCmh1X3BjdF9yeiA8LSBwbG90X21ldGFkYXRhX2ZhY3RvcnMoaHVfc2Vfc2FsbW9uX3J6LCBjb2x1bW4gPSAic2FsbW9uX3BlcmNlbnRfaGczOF8xMTUiKQpodV9wY3RfcnoKCmh1X3NhbmtleSA8LSBwbG90X21ldGFfc2Fua2V5KGh1X3NlX3NhbG1vbiwgZmFjdG9ycyA9IGMoImRldGVjdGlvbnBhcmFzaXRlYnk3c2wiLCAic2FtcGxlX3R5cGUiLCAibGlicmFyeV90eXBlIikpCmh1X3NhbmtleQpgYGAKCiMgbm9uemVyby9saWJzaXplL2V0YwoKYGBge3J9CnBsb3RfbGVnZW5kKGh1X3NlX3NhbG1vbikKcGxvdF9saWJzaXplKGh1X3NlX3NhbG1vbikKcGxvdF9ub256ZXJvKGh1X3NlX3NhbG1vbiwgeV9pbnRlcmNlcHQgPSAwLjc1KQoKcGxvdF9saWJzaXplKGh1X3NlX2hpc2F0X2dlbmUpCnBsb3Rfbm9uemVybyhodV9zZV9oaXNhdF9nZW5lKQoKcGxvdF9saWJzaXplKGh1X3NlX2hpc2F0X2dlbmVfbXJuYSkKcGxvdF9saWJzaXplKGh1X3NlX2hpc2F0X2dlbmVfcnopCmBgYAoKIyBOb3JtYWxpemUKCmBgYHtyfQpodV9zZXNuIDwtIG5vcm1hbGl6ZShodV9zZV9zYWxtb24sIHRyYW5zZm9ybSA9ICJsb2cyIiwgY29udmVydCA9ICJjcG0iLAogICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBUUlVFLCBub3JtID0gInF1YW50IikKcGxvdF9jb3JoZWF0KGh1X3Nlc24pCmh1X3Nlc25fcGNhIDwtIHBsb3RfcGNhKGh1X3Nlc24pCgpwcChmaWxlID0gImltYWdlcy9odV9wY2Ffc2FtcGxldHlwZS5wbmciKQpodV9zZXNuX3BjYSRwbG90CmRldi5vZmYoKQpodV9zZXNuX3BjYQoKaHVfZGV0ZWN0ZWQgPC0gc3Vic2V0X3NlKGh1X3NlX3NhbG1vbiwgc3Vic2V0ID0gImRldGVjdGlvbnBhcmFzaXRlYnk3c2whPSd1bmtub3duJyIpICU+JQogIHNldF9jb25kaXRpb25zKGZhY3QgPSAiZGV0ZWN0aW9ucGFyYXNpdGVieTdzbCIpICU+JQogIHNldF9iYXRjaGVzKCJzYW1wbGVfdHlwZSIpCmh1X2RldGVjdF9uYiA8LSBub3JtYWxpemUoaHVfZGV0ZWN0ZWQsIHRyYW5zZm9ybSA9ICJsb2cyIiwgY29udmVydCA9ICJjcG0iLAogICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9IFRSVUUsIGJhdGNoID0gInN2YXNlcSIpCmh1X2RldGVjdF9wY2EgPC0gcGxvdF9wY2EoaHVfZGV0ZWN0X25iKQpwcChmaWxlID0gImltYWdlcy9odV9wY2FfZGV0ZWN0X3N2YS5wbmciKQpodV9kZXRlY3RfcGNhJHBsb3QKZGV2Lm9mZigpCmh1X2RldGVjdF9wY2EKYGBgCgojIENvbXBhcmUgZGlzdHJpYnV0aW9uIG9mIFJaL1N0cmFuZGVkIGxpYnJhcmllcwoKTWFyaWEgQWRlbGFpZGEgaXMgaW50ZXJlc3RlZCBpbiB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSByZWxhdGl2ZWx5IGZldwpyeiBzYW1wbGVzIHZzIHRoZSByZWxhdGl2ZWx5IGxhcmdlIG51bWJlciBvZiBzdHJhbmRlZCBtUk5BIGxpYnJhcmllcy4KCkkgdGhpbmsgaXQgaXMgbGlrZWx5IHRoYXQgdGhlIG5hc2FsIHNhbXBsZXMgYXJlIG9mIHByaW1hcnkgaW50ZXJlc3QuCgpgYGB7cn0Kc2FsbW9uX21ybmFfN3NsIDwtIHNldF9jb25kaXRpb25zKGh1X3NlX3NhbG1vbl9tcm5hLCBmYWN0ID0gImRldGVjdGlvbnBhcmFzaXRlYnk3c2wiKSAlPiUKICBzdWJzZXRfc2Uoc3Vic2V0ID0gImNvbmRpdGlvbiE9J25vdGFwcGxpY2FibGUnIikKc2FsbW9uX21ybmFfN3NsX25vcm0gPC0gbm9ybWFsaXplKHNhbG1vbl9tcm5hXzdzbCwgY29udmVydCA9ICJjcG0iLCBmaWx0ZXIgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybSA9ICJxdWFudCIsIHRyYW5zZm9ybSA9ICJsb2cyIikKIyMgVGhpcyBzdGlsbCBjbHVzdGVycyBwcmltYXJpbHkgYnkgc2FtcGxlIHR5cGUsIGFuZCB0aGVyZSBhcmUgcHJlY2lvdXMgZmV3IHBvc2l0aXZlIHNhbXBsZXMuCnBsb3RfcGNhKHNhbG1vbl9tcm5hXzdzbF9ub3JtKQpzYWxtb25fbXJuYV83c2xfbmIgPC0gbm9ybWFsaXplKHNhbG1vbl9tcm5hXzdzbCwgY29udmVydCA9ICJjcG0iLCBmaWx0ZXIgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoID0gInN2YSIsIHRyYW5zZm9ybSA9ICJsb2cyIikKcGxvdF9wY2Eoc2FsbW9uX21ybmFfN3NsX25iKQoKaGlzYXRfbXJuYV83c2wgPC0gc2V0X2NvbmRpdGlvbnMoaHVfc2VfaGlzYXRfZ2VuZV9tcm5hLCBmYWN0ID0gImRldGVjdGlvbnBhcmFzaXRlYnk3c2wiKSAlPiUKICBzdWJzZXRfc2Uoc3Vic2V0ID0gImNvbmRpdGlvbiE9J25vdGFwcGxpY2FibGUnIikKaGlzYXRfbXJuYV83c2xfbm9ybSA8LSBub3JtYWxpemUoaGlzYXRfbXJuYV83c2wsIGNvbnZlcnQgPSAiY3BtIiwgZmlsdGVyID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm0gPSAicXVhbnQiLCB0cmFuc2Zvcm0gPSAibG9nMiIpCiMjIFRoaXMgc3RpbGwgY2x1c3RlcnMgcHJpbWFyaWx5IGJ5IHNhbXBsZSB0eXBlLCBhbmQgdGhlcmUgYXJlIHByZWNpb3VzIGZldyBwb3NpdGl2ZSBzYW1wbGVzLgpwbG90X3BjYShoaXNhdF9tcm5hXzdzbF9ub3JtKQpoaXNhdF9tcm5hXzdzbF9uYiA8LSBub3JtYWxpemUoaGlzYXRfbXJuYV83c2wsIGNvbnZlcnQgPSAiY3BtIiwgZmlsdGVyID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXRjaCA9ICJzdmEiLCB0cmFuc2Zvcm0gPSAibG9nMiIpCnBsb3RfcGNhKGhpc2F0X21ybmFfN3NsX25iKQpgYGAKCk5vdyByZXN0cmljdCB0byBqdXN0IHRoZSBuYXNhbCBzYW1wbGVzLgoKYGBge3J9CnNhbG1vbl9uYXNhbF9tcm5hIDwtIHN1YnNldF9zZShodV9zZV9zYWxtb25fbXJuYSwgc3Vic2V0ID0gInNhbXBsZV90eXBlPT0nbmFzYWwgc3dhYiciKSAlPiUKICBzZXRfY29uZGl0aW9ucyhmYWN0ID0gImRldGVjdGlvbnBhcmFzaXRlYnk3c2wiKSAlPiUKICBzdWJzZXRfc2Uoc3Vic2V0ID0gImNvbmRpdGlvbiE9J25vdGFwcGxpY2FibGUnIikKc2FsbW9uX25hc2FsX21ybmFfbm9ybSA8LSBub3JtYWxpemUoc2FsbW9uX25hc2FsX21ybmEsIGNvbnZlcnQgPSAiY3BtIiwgZmlsdGVyID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybSA9ICJxdWFudCIsIHRyYW5zZm9ybSA9ICJsb2cyIikKcGxvdF9wY2Eoc2FsbW9uX25hc2FsX21ybmFfbm9ybSkKc2FsbW9uX25hc2FsX21ybmFfbmIgPC0gbm9ybWFsaXplKHNhbG1vbl9uYXNhbF9tcm5hLCBjb252ZXJ0ID0gImNwbSIsIGZpbHRlciA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXRjaCA9ICJzdmEiLCB0cmFuc2Zvcm0gPSAibG9nMiIpCnBsb3RfcGNhKHNhbG1vbl9uYXNhbF9tcm5hX25iKQoKaGlzYXRfbmFzYWxfbXJuYSA8LSBzdWJzZXRfc2UoaHVfc2VfaGlzYXRfZ2VuZV9tcm5hLCBzdWJzZXQgPSAic2FtcGxlX3R5cGU9PSduYXNhbCBzd2FiJyIpICU+JQogIHNldF9jb25kaXRpb25zKGZhY3QgPSAiZGV0ZWN0aW9ucGFyYXNpdGVieTdzbCIpICU+JQogIHN1YnNldF9zZShzdWJzZXQgPSAiY29uZGl0aW9uIT0nbm90YXBwbGljYWJsZSciKQpoaXNhdF9uYXNhbF9tcm5hX25vcm0gPC0gbm9ybWFsaXplKGhpc2F0X25hc2FsX21ybmEsIGNvbnZlcnQgPSAiY3BtIiwgZmlsdGVyID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybSA9ICJxdWFudCIsIHRyYW5zZm9ybSA9ICJsb2cyIikKcGxvdF9wY2EoaGlzYXRfbmFzYWxfbXJuYV9ub3JtKQpoaXNhdF9uYXNhbF9tcm5hX25iIDwtIG5vcm1hbGl6ZShoaXNhdF9uYXNhbF9tcm5hLCBjb252ZXJ0ID0gImNwbSIsIGZpbHRlciA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXRjaCA9ICJzdmEiLCB0cmFuc2Zvcm0gPSAibG9nMiIpCnBsb3RfcGNhKGhpc2F0X25hc2FsX21ybmFfbmIpCmBgYAoKIyMgUmVwZWF0IHdpdGggdGhlIHJpYm8gemVybyBzYW1wbGVzCgpgYGB7cn0Kc2FsbW9uX3J6XzdzbCA8LSBzZXRfY29uZGl0aW9ucyhodV9zZV9zYWxtb25fcnosIGZhY3QgPSAiZGV0ZWN0aW9ucGFyYXNpdGVieTdzbCIpICU+JQogIHN1YnNldF9zZShzdWJzZXQgPSAiY29uZGl0aW9uIT0nbm90YXBwbGljYWJsZSciKQpzYWxtb25fcnpfN3NsX25vcm0gPC0gbm9ybWFsaXplKHNhbG1vbl9yel83c2wsIGNvbnZlcnQgPSAiY3BtIiwgZmlsdGVyID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtID0gInF1YW50IiwgdHJhbnNmb3JtID0gImxvZzIiKQojIyBUaGlzIHN0aWxsIGNsdXN0ZXJzIHByaW1hcmlseSBieSBzYW1wbGUgdHlwZSwgYW5kIHRoZXJlIGFyZSBwcmVjaW91cyBmZXcgcG9zaXRpdmUgc2FtcGxlcy4KcGxvdF9wY2Eoc2FsbW9uX3J6XzdzbF9ub3JtKQpzYWxtb25fcnpfN3NsX25iIDwtIG5vcm1hbGl6ZShzYWxtb25fcnpfN3NsLCBjb252ZXJ0ID0gImNwbSIsIGZpbHRlciA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoID0gInN2YSIsIHRyYW5zZm9ybSA9ICJsb2cyIikKcGxvdF9wY2Eoc2FsbW9uX3J6XzdzbF9uYikKCmhpc2F0X3J6XzdzbCA8LSBzZXRfY29uZGl0aW9ucyhodV9zZV9oaXNhdF9nZW5lX3J6LCBmYWN0ID0gImRldGVjdGlvbnBhcmFzaXRlYnk3c2wiKSAlPiUKICBzdWJzZXRfc2Uoc3Vic2V0ID0gImNvbmRpdGlvbiE9J25vdGFwcGxpY2FibGUnIikKaGlzYXRfcnpfN3NsX25vcm0gPC0gbm9ybWFsaXplKGhpc2F0X3J6XzdzbCwgY29udmVydCA9ICJjcG0iLCBmaWx0ZXIgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybSA9ICJxdWFudCIsIHRyYW5zZm9ybSA9ICJsb2cyIikKIyMgVGhpcyBzdGlsbCBjbHVzdGVycyBwcmltYXJpbHkgYnkgc2FtcGxlIHR5cGUsIGFuZCB0aGVyZSBhcmUgcHJlY2lvdXMgZmV3IHBvc2l0aXZlIHNhbXBsZXMuCnBsb3RfcGNhKGhpc2F0X3J6XzdzbF9ub3JtKQpoaXNhdF9yel83c2xfbmIgPC0gbm9ybWFsaXplKGhpc2F0X3J6XzdzbCwgY29udmVydCA9ICJjcG0iLCBmaWx0ZXIgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoID0gInN2YSIsIHRyYW5zZm9ybSA9ICJsb2cyIikKcGxvdF9wY2EoaGlzYXRfcnpfN3NsX25iKQpgYGAKCk5vdyByZXN0cmljdCB0byBqdXN0IHRoZSBuYXNhbCBzYW1wbGVzLgoKYGBge3J9CnNhbG1vbl9uYXNhbF9yeiA8LSBzdWJzZXRfc2UoaHVfc2Vfc2FsbW9uX3J6LCBzdWJzZXQgPSAic2FtcGxlX3R5cGU9PSduYXNhbCBzd2FiJyIpICU+JQogIHNldF9jb25kaXRpb25zKGZhY3QgPSAiZGV0ZWN0aW9ucGFyYXNpdGVieTdzbCIpICU+JQogIHN1YnNldF9zZShzdWJzZXQgPSAiY29uZGl0aW9uIT0nbm90YXBwbGljYWJsZSciKQpzYWxtb25fbmFzYWxfcnpfbm9ybSA8LSBub3JtYWxpemUoc2FsbW9uX25hc2FsX3J6LCBjb252ZXJ0ID0gImNwbSIsIGZpbHRlciA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm0gPSAicXVhbnQiLCB0cmFuc2Zvcm0gPSAibG9nMiIpCnBsb3RfcGNhKHNhbG1vbl9uYXNhbF9yel9ub3JtKQpzYWxtb25fbmFzYWxfcnpfbmIgPC0gbm9ybWFsaXplKHNhbG1vbl9uYXNhbF9yeiwgY29udmVydCA9ICJjcG0iLCBmaWx0ZXIgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2ggPSAic3ZhIiwgdHJhbnNmb3JtID0gImxvZzIiKQpwbG90X3BjYShzYWxtb25fbmFzYWxfcnpfbmIpCgpoaXNhdF9uYXNhbF9yeiA8LSBzdWJzZXRfc2UoaHVfc2VfaGlzYXRfZ2VuZV9yeiwgc3Vic2V0ID0gInNhbXBsZV90eXBlPT0nbmFzYWwgc3dhYiciKSAlPiUKICBzZXRfY29uZGl0aW9ucyhmYWN0ID0gImRldGVjdGlvbnBhcmFzaXRlYnk3c2wiKSAlPiUKICBzdWJzZXRfc2Uoc3Vic2V0ID0gImNvbmRpdGlvbiE9J25vdGFwcGxpY2FibGUnIikKaGlzYXRfbmFzYWxfcnpfbm9ybSA8LSBub3JtYWxpemUoaGlzYXRfbmFzYWxfcnosIGNvbnZlcnQgPSAiY3BtIiwgZmlsdGVyID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybSA9ICJxdWFudCIsIHRyYW5zZm9ybSA9ICJsb2cyIikKcGxvdF9wY2EoaGlzYXRfbmFzYWxfcnpfbm9ybSkKaGlzYXRfbmFzYWxfcnpfbmIgPC0gbm9ybWFsaXplKGhpc2F0X25hc2FsX3J6LCBjb252ZXJ0ID0gImNwbSIsIGZpbHRlciA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXRjaCA9ICJzdmEiLCB0cmFuc2Zvcm0gPSAibG9nMiIpCnBsb3RfcGNhKGhpc2F0X25hc2FsX3J6X25iKQpgYGAKCiMgTG9vayBhdCBzYW1wbGUgdHlwZSBhbmQgN3NsCgpgYGB7cn0KaHVfczdzbCA8LSBzZXRfY29uZGl0aW9ucyhodV9zZV9zYWxtb25fbXJuYSwgZmFjdCA9ICJzYW1wbGVfN3NsIikKCmh1X25hc2FsIDwtIHN1YnNldF9zZShodV9zN3NsLCBzdWJzZXQgPSAic2FtcGxlX3R5cGU9PSduYXNhbCBzd2FiJyIpCmh1X25hc2FsX25iIDwtIG5vcm1hbGl6ZShodV9uYXNhbCwgdHJhbnNmb3JtID0gImxvZzIiLCBjb252ZXJ0ID0gImNwbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2ggPSAic3Zhc2VxIiwgZmlsdGVyID0gVFJVRSkKcHAoZmlsZSA9ICJpbWFnZXMvbmFzYWxfc2FtcGxlX25wLnBuZyIpCnBsb3RfcGNhKGh1X25hc2FsX25iKQpkZXYub2ZmKCkKCmh1X3diYyA8LSBzdWJzZXRfc2UoaHVfczdzbCwgc3Vic2V0ID0gInNhbXBsZV90eXBlPT0nV0JDcyciKQpodV93YmNfbmIgPC0gbm9ybWFsaXplKGh1X3diYywgdHJhbnNmb3JtID0gImxvZzIiLCBjb252ZXJ0ID0gImNwbSIsCiAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2ggPSAic3Zhc2VxIiwgZmlsdGVyID0gVFJVRSkKcHAoZmlsZSA9ICJpbWFnZXMvd2JjX3NhbXBsZV9ucC5wbmciKQpwbG90X3BjYShodV93YmNfbmIpCmRldi5vZmYoKQpgYGAKCmBgYHtyfQpzaG9ydF9mYWN0b3IgPC0gZ3N1Yih4ID0gYXMuY2hhcmFjdGVyKGNvbERhdGEoaHVfbmFzYWwpW1siY29uZGl0aW9uIl1dKSwgcGF0dGVybiA9ICIuKl8oLiopJCIsIHJlcGxhY2VtZW50ID0gIlxcMSIpCmh1X25hc2FsIDwtIHNldF9jb25kaXRpb25zKGh1X25hc2FsLCBmYWN0ID0gYXMuZmFjdG9yKHNob3J0X2ZhY3RvcikpCmh1X25hc2FsX25wIDwtIHN1YnNldF9zZShodV9uYXNhbCwgc3Vic2V0ID0gImNvbmRpdGlvbiE9J25vdGFwcGxpY2FibGUnIikKCmh1X25hc2FsX2RlIDwtIGFsbF9wYWlyd2lzZShodV9uYXNhbF9ucCwgZmlsdGVyID0gVFJVRSwgZm9yY2UgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfZnN0cmluZyA9ICJ+IDAgKyBjb25kaXRpb24iLCBtb2RlbF9zdnMgPSAic3Zhc2VxIikKaHVfbmFzYWxfZGUKCmh1X25hc2FsX3RhYmxlIDwtIGNvbWJpbmVfZGVfdGFibGVzKGh1X25hc2FsX2RlLCBleGNlbCA9ICJleGNlbC9wZXJzaXN0X3RhYmxlLnhsc3giKQpodV9uYXNhbF90YWJsZQoKaHVfbmFzYWxfc2lnIDwtIGV4dHJhY3Rfc2lnbmlmaWNhbnRfZ2VuZXMoaHVfbmFzYWxfdGFibGUsIGV4Y2VsID0gImV4Y2VsL3BlcnNpc3Rfc2lnLnhsc3giKQpodV9uYXNhbF9zaWcKYGBgCgojIEhlYWx0aHkgdnMgU2NhciBzYW1wbGVzCgpPbmUgcXVlcnkgZnJvbSBvdXIgbGFzdCBtZWV0aW5nIHdoaWNoIEkgZm9yZ290IGFib3V0IHVudGlsIEkgcmVyZWFkIG15ClRPRE8gbm90ZXM6IGNvbXBhcmUgdGhlIHNhbXBsZXMgbWFya2VkIGFzIGhlYWx0aHkgY29tcGFyZWQgdG8gdGhvc2UKbWFya2VkIGFzIHNjYXIuICBUaGVzZSBhcmUgdHdvIGRpc3RhbnRseSBzZXBhcmF0ZSBza2luIGJpb3BzaWVzIG9mIHRoZQpzYW1lIHBlcnNvbi4KCmBgYHtyfQpodV9oc19kZSA8LSBhbGxfcGFpcndpc2UoaHVfaHMsIGZpbHRlciA9IFRSVUUsIGZvcmNlID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX3N2cyA9ICJzdmFzZXEiLCBtb2RlbF9mc3RyaW5nID0gIn4gMCArIGNvbmRpdGlvbiIpCmh1X2hzX3RhYmxlIDwtIGNvbWJpbmVfZGVfdGFibGVzKGh1X2hzX2RlLCBleGNlbCA9ICJleGNlbC9oZWFsdGh5X3ZzX3NjYXJfdGFibGUueGxzeCIpCmh1X2hzX3RhYmxlCmh1X2hzX3NpZyA8LSBleHRyYWN0X3NpZ25pZmljYW50X2dlbmVzKGh1X2hzX3RhYmxlLCBleGNlbCA9ICJleGNlbC9oZWFsdGh5X3ZzX3NjYXJfc2lnLnhsc3giKQpodV9oc19zaWcKYGBgCgojIFRha2UgYSBwZWVrIGF0IHRoZSBrcmFrZW4gcmVzdWx0cwoKYGBge3J9Cmh1X2tyYWtlbl92aXJhbCA8LSBjcmVhdGVfc2UocHJlX21ldGFbWyJuZXdfbWV0YSJdXSwgZmlsZV9jb2x1bW4gPSAia3Jha2VuX21hdHJpeF92aXJhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlX25hID0gInplcm8iKQpodV9rcmFrZW5fdmlyYWwgPC0gc2V0X2NvbmRpdGlvbnMoaHVfa3Jha2VuX3ZpcmFsLCBmYWN0ID0gInNhbXBsZV90eXBlIikgJT4lCiAgc2V0X2JhdGNoZXMoImRldGVjdGlvbnBhcmFzaXRlYnk3c2wiKQoKa3Jha2VuX3ZpcmFsX25vcm0gPC0gbm9ybWFsaXplKGh1X2tyYWtlbl92aXJhbCwgZmlsdGVyID0gVFJVRSwgbm9ybSA9ICJjcG0iLCB0cmFuc2Zvcm0gPSAibG9nMiIpCnBsb3RfY29yaGVhdChrcmFrZW5fdmlyYWxfbm9ybSkKcGxvdF9kaXNoZWF0KGtyYWtlbl92aXJhbF9ub3JtKQpwbG90X3BjYShrcmFrZW5fdmlyYWxfbm9ybSkKCm5hc2FsX2tyYWtlbiA8LSBzdWJzZXRfc2UoaHVfa3Jha2VuX3ZpcmFsLCBzdWJzZXQgPSAiY29uZGl0aW9uPT0nbmFzYWwgc3dhYiciKQpuYXNhbF9ub3JtIDwtIG5vcm1hbGl6ZShuYXNhbF9rcmFrZW5fdmlyYWwsIGZpbHRlciA9IFRSVUUsIG5vcm0gPSAiY3BtIiwgdHJhbnNmb3JtID0gImxvZzIiKQpwbG90X2NvcmhlYXQobmFzYWxfbm9ybSkKCgpodV9rcmFrZW5fYmFjdGVyaWEgPC0gY3JlYXRlX3NlKHByZV9tZXRhW1sibmV3X21ldGEiXV0sIGZpbGVfY29sdW1uID0gImtyYWtlbl9tYXRyaXhfYmFjdGVyaWFsIiwKICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfbmEgPSAiemVybyIpCmh1X2tyYWtlbl9iYWN0ZXJpYSA8LSBzZXRfY29uZGl0aW9ucyhodV9rcmFrZW5fYmFjdGVyaWEsIGZhY3QgPSAic2FtcGxlX3R5cGUiKSAlPiUKICBzZXRfYmF0Y2hlcygiZGV0ZWN0aW9ucGFyYXNpdGVieTdzbCIpCmNvbERhdGEoaHVfa3Jha2VuX2JhY3RlcmlhKVtbImtyYWtlbl9iYWN0ZXJpYSJdXSA8LSBrcmFrZW5fYmFjdGVyaWEKCmtyYWtlbl9iYWN0ZXJpYV9ub3JtIDwtIG5vcm1hbGl6ZShodV9rcmFrZW5fYmFjdGVyaWEsIGZpbHRlciA9IFRSVUUsIG5vcm0gPSAiY3BtIiwgdHJhbnNmb3JtID0gImxvZzIiKQpwbG90X2NvcmhlYXQoa3Jha2VuX2JhY3RlcmlhX25vcm0pCnBsb3RfZGlzaGVhdChrcmFrZW5fYmFjdGVyaWFfbm9ybSkKcGxvdF9wY2Eoa3Jha2VuX2JhY3RlcmlhX25vcm0pCmBgYAoKIyBOYXNhbCBhcyBhIHByb3h5IGZvciBldmVyeXRoaW5nIGVsc2UKCkluIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBkb2N1bWVudCwgSSBjcmVhdGVkIGEgcGVjdWxpYXIgZmFjdG9yIG91dCBvZgp0aGUgbmFzYWwgc2FtcGxlIDdTTCBzdGF0ZSBhbmQgYXBwbGllZCBpdHMgcmVzdWx0IHRvIGV2ZXJ5IG90aGVyCnNhbXBsZSBmb3IgZWFjaCBwZXJzb247IHRodXMgYSBwZXJzb24gd2hvIHdhcyBwb3NpdGl2ZSBmb3IgdGhlIG5hc2FsCnNhbXBsZSB3YXMgZGVlbWVkIHBvc2l0aXZlIGZvciBldmVyeXRoaW5nLiAgTGV0IHVzIHNlZSB3aGF0IHRoYXQgbG9va3MKbGlrZS4uLgoKYGBge3J9Cm5hc2FsXzdzbF9zZSA8LSBzZXRfY29uZGl0aW9ucyhodV9zZV9zYWxtb24sIGZhY3QgPSAibmFzYWxfN3NsX3N0YXR1cyIpCm5hc2FsXzdzbF9oaXNhdF9zZSA8LSBzZXRfY29uZGl0aW9ucyhodV9zZV9oaXNhdF9nZW5lcywgZmFjdCA9ICJuYXNhbF83c2xfc3RhdHVzIikKCm5hc2FsXzdzbF9zZV9uYiA8LSBub3JtYWxpemUobmFzYWxfN3NsX3NlLCB0cmFuc2Zvcm0gPSAibG9nMiIsIGNvbnZlcnQgPSAiY3BtIiwgZmlsdGVyID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXRjaCA9ICJzdmFzZXEiKQpwbG90X3BjYShuYXNhbF83c2xfc2VfbmIpCgpuYXNhbF83c2xfZGUgPC0gYWxsX3BhaXJ3aXNlKG5hc2FsXzdzbF9zZSwgZmlsdGVyID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9zdnMgPSAic3Zhc2VxIiwgbW9kZWxfZnN0cmluZyA9ICJ+IDAgKyBjb25kaXRpb24iKQpuYXNhbF83c2xfZGUKbmFzYWxfN3NsX2hpc2F0X2RlIDwtIGFsbF9wYWlyd2lzZShuYXNhbF83c2xfaGlzYXRfc2UsIGZpbHRlciA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfc3ZzID0gInN2YXNlcSIsIG1vZGVsX2ZzdHJpbmcgPSAifiAwICsgY29uZGl0aW9uIikKbmFzYWxfN3NsX2hpc2F0X2RlCgoKbmFzYWxfN3NsX3RhYmxlIDwtIGNvbWJpbmVfZGVfdGFibGVzKG5hc2FsXzdzbF9kZSwgZXhjZWwgPSAiZXhjZWwvbmFzYWxfN3NsX3Byb3h5X3RhYmxlLnhsc3giKQpuYXNhbF83c2xfdGFibGUKbmFzYWxfN3NsX2hpc2F0X3RhYmxlIDwtIGNvbWJpbmVfZGVfdGFibGVzKG5hc2FsXzdzbF9oaXNhdF9kZSwgZXhjZWwgPSAiZXhjZWwvbmFzYWxfN3NsX3Byb3h5X3RhYmxlLnhsc3giKQpuYXNhbF83c2xfaGlzYXRfdGFibGUKYGBgCgpPaCwgTWFyaWEgQWRlbGFpZGEgd2FzIGFjdHVhbGx5IGxvb2tpbmcgb25seSBmb3IgdGhlIFBCTUMgc2FtcGxlcy4KCmBgYHtyfQpwYm1jX25hc2FsXzdzbF9zZSA8LSBzdWJzZXRfc2UoaHVfc2Vfc2FsbW9uLCBzdWJzZXQgPSAiY29uZGl0aW9uPT0nUEJNQ3MnIikgJT4lCiAgc2V0X2NvbmRpdGlvbnMoZmFjdCA9ICJuYXNhbF83c2xfc3RhdHVzIikKcGJtY19uYXNhbF83c2xfaGlzYXRfc2UgPC0gc3Vic2V0X3NlKGh1X3NlX2hpc2F0X2dlbmUsIHN1YnNldCA9ICJjb25kaXRpb249PSdQQk1DcyciKSAlPiUKICBzZXRfY29uZGl0aW9ucyhmYWN0ID0gIm5hc2FsXzdzbF9zdGF0dXMiKQoKcGJtY19uYXNhbF9oaXNhdF9ub3JtIDwtIG5vcm1hbGl6ZShwYm1jX25hc2FsXzdzbF9oaXNhdF9zZSwgdHJhbnNmb3JtID0gImxvZzIiLCBjb252ZXJ0ID0gImNwbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybSA9ICJxdWFudCIsIGZpbHRlciA9IFRSVUUpCnBsb3RfcGNhKHBibWNfbmFzYWxfaGlzYXRfbm9ybSkKCnBibWNfbmFzYWxfaGlzYXRfbmIgPC0gbm9ybWFsaXplKHBibWNfbmFzYWxfN3NsX2hpc2F0X3NlLCB0cmFuc2Zvcm0gPSAibG9nMiIsIGNvbnZlcnQgPSAiY3BtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2ggPSAic3Zhc2VxIiwgZmlsdGVyID0gInNpbXBsZSIpCnBsb3RfcGNhKHBibWNfbmFzYWxfaGlzYXRfbmIpCgpwYm1jX25hc2FsXzdzbF9kZSA8LSBhbGxfcGFpcndpc2UocGJtY19uYXNhbF83c2xfc2UsIGZpbHRlciA9ICJzaW1wbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfc3ZzID0gInN2YXNlcSIsIG1vZGVsX2ZzdHJpbmcgPSAifiAwICsgY29uZGl0aW9uIikKcGJtY19uYXNhbF83c2xfdGFibGUgPC0gY29tYmluZV9kZV90YWJsZXMocGJtY19uYXNhbF83c2xfZGUsIGV4Y2VsID0gImV4Y2VsL3BibWNfbmFzYWxfcHJveHkueGxzeCIpCmBgYAoKIyBUT0RPIDIwMjUxMgoKUmVwZWF0IHRoaXMgbmFzYWwgcHJveHkgdGVzdCB1c2luZyBlYWNoIG9mIHRoZSBvdGhlciBjZWxsIHR5cGVzLgoKVGhlIGZhY3RvcnMgb2YgbGlrZWx5IGludGVyZXN0IGFyZTogIndiY3MiICJuYXNhbCBzd2FiIiBpZGVhbGx5IGJvdGgKInNraW4gYmlvcHN5IGhlYWx0aHkiIGFuZCAic2tpbiBiaW9wc3kgc2NhciIgYnV0IHBlcmhhcHMgb25seSAic2tpbgpiaW9wc3kiLgoKYGBge3J9CndiY19uYXNhbF83c2xfc2UgPC0gc3Vic2V0X3NlKGh1X3NlX3NhbG1vbiwgc3Vic2V0ID0gImNvbmRpdGlvbj09J1dCQ3MnIikgJT4lCiAgc2V0X2NvbmRpdGlvbnMoZmFjdCA9ICJuYXNhbF83c2xfc3RhdHVzIikKd2JjX25hc2FsXzdzbF9oaXNhdF9zZSA8LSBzdWJzZXRfc2UoaHVfc2VfaGlzYXRfZ2VuZSwgc3Vic2V0ID0gImNvbmRpdGlvbj09J1dCQ3MnIikgJT4lCiAgc2V0X2NvbmRpdGlvbnMoZmFjdCA9ICJuYXNhbF83c2xfc3RhdHVzIikKCndiY19uYXNhbF9oaXNhdF9ub3JtIDwtIG5vcm1hbGl6ZSh3YmNfbmFzYWxfN3NsX2hpc2F0X3NlLCB0cmFuc2Zvcm0gPSAibG9nMiIsIGNvbnZlcnQgPSAiY3BtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9ICJzaW1wbGUiLCBub3JtID0gInF1YW50IikKcGxvdF9wY2Eod2JjX25hc2FsX2hpc2F0X25vcm0pCndiY19uYXNhbF9oaXNhdF9uYiA8LSBub3JtYWxpemUod2JjX25hc2FsXzdzbF9oaXNhdF9zZSwgdHJhbnNmb3JtID0gImxvZzIiLCBjb252ZXJ0ID0gImNwbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAic2ltcGxlIiwgYmF0Y2ggPSAic3Zhc2VxIikKcGxvdF9wY2Eod2JjX25hc2FsX2hpc2F0X25iKQoKd2JjX25hc2FsXzdzbF9kZSA8LSBhbGxfcGFpcndpc2Uod2JjX25hc2FsXzdzbF9zZSwgZmlsdGVyID0gInNpbXBsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9zdnMgPSAic3Zhc2VxIiwgbW9kZWxfZnN0cmluZyA9ICJ+IDAgKyBjb25kaXRpb24iKQp3YmNfbmFzYWxfN3NsX3RhYmxlIDwtIGNvbWJpbmVfZGVfdGFibGVzKHdiY19uYXNhbF83c2xfZGUsIGV4Y2VsID0gImV4Y2VsL3diY19uYXNhbF9wcm94eS54bHN4IikKYGBgCg==