1 TODO

  • 20260413
  1. Subtract samples 1/2 and 3/4 via rpkm
  2. Check ATAC metrics of 1,2 and 3,4 separately

2 Introduction

I spent some time playing with cellranger and its various options for treating gex/atac and their combined datatypes. I think it is unlikely that more than ~ 100 cells are likely to be detected in any combination of options. I therefore thought it would be interesting to attempt treating the samples as separate expression/atac datasets and see if I can learn about the state of the experiment from them.

3 Annotation data

It might prove the case that downloading annotations from biomart does not work, I have been getting a large number of timeouts and failures recently.

rn_biomart <- load_biomart_annotations(species = "rnorvegicus", year = 2022, month = "oct",
                                       symbol_columns = "external_gene_name", overwrite = TRUE)
## Using mart: ENSEMBL_MART_ENSEMBL from host: oct2022.archive.ensembl.org.
## Unable to perform useDataset, the given dataset is incorrect: rnorvegicus_gene_ensembl.
## c("abrachyrhynchus_gene_ensembl", "acalliptera_gene_ensembl", "acarolinensis_gene_ensembl", "acchrysaetos_gene_ensembl", "acitrinellus_gene_ensembl", "amelanoleuca_gene_ensembl", "amexicanus_gene_ensembl", "anancymaae_gene_ensembl", "aocellaris_gene_ensembl", "apercula_gene_ensembl", "aplatyrhynchos_gene_ensembl", "apolyacanthus_gene_ensembl", "applatyrhynchos_gene_ensembl", "atestudineus_gene_ensembl", "bbbison_gene_ensembl", "bgrunniens_gene_ensembl", "bihybrid_gene_ensembl", "bmusculus_gene_ensembl", 
## "bmutus_gene_ensembl", "bsplendens_gene_ensembl", "btaurus_gene_ensembl", "cabingdonii_gene_ensembl", "catys_gene_ensembl", "cauratus_gene_ensembl", "ccapucinus_gene_ensembl", "ccarpio_gene_ensembl", "cccarpio_gene_ensembl", "cdromedarius_gene_ensembl", "celegans_gene_ensembl", "cgchok1gshd_gene_ensembl", "cgobio_gene_ensembl", "charengus_gene_ensembl", "chircus_gene_ensembl", "choffmanni_gene_ensembl", "chyarkandensis_gene_ensembl", "cintestinalis_gene_ensembl", "cjacchus_gene_ensembl", "cjaponica_gene_ensembl", 
## "clanigera_gene_ensembl", "cldingo_gene_ensembl", "clfamiliaris_gene_ensembl", "clumpus_gene_ensembl", "cmilii_gene_ensembl", "cpbellii_gene_ensembl", "cporcellus_gene_ensembl", "cporosus_gene_ensembl", "csabaeus_gene_ensembl", "csavignyi_gene_ensembl", "csemilaevis_gene_ensembl", "csyrichta_gene_ensembl", "cvariegatus_gene_ensembl", "cwagneri_gene_ensembl", "dclupeoides_gene_ensembl", "dlabrax_gene_ensembl", "dleucas_gene_ensembl", "dmelanogaster_gene_ensembl", "dnovemcinctus_gene_ensembl", "dordii_gene_ensembl", 
## "drerio_gene_ensembl", "eaasinus_gene_ensembl", "eburgeri_gene_ensembl", "ecaballus_gene_ensembl", "ecalabaricus_gene_ensembl", "eelectricus_gene_ensembl", "eeuropaeus_gene_ensembl", "elucius_gene_ensembl", "etelfairi_gene_ensembl", "falbicollis_gene_ensembl", "fcatus_gene_ensembl", "fheteroclitus_gene_ensembl", "gaculeatus_gene_ensembl", "gevgoodei_gene_ensembl", "gfortis_gene_ensembl", "ggallus_gene_ensembl", "ggorilla_gene_ensembl", "gmorhua_gene_ensembl", "hburtoni_gene_ensembl", "hcomes_gene_ensembl", 
## "hgfemale_gene_ensembl", "hhucho_gene_ensembl", "hsapiens_gene_ensembl", "ipunctatus_gene_ensembl", "itridecemlineatus_gene_ensembl", "jjaculus_gene_ensembl", "kmarmoratus_gene_ensembl", "lafricana_gene_ensembl", "lbergylta_gene_ensembl", "lcalcarifer_gene_ensembl", "lchalumnae_gene_ensembl", "lcrocea_gene_ensembl", "llaticaudata_gene_ensembl", "lleishanense_gene_ensembl", "loculatus_gene_ensembl", "marmatus_gene_ensembl", "mauratus_gene_ensembl", "mcaroli_gene_ensembl", "mdomestica_gene_ensembl", 
## "mfascicularis_gene_ensembl", "mgallopavo_gene_ensembl", "mleucophaeus_gene_ensembl", "mlucifugus_gene_ensembl", "mmmarmota_gene_ensembl", "mmonoceros_gene_ensembl", "mmoschiferus_gene_ensembl", "mmulatta_gene_ensembl", "mmurdjan_gene_ensembl", "mmurinus_gene_ensembl", "mmusculus_gene_ensembl", "mnemestrina_gene_ensembl", "mochrogaster_gene_ensembl", "mpahari_gene_ensembl", "mpfuro_gene_ensembl", "mspicilegus_gene_ensembl", "mspretus_gene_ensembl", "mzebra_gene_ensembl", "nbrichardi_gene_ensembl", 
## "neugenii_gene_ensembl", "nfurzeri_gene_ensembl", "ngalili_gene_ensembl", "nleucogenys_gene_ensembl", "nnaja_gene_ensembl", "nscutatus_gene_ensembl", "nvison_gene_ensembl", "oanatinus_gene_ensembl", "oarambouillet_gene_ensembl", "oaries_gene_ensembl", "ocuniculus_gene_ensembl", "odegus_gene_ensembl", "ogarnettii_gene_ensembl", "ojavanicus_gene_ensembl", "okisutch_gene_ensembl", "olatipes_gene_ensembl", "omelastigma_gene_ensembl", "omykiss_gene_ensembl", "oniloticus_gene_ensembl", "oprinceps_gene_ensembl", 
## "osinensis_gene_ensembl", "otshawytscha_gene_ensembl", "pabelii_gene_ensembl", "panubis_gene_ensembl", "pcapensis_gene_ensembl", "pcatodon_gene_ensembl", "pcinereus_gene_ensembl", "pcoquereli_gene_ensembl", "pformosa_gene_ensembl", "pkingsleyae_gene_ensembl", "platipinna_gene_ensembl", "pleo_gene_ensembl", "pmajor_gene_ensembl", "pmarinus_gene_ensembl", "pmbairdii_gene_ensembl", "pmuralis_gene_ensembl", "pnattereri_gene_ensembl", "pnyererei_gene_ensembl", "ppaniscus_gene_ensembl", "ppardus_gene_ensembl", 
## "preticulata_gene_ensembl", "psimus_gene_ensembl", "psinensis_gene_ensembl", "psinus_gene_ensembl", "ptaltaica_gene_ensembl", "ptextilis_gene_ensembl", "ptroglodytes_gene_ensembl", "pvampyrus_gene_ensembl", "rbieti_gene_ensembl", "rferrumequinum_gene_ensembl", "rnorvegicus_gene_ensembl", "rroxellana_gene_ensembl", "saraneus_gene_ensembl", "saurata_gene_ensembl", "sbboliviensis_gene_ensembl", "scanaria_gene_ensembl", "scaustralis_gene_ensembl", "scerevisiae_gene_ensembl", "sdumerili_gene_ensembl", 
## "sformosus_gene_ensembl", "sgrahami_gene_ensembl", "shabroptila_gene_ensembl", "sharrisii_gene_ensembl", "sldorsalis_gene_ensembl", "slucioperca_gene_ensembl", "smaximus_gene_ensembl", "smerianae_gene_ensembl", "spartitus_gene_ensembl", "spunctatus_gene_ensembl", "ssalar_gene_ensembl", "ssbamei_gene_ensembl", "ssberkshire_gene_ensembl", "sscrofa_gene_ensembl", "sshampshire_gene_ensembl", "ssjinhua_gene_ensembl", "sslandrace_gene_ensembl", "sslargewhite_gene_ensembl", "ssmeishan_gene_ensembl", "sspietrain_gene_ensembl", 
## "ssrongchang_gene_ensembl", "sstibetan_gene_ensembl", "ssusmarc_gene_ensembl", "sswuzhishan_gene_ensembl", "strutta_gene_ensembl", "svulgaris_gene_ensembl", "tbelangeri_gene_ensembl", "tctriunguis_gene_ensembl", "tguttata_gene_ensembl", "tnigroviridis_gene_ensembl", "trubripes_gene_ensembl", "ttruncatus_gene_ensembl", "uamericanus_gene_ensembl", "umaritimus_gene_ensembl", "uparryii_gene_ensembl", "vpacos_gene_ensembl", "vursinus_gene_ensembl", "vvulpes_gene_ensembl", "xmaculatus_gene_ensembl", "xtropicalis_gene_ensembl"
## ), c("Pink-footed goose genes (ASM259213v1)", "Eastern happy genes (fAstCal1.2)", "Green anole genes (AnoCar2.0v2)", "Golden eagle genes (bAquChr1.2)", "Midas cichlid genes (Midas_v5)", "Giant panda genes (ASM200744v2)", "Mexican tetra genes (Astyanax_mexicanus-2.0)", "Ma's night monkey genes (Anan_2.0)", "Clown anemonefish genes (AmpOce1.0)", "Orange clownfish genes (Nemo_v1)", "Mallard genes (ASM874695v1)", "Spiny chromis genes (ASM210954v1)", "Duck genes (CAU_duck1.0)", "Climbing perch genes (fAnaTes1.2)", 
## "American bison genes (Bison_UMD1.0)", "Domestic yak genes (LU_Bosgru_v3.0)", "Hybrid - Bos Indicus genes (UOA_Brahman_1)", "Blue whale genes (mBalMus1.v2)", "Wild yak genes (BosGru_v2.0)", "Siamese fighting fish genes (fBetSpl5.2)", "Cow genes (ARS-UCD1.2)", "Abingdon island giant tortoise genes (ASM359739v1)", "Sooty mangabey genes (Caty_1.0)", "Goldfish genes (ASM336829v1)", "Capuchin genes (Cebus_imitator-1.0)", "Common carp genes (common_carp_genome)", "Common carp genes (Cypcar_WagV4.0)", "Arabian camel genes (CamDro2)", 
## "Caenorhabditis elegans (PRJNA13758) genes (WBcel235)", "Chinese hamster CHOK1GS genes (CHOK1GS_HDv1)", "Channel bull blenny genes (fCotGob3.1)", "Atlantic herring genes (Ch_v2.0.2)", "Goat genes (ARS1)", "Sloth genes (choHof1)", "Yarkand deer genes (CEY_v1)", "C.intestinalis genes (KH)", "White-tufted-ear marmoset genes (mCalJac1.pat.X)", "Japanese quail genes (Coturnix_japonica_2.0)", "Long-tailed chinchilla genes (ChiLan1.0)", "Dingo genes (ASM325472v1)", "Dog genes (ROS_Cfam_1.0)", "Lumpfish genes (fCycLum1.pri)", 
## "Elephant shark genes (Callorhinchus_milii-6.1.3)", "Painted turtle genes (Chrysemys_picta_bellii-3.0.3)", "Guinea Pig genes (Cavpor3.0)", "Australian saltwater crocodile genes (CroPor_comp1)", "Vervet-AGM genes (ChlSab1.1)", "C.savignyi genes (CSAV 2.0)", "Tongue sole genes (Cse_v1.0)", "Tarsier genes (Tarsius_syrichta-2.0.1)", "Sheepshead minnow genes (C_variegatus-1.0)", "Chacoan peccary genes (CatWag_v2_BIUU_UCD)", "Denticle herring genes (fDenClu1.1)", "European seabass genes (dlabrax2021)", 
## "Beluga whale genes (ASM228892v3)", "Drosophila melanogaster genes (BDGP6.32)", "Armadillo genes (Dasnov3.0)", "Kangaroo rat genes (Dord_2.0)", "Zebrafish genes (GRCz11)", "Donkey genes (ASM303372v1)", "Hagfish genes (Eburgeri_3.2)", "Horse genes (EquCab3.0)", "Reedfish genes (fErpCal1.1)", "Electric eel genes (Ee_SOAP_WITH_SSPACE)", "Hedgehog genes (eriEur1)", "Northern pike genes (Eluc_v4)", "Lesser hedgehog tenrec genes (TENREC)", "Collared flycatcher genes (FicAlb1.5)", "Cat genes (Felis_catus_9.0)", 
## "Mummichog genes (Fundulus_heteroclitus-3.0.2)", "Stickleback genes (BROAD S1)", "Goodes thornscrub tortoise genes (rGopEvg1_v1.p)", "Medium ground-finch genes (GeoFor_1.0)", "Chicken genes (bGalGal1.mat.broiler.GRCg7b)", "Gorilla genes (gorGor4)", "Atlantic cod genes (gadMor3.0)", "Burton's mouthbrooder genes (AstBur1.0)", "Tiger tail seahorse genes (H_comes_QL1_v1)", "Naked mole-rat female genes (HetGla_female_1.0)", "Huchen genes (ASM331708v1)", "Human genes (GRCh38.p13)", "Channel catfish genes (IpCoco_1.2)", 
## "Squirrel genes (SpeTri2.0)", "Lesser Egyptian jerboa genes (JacJac1.0)", "Mangrove rivulus genes (ASM164957v1)", "Elephant genes (Loxafr3.0)", "Ballan wrasse genes (BallGen_V1)", "Barramundi perch genes (ASB_HGAPassembly_v1)", "Coelacanth genes (LatCha1)", "Large yellow croaker genes (L_crocea_2.0)", "Blue-ringed sea krait genes (latLat_1.0)", "Leishan spiny toad genes (ASM966780v1)", "Spotted gar genes (LepOcu1)", "Zig-zag eel genes (fMasArm1.2)", "Golden Hamster genes (MesAur1.0)", "Ryukyu mouse genes (CAROLI_EIJ_v1.1)", 
## "Opossum genes (ASM229v1)", "Crab-eating macaque genes (Macaca_fascicularis_6.0)", "Turkey genes (Turkey_5.1)", "Drill genes (Mleu.le_1.0)", "Microbat genes (Myoluc2.0)", "Alpine marmot genes (marMar2.1)", "Narwhal genes (NGI_Narwhal_1)", "Siberian musk deer genes (MosMos_v2_BIUU_UCD)", "Macaque genes (Mmul_10)", "Pinecone soldierfish genes (fMyrMur1.1)", "Mouse Lemur genes (Mmur_3.0)", "Mouse genes (GRCm39)", "Pig-tailed macaque genes (Mnem_1.0)", "Prairie vole genes (MicOch1.0)", "Shrew mouse genes (PAHARI_EIJ_v1.1)", 
## "Ferret genes (MusPutFur1.0)", "Steppe mouse genes (MUSP714)", "Algerian mouse genes (SPRET_EiJ_v1)", "Zebra mbuna genes (M_zebra_UMD2a)", "Lyretail cichlid genes (NeoBri1.0)", "Wallaby genes (Meug_1.0)", "Turquoise killifish genes (Nfu_20140520)", "Upper Galilee mountains blind mole rat genes (S.galili_v1.0)", "Gibbon genes (Nleu_3.0)", "Indian cobra genes (Nana_v5)", "Mainland tiger snake genes (TS10Xv2-PRI)", "American mink genes (NNQGG.v01)", "Platypus genes (mOrnAna1.p.v1)", "Sheep genes (Oar_rambouillet_v1.0)", 
## "Sheep (texel) genes (Oar_v3.1)", "Rabbit genes (OryCun2.0)", "Degu genes (OctDeg1.0)", "Bushbaby genes (OtoGar3)", "Javanese ricefish genes (OJAV_1.1)", "Coho salmon genes (Okis_V2)", "Japanese medaka HdrR genes (ASM223467v1)", "Indian medaka genes (Om_v0.7.RACA)", "Rainbow trout genes (USDA_OmykA_1.1)", "Nile tilapia genes (O_niloticus_UMD_NMBU)", "Pika genes (OchPri2.0-Ens)", "Chinese medaka genes (ASM858656v1)", "Chinook salmon genes (Otsh_v1.0)", "Sumatran orangutan genes (Susie_PABv2)", "Olive baboon genes (Panubis1.0)", 
## "Hyrax genes (proCap1)", "Sperm whale genes (ASM283717v2)", "Koala genes (phaCin_unsw_v4.1)", "Coquerel's sifaka genes (Pcoq_1.0)", "Amazon molly genes (Poecilia_formosa-5.1.2)", "Paramormyrops kingsleyae genes (PKINGS_0.1)", "Sailfin molly genes (P_latipinna-1.0)", "Lion genes (PanLeo1.0)", "Great Tit genes (Parus_major1.1)", "Lamprey genes (Pmarinus_7.0)", "Northern American deer mouse genes (HU_Pman_2.1)", "Common wall lizard genes (PodMur_1.0)", "Red-bellied piranha genes (Pygocentrus_nattereri-1.0.2)", 
## "Makobe Island cichlid genes (PunNye1.0)", "Bonobo genes (panpan1.1)", "Leopard genes (PanPar1.0)", "Guppy genes (Guppy_female_1.0_MT)", "Greater bamboo lemur genes (Prosim_1.0)", "Chinese softshell turtle genes (PelSin_1.0)", "Vaquita genes (mPhoSin1.pri)", "Tiger genes (PanTig1.0)", "Eastern brown snake genes (EBS10Xv2-PRI)", "Chimpanzee genes (Pan_tro_3.0)", "Megabat genes (pteVam1)", "Black snub-nosed monkey genes (ASM169854v1)", "Greater horseshoe bat genes (mRhiFer1_v1.p)", "Rat genes (mRatBN7.2)", 
## "Golden snub-nosed monkey genes (Rrox_v1)", "Shrew genes (sorAra1)", "Gilthead seabream genes (fSpaAur1.1)", "Bolivian squirrel monkey genes (SaiBol1.0)", "Common canary genes (SCA1)", "African ostrich genes (ASM69896v1)", "Saccharomyces cerevisiae genes (R64-1-1)", "Greater amberjack genes (Sdu_1.0)", "Asian bonytongue genes (fSclFor1.1)", "Golden-line barbel genes (SAMN03320097.WGS_v1.1)", "Kakapo genes (bStrHab1_v1.p)", "Tasmanian devil genes (mSarHar1.11)", "Yellowtail amberjack genes (Sedor1)", 
## "Pike-perch genes (SLUC_FBN_1)", "Turbot genes (ASM1334776v1)", "Argentine black and white tegu genes (HLtupMer3)", "Bicolor damselfish genes (Stegastes_partitus-1.0.2)", "Tuatara genes (ASM311381v1)", "Atlantic salmon genes (Ssal_v3.1)", "Pig - Bamei genes (Bamei_pig_v1)", "Pig - Berkshire genes (Berkshire_pig_v1)", "Pig genes (Sscrofa11.1)", "Pig - Hampshire genes (Hampshire_pig_v1)", "Pig - Jinhua genes (Jinhua_pig_v1)", "Pig - Landrace genes (Landrace_pig_v1)", "Pig - Largewhite genes (Large_White_v1)", 
## "Pig - Meishan genes (Meishan_pig_v1)", "Pig - Pietrain genes (Pietrain_pig_v1)", "Pig - Rongchang genes (Rongchang_pig_v1)", "Pig - Tibetan genes (Tibetan_Pig_v2)", "Pig USMARC genes (USMARCv1.0)", "Pig - Wuzhishan genes (minipig_v1.0)", "Brown trout genes (fSalTru1.1)", "Eurasian red squirrel genes (mSciVul1.1)", "Tree Shrew genes (tupBel1)", "Three-toed box turtle genes (T_m_triunguis-2.0)", "Zebra finch genes (bTaeGut1_v1.p)", "Tetraodon genes (TETRAODON 8.0)", "Fugu genes (fTakRub1.2)", "Dolphin genes (turTru1)", 
## "American black bear genes (ASM334442v1)", "Polar bear genes (UrsMar_1.0)", "Arctic ground squirrel genes (ASM342692v1)", "Alpaca genes (vicPac1)", "Common wombat genes (bare-nosed_wombat_genome_assembly)", "Red fox genes (VulVul2.2)", "Platyfish genes (X_maculatus-5.0-male)", "Tropical clawed frog genes (UCB_Xtro_10.0)"), c("ASM259213v1", "fAstCal1.2", "AnoCar2.0v2", "bAquChr1.2", "Midas_v5", "ASM200744v2", "Astyanax_mexicanus-2.0", "Anan_2.0", "AmpOce1.0", "Nemo_v1", "ASM874695v1", "ASM210954v1", "CAU_duck1.0", "fAnaTes1.2", "Bison_UMD1.0", "LU_Bosgru_v3.0", "UOA_Brahman_1", "mBalMus1.v2", "BosGru_v2.0", "fBetSpl5.2", "ARS-UCD1.2", "ASM359739v1", "Caty_1.0", "ASM336829v1", "Cebus_imitator-1.0", "common_carp_genome", "Cypcar_WagV4.0", "CamDro2", "WBcel235", "CHOK1GS_HDv1", "fCotGob3.1", "Ch_v2.0.2", "ARS1", "choHof1", 
## "CEY_v1", "KH", "mCalJac1.pat.X", "Coturnix_japonica_2.0", "ChiLan1.0", "ASM325472v1", "ROS_Cfam_1.0", "fCycLum1.pri", "Callorhinchus_milii-6.1.3", "Chrysemys_picta_bellii-3.0.3", "Cavpor3.0", "CroPor_comp1", "ChlSab1.1", "CSAV 2.0", "Cse_v1.0", "Tarsius_syrichta-2.0.1", "C_variegatus-1.0", "CatWag_v2_BIUU_UCD", "fDenClu1.1", "dlabrax2021", "ASM228892v3", "BDGP6.32", "Dasnov3.0", "Dord_2.0", "GRCz11", "ASM303372v1", "Eburgeri_3.2", "EquCab3.0", "fErpCal1.1", "Ee_SOAP_WITH_SSPACE", "eriEur1", "Eluc_v4", 
## "TENREC", "FicAlb1.5", "Felis_catus_9.0", "Fundulus_heteroclitus-3.0.2", "BROAD S1", "rGopEvg1_v1.p", "GeoFor_1.0", "bGalGal1.mat.broiler.GRCg7b", "gorGor4", "gadMor3.0", "AstBur1.0", "H_comes_QL1_v1", "HetGla_female_1.0", "ASM331708v1", "GRCh38.p13", "IpCoco_1.2", "SpeTri2.0", "JacJac1.0", "ASM164957v1", "Loxafr3.0", "BallGen_V1", "ASB_HGAPassembly_v1", "LatCha1", "L_crocea_2.0", "latLat_1.0", "ASM966780v1", "LepOcu1", "fMasArm1.2", "MesAur1.0", "CAROLI_EIJ_v1.1", "ASM229v1", "Macaca_fascicularis_6.0", 
## "Turkey_5.1", "Mleu.le_1.0", "Myoluc2.0", "marMar2.1", "NGI_Narwhal_1", "MosMos_v2_BIUU_UCD", "Mmul_10", "fMyrMur1.1", "Mmur_3.0", "GRCm39", "Mnem_1.0", "MicOch1.0", "PAHARI_EIJ_v1.1", "MusPutFur1.0", "MUSP714", "SPRET_EiJ_v1", "M_zebra_UMD2a", "NeoBri1.0", "Meug_1.0", "Nfu_20140520", "S.galili_v1.0", "Nleu_3.0", "Nana_v5", "TS10Xv2-PRI", "NNQGG.v01", "mOrnAna1.p.v1", "Oar_rambouillet_v1.0", "Oar_v3.1", "OryCun2.0", "OctDeg1.0", "OtoGar3", "OJAV_1.1", "Okis_V2", "ASM223467v1", "Om_v0.7.RACA", "USDA_OmykA_1.1", 
## "O_niloticus_UMD_NMBU", "OchPri2.0-Ens", "ASM858656v1", "Otsh_v1.0", "Susie_PABv2", "Panubis1.0", "proCap1", "ASM283717v2", "phaCin_unsw_v4.1", "Pcoq_1.0", "Poecilia_formosa-5.1.2", "PKINGS_0.1", "P_latipinna-1.0", "PanLeo1.0", "Parus_major1.1", "Pmarinus_7.0", "HU_Pman_2.1", "PodMur_1.0", "Pygocentrus_nattereri-1.0.2", "PunNye1.0", "panpan1.1", "PanPar1.0", "Guppy_female_1.0_MT", "Prosim_1.0", "PelSin_1.0", "mPhoSin1.pri", "PanTig1.0", "EBS10Xv2-PRI", "Pan_tro_3.0", "pteVam1", "ASM169854v1", "mRhiFer1_v1.p", 
## "mRatBN7.2", "Rrox_v1", "sorAra1", "fSpaAur1.1", "SaiBol1.0", "SCA1", "ASM69896v1", "R64-1-1", "Sdu_1.0", "fSclFor1.1", "SAMN03320097.WGS_v1.1", "bStrHab1_v1.p", "mSarHar1.11", "Sedor1", "SLUC_FBN_1", "ASM1334776v1", "HLtupMer3", "Stegastes_partitus-1.0.2", "ASM311381v1", "Ssal_v3.1", "Bamei_pig_v1", "Berkshire_pig_v1", "Sscrofa11.1", "Hampshire_pig_v1", "Jinhua_pig_v1", "Landrace_pig_v1", "Large_White_v1", "Meishan_pig_v1", "Pietrain_pig_v1", "Rongchang_pig_v1", "Tibetan_Pig_v2", "USMARCv1.0", "minipig_v1.0", 
## "fSalTru1.1", "mSciVul1.1", "tupBel1", "T_m_triunguis-2.0", "bTaeGut1_v1.p", "TETRAODON 8.0", "fTakRub1.2", "turTru1", "ASM334442v1", "UrsMar_1.0", "ASM342692v1", "vicPac1", "bare-nosed_wombat_genome_assembly", "VulVul2.2", "X_maculatus-5.0-male", "UCB_Xtro_10.0")
## Error in `martCheck()`:
## ! You must provide a valid Mart object. To create a Mart object use the function: useMart.  Check ?useMart for more information.
rn_gff <- load_gff_annotations("~/libraries/genome/gff/rnorvegicus_7.2_107.gff")
## Returning a df with 26 columns and 1426516 rows.
rn_annot <- rn_biomart[["gene_annotations"]]
## Error:
## ! object 'rn_biomart' not found
#rn_example <- get_biomart_example_gene(species = "rnorvegicus",
#                                       host = "useast.ensembl.org", archive = FALSE)

4 Metadata

My annotation collection tool is unaware of atac data. I think therefore I will try runing it and just see what happens.

sample_sheet <- "sample_sheets/all_samples.xlsx"
rn_meta <- gather_preprocessing_metadata(sample_sheet,
                                         species = "rnorvegicus_7.2_107")
## 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.
## Writing new metadata to: sample_sheets/all_samples_modified.xlsx
## Deleting the file sample_sheets/all_samples_modified.xlsx before writing the tables.

It fails utterly.

5 Create gex summarized Experiment

rn_se <- create_se(sample_sheet, gene_info = rn_annot, file_column = "gex_count_table") %>%
  set_conditions(fact = "treatment") %>%
  set_batches(fact = "replicate")
## Reading the sample metadata.
## 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.
## The sample definitions comprises: 8 rows(samples) and 8 columns(metadata fields).
## Warning in create_se(sample_sheet, gene_info = rn_annot, file_column =
## "gex_count_table"): Some samples were removed when cross referencing the samples
## against the count data.
## Error in `h()`:
## ! error in evaluating the argument 'exp' in selecting a method for function 'set_batches': error in evaluating the argument 'exp' in selecting a method for function 'set_conditions': object 'rn_annot' not found

6 Check it out

rn_libsize <- plot_libsize(rn_se)
## Error in `h()`:
## ! error in evaluating the argument 'data' in selecting a method for function 'plot_libsize': object 'rn_se' not found
pp(file = "images/rn_libsize.png")
rn_libsize[["plot"]]
## Error:
## ! object 'rn_libsize' not found
dev.off()
## png 
##   2
rn_libsize
## Error:
## ! object 'rn_libsize' not found
rn_nz <- plot_nonzero(rn_se, y_intercept = 0.75)
## Error in `h()`:
## ! error in evaluating the argument 'data' in selecting a method for function 'plot_nonzero': object 'rn_se' not found
pp(file = "images/rn_nz.png")
rn_nz[["plot"]]
## Error:
## ! object 'rn_nz' not found
dev.off()
## png 
##   2
rn_nz
## Error:
## ! object 'rn_nz' not found

6.1 Normalize

rn_norm <- normalize(rn_se, transform = "log2", convert = "cpm", filter = TRUE)
## Error in `h()`:
## ! error in evaluating the argument 'object' in selecting a method for function 'normalize': object 'rn_se' not found
rn_disheat <- plot_disheat(rn_norm)
## Error in `h()`:
## ! error in evaluating the argument 'input_data' in selecting a method for function 'plot_heatmap': object 'rn_norm' not found
pp(file = "images/rn_disheat.png")
rn_disheat[["plot"]]
## Error:
## ! object 'rn_disheat' not found
dev.off()
## png 
##   2
rn_disheat
## Error:
## ! object 'rn_disheat' not found
rn_corheat <- plot_corheat(rn_norm)
## Error in `h()`:
## ! error in evaluating the argument 'input_data' in selecting a method for function 'plot_heatmap': object 'rn_norm' not found
pp(file = "images/rn_corheat.png")
rn_corheat[["plot"]]
## Error:
## ! object 'rn_corheat' not found
dev.off()
## png 
##   2
rn_corheat
## Error:
## ! object 'rn_corheat' not found
rn_npca <- plot_pca(rn_norm)
## Error in `h()`:
## ! error in evaluating the argument 'data' in selecting a method for function 'plot_pca': object 'rn_norm' not found
pp(file = "images/rn_npca.png")
rn_npca[["plot"]]
## Error:
## ! object 'rn_npca' not found
dev.off()
## png 
##   2
rn_npca
## Error:
## ! object 'rn_npca' not found
rn_nb <- normalize(rn_se, transform = "log2", convert = "cpm", filter = TRUE, batch = "pca")
## Error in `h()`:
## ! error in evaluating the argument 'object' in selecting a method for function 'normalize': object 'rn_se' not found
rn_nbpca <- plot_pca(rn_nb)
## Error in `h()`:
## ! error in evaluating the argument 'data' in selecting a method for function 'plot_pca': object 'rn_nb' not found
pp(file = "images/rn_nbpca.png")
rn_nbpca[["plot"]]
## Error:
## ! object 'rn_nbpca' not found
dev.off()
## png 
##   2
rn_nbpca
## Error:
## ! object 'rn_nbpca' not found

7 Subtraction comparisons

Let us pull the rpkm values of 1,2 and 3,4 and explicitly compare them and see if groups of noteworthy genes appear.

rn_rpkm <- normalize(rn_se, transform = "log2", convert = "rpkm", filter = TRUE, norm = "quant",
                     length_column = "cds_length")
## Error in `h()`:
## ! error in evaluating the argument 'object' in selecting a method for function 'normalize': object 'rn_se' not found
first_two <- assay(rn_rpkm)[, "s01"] - assay(rn_rpkm)[, "s02"]
## Error in `h()`:
## ! error in evaluating the argument 'x' in selecting a method for function 'assay': object 'rn_rpkm' not found
second_two <- assay(rn_rpkm)[, "s03"] - assay(rn_rpkm)[, "s04"]
## Error in `h()`:
## ! error in evaluating the argument 'x' in selecting a method for function 'assay': object 'rn_rpkm' not found
paired_mtrx <- data.frame(row.names = rownames(assay(rn_rpkm)),
                          "first_two" = first_two,
                          "second_two" = second_two)
## Error in `h()`:
## ! error in evaluating the argument 'x' in selecting a method for function 'rownames': error in evaluating the argument 'x' in selecting a method for function 'assay': object 'rn_rpkm' not found
cor.test(paired_mtrx[[1]], paired_mtrx[[2]])
## Error:
## ! object 'paired_mtrx' not found
first_higher_oxy_idx <- paired_mtrx[[1]] <= -2.0
## Error:
## ! object 'paired_mtrx' not found
first_higher_oxy <- rownames(paired_mtrx)[first_higher_oxy_idx]
## Error in `h()`:
## ! error in evaluating the argument 'x' in selecting a method for function 'rownames': object 'paired_mtrx' not found
second_higher_oxy_idx <- paired_mtrx[[2]] <= -2.0
## Error:
## ! object 'paired_mtrx' not found
second_higher_oxy <- rownames(paired_mtrx)[second_higher_oxy_idx]
## Error in `h()`:
## ! error in evaluating the argument 'x' in selecting a method for function 'rownames': object 'paired_mtrx' not found
paired_mtrx_annotated <- merge(rowData(rn_se), paired_mtrx, by = "row.names")
## Error in `h()`:
## ! error in evaluating the argument 'x' in selecting a method for function 'merge': error in evaluating the argument 'x' in selecting a method for function 'rowData': object 'rn_se' not found
rownames(paired_mtrx_annotated) <- paired_mtrx_annotated[["Row.names"]]
## Error:
## ! object 'paired_mtrx_annotated' not found
paired_mtrx_annotated[["Row.names"]] <- NULL
## Error:
## ! object 'paired_mtrx_annotated' not found
written <- write_xlsx(paired_mtrx_annotated, excel = "excel/two_pairs_of_samples_comparisons.xlsx")
## Error in `h()`:
## ! error in evaluating the argument 'data' in selecting a method for function 'write_xlsx': object 'paired_mtrx_annotated' not found
length(first_higher_oxy)
## Error:
## ! object 'first_higher_oxy' not found
length(second_higher_oxy)
## Error:
## ! object 'second_higher_oxy' not found
sum(first_higher_oxy %in% second_higher_oxy)
## Error:
## ! object 'first_higher_oxy' not found
first_higher_saline_idx <- paired_mtrx[[1]] >= 2.0
## Error:
## ! object 'paired_mtrx' not found
first_higher_saline <- rownames(paired_mtrx)[first_higher_saline_idx]
## Error in `h()`:
## ! error in evaluating the argument 'x' in selecting a method for function 'rownames': object 'paired_mtrx' not found
second_higher_saline_idx <- paired_mtrx[[2]] >= 2.0
## Error:
## ! object 'paired_mtrx' not found
second_higher_saline <- rownames(paired_mtrx)[second_higher_saline_idx]
## Error in `h()`:
## ! error in evaluating the argument 'x' in selecting a method for function 'rownames': object 'paired_mtrx' not found
length(first_higher_saline)
## Error:
## ! object 'first_higher_saline' not found
length(second_higher_saline)
## Error:
## ! object 'second_higher_saline' not found
sum(first_higher_saline %in% second_higher_saline)
## Error:
## ! object 'first_higher_saline' not found

8 Compare the two conditions

pairs <- all_pairwise(rn_se, model_svs = "svaseq", force = TRUE,
                      model_fstring = "~ 0 + condition", filter = TRUE)
## Error in `h()`:
## ! error in evaluating the argument 'x' in selecting a method for function 'colData': object 'rn_se' not found
pairs
## function (x, ...) 
## UseMethod("pairs")
## <bytecode: 0x55c8f1c08158>
## <environment: namespace:graphics>
table <- combine_de_tables(pairs, label_column = "external_gene_name",
                           excel = "excel/pairs.xlsx")
## Deleting the file excel/pairs.xlsx before writing the tables.
## Error in `apr[[q]]`:
## ! object of type 'closure' is not subsettable
table
## function (..., exclude = if (useNA == "no") c(NA, NaN), useNA = c("no", 
##     "ifany", "always"), dnn = list.names(...), deparse.level = 1) 
## {
##     list.names <- function(...) {
##         l <- as.list(substitute(list(...)))[-1L]
##         if (length(l) == 1L && is.list(..1) && !is.null(nm <- names(..1))) 
##             return(nm)
##         nm <- names(l)
##         fixup <- if (is.null(nm)) 
##             seq_along(l)
##         else nm == ""
##         dep <- vapply(l[fixup], function(x) switch(deparse.level + 
##             1, "", if (is.symbol(x)) as.character(x) else "", 
##             deparse(x, nlines = 1)[1L]), "")
##         if (is.null(nm)) 
##             dep
##         else {
##             nm[fixup] <- dep
##             nm
##         }
##     }
##     miss.use <- missing(useNA)
##     miss.exc <- missing(exclude)
##     useNA <- if (miss.use && !miss.exc && !match(NA, exclude, 
##         nomatch = 0L)) 
##         "ifany"
##     else match.arg(useNA)
##     doNA <- useNA != "no"
##     if (!miss.use && !miss.exc && doNA && match(NA, exclude, 
##         nomatch = 0L)) 
##         warning("'exclude' containing NA and 'useNA' != \"no\"' are a bit contradicting")
##     args <- list(...)
##     if (length(args) == 1L && is.list(args[[1L]])) {
##         args <- args[[1L]]
##         if (length(dnn) != length(args)) 
##             dnn <- paste(dnn[1L], seq_along(args), sep = ".")
##     }
##     if (!length(args)) 
##         stop("nothing to tabulate")
##     bin <- 0L
##     lens <- NULL
##     dims <- integer()
##     pd <- 1L
##     dn <- NULL
##     for (a in args) {
##         if (is.null(lens)) 
##             lens <- length(a)
##         else if (length(a) != lens) 
##             stop("all arguments must have the same length")
##         fact.a <- is.factor(a)
##         if (doNA) 
##             aNA <- anyNA(a)
##         if (!fact.a) {
##             a0 <- a
##             op <- options(warn = 2)
##             on.exit(options(op))
##             a <- factor(a, exclude = exclude)
##             options(op)
##         }
##         add.na <- doNA
##         if (add.na) {
##             ifany <- (useNA == "ifany")
##             anNAc <- anyNA(a)
##             add.na <- if (!ifany || anNAc) {
##                 ll <- levels(a)
##                 if (add.ll <- !anyNA(ll)) {
##                   ll <- c(ll, NA)
##                   TRUE
##                 }
##                 else if (!ifany && !anNAc) 
##                   FALSE
##                 else TRUE
##             }
##             else FALSE
##         }
##         if (add.na) 
##             a <- factor(a, levels = ll, exclude = NULL)
##         else ll <- levels(a)
##         a <- as.integer(a)
##         if (fact.a && !miss.exc) {
##             ll <- ll[keep <- which(match(ll, exclude, nomatch = 0L) == 
##                 0L)]
##             a <- match(a, keep)
##         }
##         else if (!fact.a && add.na) {
##             if (ifany && !aNA && add.ll) {
##                 ll <- ll[!is.na(ll)]
##                 is.na(a) <- match(a0, c(exclude, NA), nomatch = 0L) > 
##                   0L
##             }
##             else {
##                 is.na(a) <- match(a0, exclude, nomatch = 0L) > 
##                   0L
##             }
##         }
##         nl <- length(ll)
##         dims <- c(dims, nl)
##         if (prod(dims) > .Machine$integer.max) 
##             stop("attempt to make a table with >= 2^31 elements")
##         dn <- c(dn, list(ll))
##         bin <- bin + pd * (a - 1L)
##         pd <- pd * nl
##     }
##     names(dn) <- dnn
##     bin <- bin[!is.na(bin)]
##     if (length(bin)) 
##         bin <- bin + 1L
##     y <- array(tabulate(bin, pd), dims, dimnames = dn)
##     class(y) <- "table"
##     y
## }
## <bytecode: 0x55c8f63a4bf0>
## <environment: namespace:base>
sig <- extract_significant_genes(table, excel = "excel/sig.xlsx", according_to = "limma")
## Deleting the file excel/sig.xlsx before writing the tables.
## Error in `combined[["contrast_list"]]`:
## ! object of type 'closure' is not subsettable
sig
## Error:
## ! object 'sig' not found

Limma volcano plot

In theory, the column ‘external_gene_name’ should provide reasonable genenames, but I am having some troubles extracting it from ensembl.

pp(file = "images/gex_volcano.png")
table[["plots"]][["saline_vs_oxycodone"]][["limma_vol_plots"]]
## Error in `table[["plots"]]`:
## ! object of type 'closure' is not subsettable
dev.off()
## png 
##   2
table[["plots"]][["saline_vs_oxycodone"]][["limma_vol_plots"]]
## Error in `table[["plots"]]`:
## ! object of type 'closure' is not subsettable
ups <- sig[["limma"]][["ups"]][["saline_vs_oxycodone"]]
## Error:
## ! object 'sig' not found
dim(ups)
## Error:
## ! object 'ups' not found
downs <- sig[["limma"]][["downs"]][["saline_vs_oxycodone"]]
## Error:
## ! object 'sig' not found
dim(downs)
## Error:
## ! object 'downs' not found
gp_up <- simple_gprofiler(ups, species = "rnorvegicus")
## Error:
## ! object 'ups' not found
tt <- plot_enrichresult(gp_up[["REAC_enrich"]])
## Error:
## ! object 'gp_up' not found
pp(file = "images/increased_saline_reactome.png")
tt[["dot"]]
## NULL
dev.off()
## png 
##   2
tt <- plot_enrichresult(gp_up[["BP_enrich"]])
## Error:
## ! object 'gp_up' not found
pp(file = "images/increased_saline_BP.png")
tt[["dot"]]
## NULL
dev.off()
## png 
##   2

9 Examine the ATAC results

Given my lack of experience with ATAC data, I am currently using

https://nbis-workshop-epigenomics.readthedocs.io/en/latest/content/tutorials/data-preproc/data-qc-atac.html

as a guide.

library(ATACseqQC)
## Loading required package: BiocGenerics
## Loading required package: generics
## 
## Attaching package: 'generics'
## The following objects are masked from 'package:base':
## 
##     as.difftime, as.factor, as.ordered, intersect, is.element, setdiff,
##     setequal, union
## 
## Attaching package: 'BiocGenerics'
## The following objects are masked from 'package:hpgltools':
## 
##     annotation<-, conditions, conditions<-, IQR, mad, sd, var, xtabs
## The following objects are masked from 'package:stats':
## 
##     IQR, mad, sd, var, xtabs
## The following objects are masked from 'package:base':
## 
##     anyDuplicated, aperm, append, as.data.frame, basename, cbind, colnames,
##     dirname, do.call, duplicated, eval, evalq, Filter, Find, get, grep,
##     grepl, is.unsorted, lapply, Map, mapply, match, mget, order, paste,
##     pmax, pmax.int, pmin, pmin.int, Position, rank, rbind, Reduce,
##     rownames, sapply, saveRDS, table, tapply, unique, unsplit, which.max,
##     which.min
## Loading required package: S4Vectors
## Loading required package: stats4
## 
## Attaching package: 'S4Vectors'
## The following object is masked from 'package:utils':
## 
##     findMatches
## The following objects are masked from 'package:base':
## 
##     expand.grid, I, unname
library(BSgenome.Rnorvegicus.UCSC.rn7)
## Loading required package: BSgenome
## Loading required package: IRanges
## 
## Attaching package: 'IRanges'
## The following object is masked from 'package:hpgltools':
## 
##     trim
## Loading required package: Seqinfo
## Loading required package: GenomicRanges
## Loading required package: Biostrings
## Loading required package: XVector
## 
## Attaching package: 'Biostrings'
## The following object is masked from 'package:base':
## 
##     strsplit
## Loading required package: BiocIO
## 
## Attaching package: 'BiocIO'
## The following object is masked from 'package:reticulate':
## 
##     import
## Loading required package: rtracklayer
library(TxDb.Rnorvegicus.UCSC.rn7.refGene)
## Loading required package: GenomicFeatures
## Loading required package: AnnotationDbi
## 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
library(ChIPpeakAnno)
library(Rsamtools)

bam_outputs <- c(
  "preprocessing/1_saline_atac/outputs/40hisat_rnorvegicus_norway_grcr8/rnorvegicus_norway_grcr8_genome-paired.bam",
  "preprocessing/2_oxycodone_atac/outputs/40hisat_rnorvegicus_norway_grcr8/rnorvegicus_norway_grcr8_genome-paired.bam",
  "preprocessing/3_saline_atac/outputs/40hisat_rnorvegicus_norway_grcr8/rnorvegicus_norway_grcr8_genome-paired.bam",
  "preprocessing/4_oxycodone_atac/outputs/40hisat_rnorvegicus_norway_grcr8/rnorvegicus_norway_grcr8_genome-paired.bam")

bam_qc <- bamQC(bam_outputs[1], outPath = NULL)

possibleTag <- combn(LETTERS, 2)
possibleTag <- c(paste0(possibleTag[1, ], possibleTag[2, ]),
                 paste0(possibleTag[2, ], possibleTag[1, ]))
## This seems a bit stupid?  I already know what the primary sam tags are, should I not just
## have a list with their names and meanings?
bamTop100 <- scanBam(BamFile(bam_outputs[1], yieldSize = 100),
                    param = ScanBamParam(tag = possibleTag))[[1]]$tag
tags <- names(bamTop100)[lengths(bamTop100)>0]
tags
##  [1] "AS" "MD" "XG" "NH" "NM" "XM" "XN" "XO" "YS" "ZS" "YT"
gal = readBamFile(bam_outputs[1], tag = tags, asMates = TRUE, bigFile = TRUE)
out_dir <- "preprocessing/1_saline_atac/outputs/99atac_qc"
dir.create(out_dir, recursive = TRUE)
## Warning in dir.create(out_dir, recursive = TRUE):
## 'preprocessing/1_saline_atac/outputs/99atac_qc' already exists
shifted_bam <- file.path(out_dir, "shifted.bam")
gal1 = shiftGAlignmentsList(gal, outbam = shifted_bam)
##   |                                                                                   |                                                                           |   0%  |                                                                                   |=                                                                          |   1%  |                                                                                   |=                                                                          |   2%  |                                                                                   |==                                                                         |   2%  |                                                                                   |==                                                                         |   3%  |                                                                                   |===                                                                        |   4%  |                                                                                   |====                                                                       |   5%  |                                                                                   |====                                                                       |   6%  |                                                                                   |=====                                                                      |   7%  |                                                                                   |======                                                                     |   7%  |                                                                                   |======                                                                     |   8%  |                                                                                   |=======                                                                    |   9%  |                                                                                   |=======                                                                    |  10%  |                                                                                   |========                                                                   |  11%  |                                                                                   |=========                                                                  |  11%  |                                                                                   |=========                                                                  |  12%  |                                                                                   |==========                                                                 |  13%  |                                                                                   |==========                                                                 |  14%  |                                                                                   |===========                                                                |  15%  |                                                                                   |============                                                               |  16%  |                                                                                   |=============                                                              |  17%  |                                                                                   |==============                                                             |  18%  |                                                                                   |==============                                                             |  19%  |                                                                                   |===============                                                            |  20%  |                                                                                   |================                                                           |  21%  |                                                                                   |=================                                                          |  22%  |                                                                                   |=================                                                          |  23%  |                                                                                   |==================                                                         |  24%  |                                                                                   |==================                                                         |  25%  |                                                                                   |===================                                                        |  25%  |                                                                                   |====================                                                       |  26%  |                                                                                   |====================                                                       |  27%  |                                                                                   |=====================                                                      |  28%  |                                                                                   |======================                                                     |  29%  |                                                                                   |======================                                                     |  30%  |                                                                                   |=======================                                                    |  30%  |                                                                                   |=======================                                                    |  31%  |                                                                                   |========================                                                   |  32%  |                                                                                   |=========================                                                  |  33%  |                                                                                   |=========================                                                  |  34%  |                                                                                   |==========================                                                 |  34%  |                                                                                   |==========================                                                 |  35%  |                                                                                   |===========================                                                |  36%  |                                                                                   |============================                                               |  37%  |                                                                                   |============================                                               |  38%  |                                                                                   |=============================                                              |  39%  |                                                                                   |==============================                                             |  39%  |                                                                                   |==============================                                             |  40%  |                                                                                   |===============================                                            |  41%  |                                                                                   |===============================                                            |  42%  |                                                                                   |================================                                           |  43%  |                                                                                   |=================================                                          |  43%  |                                                                                   |=================================                                          |  44%  |                                                                                   |==================================                                         |  45%  |                                                                                   |==================================                                         |  46%  |                                                                                   |===================================                                        |  47%  |                                                                                   |====================================                                       |  48%  |                                                                                   |=====================================                                      |  49%  |                                                                                   |======================================                                     |  50%  |                                                                                   |======================================                                     |  51%  |                                                                                   |=======================================                                    |  52%  |                                                                                   |========================================                                   |  53%  |                                                                                   |=========================================                                  |  54%  |                                                                                   |=========================================                                  |  55%  |                                                                                   |==========================================                                 |  56%  |                                                                                   |==========================================                                 |  57%  |                                                                                   |===========================================                                |  57%  |                                                                                   |============================================                               |  58%  |                                                                                   |============================================                               |  59%  |                                                                                   |=============================================                              |  60%  |                                                                                   |=============================================                              |  61%  |                                                                                   |==============================================                             |  61%  |                                                                                   |===============================================                            |  62%  |                                                                                   |===============================================                            |  63%  |                                                                                   |================================================                           |  64%  |                                                                                   |=================================================                          |  65%  |                                                                                   |=================================================                          |  66%  |                                                                                   |==================================================                         |  66%  |                                                                                   |==================================================                         |  67%  |                                                                                   |===================================================                        |  68%  |                                                                                   |====================================================                       |  69%  |                                                                                   |====================================================                       |  70%  |                                                                                   |=====================================================                      |  70%  |                                                                                   |=====================================================                      |  71%  |                                                                                   |======================================================                     |  72%  |                                                                                   |=======================================================                    |  73%  |                                                                                   |=======================================================                    |  74%  |                                                                                   |========================================================                   |  75%  |                                                                                   |=========================================================                  |  75%  |                                                                                   |=========================================================                  |  76%  |                                                                                   |==========================================================                 |  77%  |                                                                                   |==========================================================                 |  78%  |                                                                                   |===========================================================                |  79%  |                                                                                   |============================================================               |  80%  |                                                                                   |=============================================================              |  81%  |                                                                                   |=============================================================              |  82%  |                                                                                   |==============================================================             |  83%  |                                                                                   |===============================================================            |  84%  |                                                                                   |================================================================           |  85%  |                                                                                   |=================================================================          |  86%  |                                                                                   |=================================================================          |  87%  |                                                                                   |==================================================================         |  88%  |                                                                                   |==================================================================         |  89%  |                                                                                   |===================================================================        |  89%  |                                                                                   |====================================================================       |  90%  |                                                                                   |====================================================================       |  91%  |                                                                                   |=====================================================================      |  92%  |                                                                                   |=====================================================================      |  93%  |                                                                                   |======================================================================     |  93%  |                                                                                   |=======================================================================    |  94%  |                                                                                   |=======================================================================    |  95%  |                                                                                   |========================================================================   |  96%  |                                                                                   |=========================================================================  |  97%  |                                                                                   |=========================================================================  |  98%  |                                                                                   |========================================================================== |  98%  |                                                                                   |========================================================================== |  99%  |                                                                                   |===========================================================================| 100%
pander::pander(sessionInfo())

R version 4.5.1 (2025-06-13)

Platform: x86_64-pc-linux-gnu

locale: LC_CTYPE=en_US.UTF-8, LC_NUMERIC=C, LC_TIME=en_US.UTF-8, LC_COLLATE=en_US.UTF-8, LC_MONETARY=en_US.UTF-8, LC_MESSAGES=en_US.UTF-8, LC_PAPER=en_US.UTF-8, LC_NAME=C, LC_ADDRESS=C, LC_TELEPHONE=C, LC_MEASUREMENT=en_US.UTF-8 and LC_IDENTIFICATION=C

attached base packages: stats4, stats, graphics, grDevices, utils, datasets, methods and base

other attached packages: Rsamtools(v.2.26.0), ChIPpeakAnno(v.3.44.0), TxDb.Rnorvegicus.UCSC.rn7.refGene(v.3.15.0), GenomicFeatures(v.1.62.0), AnnotationDbi(v.1.72.0), Biobase(v.2.70.0), BSgenome.Rnorvegicus.UCSC.rn7(v.1.4.3), BSgenome(v.1.78.0), rtracklayer(v.1.70.1), BiocIO(v.1.20.0), Biostrings(v.2.78.0), XVector(v.0.50.0), GenomicRanges(v.1.62.1), Seqinfo(v.1.0.0), IRanges(v.2.44.0), ATACseqQC(v.1.34.0), S4Vectors(v.0.48.1), BiocGenerics(v.0.56.0), generics(v.0.1.4), hpgltools(v.2026.03), testthat(v.3.3.2) and reticulate(v.1.45.0)

loaded via a namespace (and not attached): R.methodsS3(v.1.8.2), dichromat(v.2.0-0.1), GSEABase(v.1.72.0), progress(v.1.2.3), PROPER(v.1.42.0), HDF5Array(v.1.38.0), restez(v.2.1.5), vctrs(v.0.7.2), ggtangle(v.0.1.1), digest(v.0.6.39), png(v.0.1-9), corpcor(v.1.6.10), ggrepel(v.0.9.8), MASS(v.7.3-65), fontLiberation(v.0.1.0), reshape2(v.1.4.5), httpuv(v.1.6.17), foreach(v.1.5.2), qvalue(v.2.42.0), withr(v.3.0.2), xfun(v.0.57), ggfun(v.0.2.0), ellipsis(v.0.3.3), survival(v.3.8-6), memoise(v.2.0.1), clusterProfiler(v.4.18.4), gson(v.0.1.0), systemfonts(v.1.3.2), tidytree(v.0.4.7), gtools(v.3.9.5), R.oo(v.1.27.1), prettyunits(v.1.2.0), KEGGREST(v.1.50.0), promises(v.1.5.0), otel(v.0.2.0), httr(v.1.4.8), restfulr(v.0.0.16), rhdf5filters(v.1.22.0), rhdf5(v.2.55.13), rstudioapi(v.0.18.0), UCSC.utils(v.1.6.1), DOSE(v.4.4.0), curl(v.7.0.0), h5mread(v.1.2.1), randomForest(v.4.7-1.2), polyclip(v.1.10-7), SparseArray(v.1.10.10), RBGL(v.1.86.0), ade4(v.1.7-24), xtable(v.1.8-8), stringr(v.1.6.0), desc(v.1.4.3), evaluate(v.1.0.5), S4Arrays(v.1.10.1), BiocFileCache(v.3.0.0), hms(v.1.1.4), filelock(v.1.0.3), polynom(v.1.4-1), VennDiagram(v.1.8.2), magrittr(v.2.0.5), later(v.1.4.8), ggtree(v.4.0.5), lattice(v.0.22-9), genefilter(v.1.92.0), XML(v.3.99-0.23), cowplot(v.1.2.0), matrixStats(v.1.5.0), pillar(v.1.11.1), nlme(v.3.1-169), iterators(v.1.0.14), pwalign(v.1.6.0), caTools(v.1.18.3), compiler(v.4.5.1), stringi(v.1.8.7), minqa(v.1.2.8), SummarizedExperiment(v.1.40.0), devtools(v.2.5.0), GenomicAlignments(v.1.46.0), plyr(v.1.8.9), crayon(v.1.5.3), abind(v.1.4-8), gridGraphics(v.0.5-1), locfit(v.1.5-9.12), bit(v.4.6.0), dplyr(v.1.2.1), fastmatch(v.1.1-8), codetools(v.0.2-20), bslib(v.0.10.0), plotly(v.4.12.0), multtest(v.2.66.0), remaCor(v.0.0.20), mime(v.0.13), splines(v.4.5.1), Rcpp(v.1.1.1), tidydr(v.0.0.6), dbplyr(v.2.5.2), knitr(v.1.51), blob(v.1.3.0), seqLogo(v.1.76.0), BiocVersion(v.3.22.0), AnnotationFilter(v.1.34.0), lme4(v.2.0-1), fs(v.2.0.1), Rdpack(v.2.6.6), pkgbuild(v.1.4.8), openxlsx(v.4.2.8.1), ggplotify(v.0.1.3), tibble(v.3.3.1), Matrix(v.1.7-5), statmod(v.1.5.1), fANCOVA(v.0.6-1), tweenr(v.2.0.3), pkgconfig(v.2.0.3), tools(v.4.5.1), cachem(v.1.1.0), RhpcBLASctl(v.0.23-42), rbibutils(v.2.4.1), cigarillo(v.1.0.0), RSQLite(v.2.4.6), viridisLite(v.0.4.3), DBI(v.1.3.0), numDeriv(v.2016.8-1.1), fastmap(v.1.2.0), rmarkdown(v.2.31), scales(v.1.4.0), grid(v.4.5.1), usethis(v.3.2.1), AnnotationHub(v.4.0.0), broom(v.1.0.12), sass(v.0.4.10), patchwork(v.1.3.2), BiocManager(v.1.30.27), graph(v.1.88.1), varhandle(v.2.0.6), farver(v.2.1.2), reformulas(v.0.4.4), aod(v.1.3.3), scatterpie(v.0.2.6), mgcv(v.1.9-4), yaml(v.2.3.12), MatrixGenerics(v.1.22.0), cli(v.3.6.5), purrr(v.1.2.1), lifecycle(v.1.0.5), mvtnorm(v.1.3-6), lambda.r(v.1.2.4), sessioninfo(v.1.2.3), backports(v.1.5.1), BiocParallel(v.1.44.0), annotate(v.1.88.0), gtable(v.0.3.6), rjson(v.0.2.23), parallel(v.4.5.1), ape(v.5.8-1), limma(v.3.66.0), jsonlite(v.2.0.0), edgeR(v.4.8.2), TFBSTools(v.1.48.0), bitops(v.1.0-9), ggplot2(v.4.0.2), bit64(v.4.6.0-1), brio(v.1.1.5), yulab.utils(v.0.2.4), zip(v.2.3.3), futile.options(v.1.0.1), jquerylib(v.0.1.4), GOSemSim(v.2.36.0), R.utils(v.2.13.0), pbkrtest(v.0.5.5), lazyeval(v.0.2.3), pander(v.0.6.6), shiny(v.1.13.0), htmltools(v.0.5.9), enrichplot(v.1.30.5), GO.db(v.3.22.0), rappdirs(v.0.3.4), formatR(v.1.14), ensembldb(v.2.34.0), glue(v.1.8.0), TFMPvalue(v.1.0.0), GenomicScores(v.2.22.0), httr2(v.1.2.2), gdtools(v.0.5.0), RCurl(v.1.98-1.18), InteractionSet(v.1.38.0), rprojroot(v.2.1.1), treeio(v.1.34.0), motifStack(v.1.54.0), futile.logger(v.1.4.9), EnvStats(v.3.1.0), boot(v.1.3-32), preseqR(v.4.0.0), universalmotif(v.1.28.0), igraph(v.2.2.3), variancePartition(v.1.40.2), R6(v.2.6.1), sva(v.3.58.0), tidyr(v.1.3.2), DESeq2(v.1.50.2), ggiraph(v.0.9.6), gplots(v.3.3.0), cluster(v.2.1.8.2), pkgload(v.1.5.1), Rhdf5lib(v.1.32.0), regioneR(v.1.42.0), aplot(v.0.2.9), GenomeInfoDb(v.1.46.2), DirichletMultinomial(v.1.52.0), nloptr(v.2.2.1), DelayedArray(v.0.36.1), tidyselect(v.1.2.1), ProtGenerics(v.1.42.0), ggforce(v.0.5.0), xml2(v.1.5.2), fontBitstreamVera(v.0.1.1), KernSmooth(v.2.23-26), S7(v.0.2.1), fontquiver(v.0.2.1), data.table(v.1.18.2.1), htmlwidgets(v.1.6.4), fgsea(v.1.36.2), RColorBrewer(v.1.1-3), biomaRt(v.2.66.2), rlang(v.1.2.0), lmerTest(v.3.2-1) and ggnewscale(v.0.5.2)

message(paste0("This is hpgltools commit: ", get_git_commit()))
## If you wish to reproduce this exact build of hpgltools, invoke the following:
## > git clone http://github.com/abelew/hpgltools.git
## > git reset 35ca3028a5bd7bb6b3b242189a1ec1d2abf7f425
## This is hpgltools commit: Mon Apr 20 11:38:32 2026 -0400: 35ca3028a5bd7bb6b3b242189a1ec1d2abf7f425
this_save <- paste0(gsub(pattern = "\\.Rmd", replace = "", x = rmd_file), "-v", ver, ".rda.xz")
message("Saving to ", this_save)
## Saving to index-v20260421.rda.xz
tmp <- sm(saveme(filename = this_save))
LS0tCnRpdGxlOiAiVHJlYXRpbmcgc2NSTkEgYW5kIEFUQUMgYXMgYnVsay4iCmF1dGhvcjogImF0YiBhYmVsZXdAZ21haWwuY29tIgpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgY29kZV9mb2xkaW5nOiBzaG93CiAgICBkZl9wcmludDogcGFnZWQKICAgIGZpZ19jYXB0aW9uOiB0cnVlCiAgICBmaWdfaGVpZ2h0OiA3CiAgICBmaWdfd2lkdGg6IDcKICAgIGhpZ2hsaWdodDogemVuYnVybgogICAga2VlcF9tZDogZmFsc2UKICAgIG1vZGU6IHNlbGZjb250YWluZWQKICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQogICAgc2VsZl9jb250YWluZWQ6IHRydWUKICAgIHRoZW1lOiByZWFkYWJsZQogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6CiAgICAgIGNvbGxhcHNlZDogZmFsc2UKICAgICAgc21vb3RoX3Njcm9sbDogZmFsc2UKICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjoKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKICAgIGNvZGVfZm9sZGluZzogc2hvdwogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgICBmaWdfY2FwdGlvbjogdHJ1ZQogICAgZmlnX2hlaWdodDogNwogICAgZmlnX3dpZHRoOiA3CiAgICBoaWdobGlnaHQ6IHplbmJ1cm4KICAgIHdpZHRoOiAzMDAKICAgIGtlZXBfbWQ6IGZhbHNlCiAgICBtb2RlOiBzZWxmY29udGFpbmVkCiAgICB0b2NfZmxvYXQ6IHRydWUKICBCaW9jU3R5bGU6Omh0bWxfZG9jdW1lbnQ6CiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgICBjb2RlX2ZvbGRpbmc6IHNob3cKICAgIGZpZ19jYXB0aW9uOiB0cnVlCiAgICBmaWdfaGVpZ2h0OiA3CiAgICBmaWdfd2lkdGg6IDcKICAgIGhpZ2hsaWdodDogemVuYnVybgogICAga2VlcF9tZDogZmFsc2UKICAgIG1vZGU6IHNlbGZjb250YWluZWQKICAgIHRvY19mbG9hdDogdHJ1ZQotLS0KCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CmJvZHksIHRkIHsKICBmb250LXNpemU6IDE2cHg7Cn0KY29kZS5yewogIGZvbnQtc2l6ZTogMTZweDsKfQpwcmUgewogZm9udC1zaXplOiAxNnB4Cn0KPC9zdHlsZT4KCmBgYHtyIG9wdGlvbnMsIGluY2x1ZGU9RkFMU0V9CmxpYnJhcnkoImhwZ2x0b29scyIpCmxpYnJhcnkoInJldGljdWxhdGUiKQp0dCA8LSBkZXZ0b29sczo6bG9hZF9hbGwoIn4vaHBnbHRvb2xzIikKa25pdHI6Om9wdHNfa25pdCRzZXQoCiAgd2lkdGggPSAxMjAsIHByb2dyZXNzID0gVFJVRSwgdmVyYm9zZSA9IFRSVUUsIGVjaG8gPSBUUlVFKQprbml0cjo6b3B0c19jaHVuayRzZXQoZXJyb3IgPSBUUlVFLCBkcGkgPSA5NikKbHVhX2ZpbHRlcnMgPC0gcm1hcmtkb3duOjpwYW5kb2NfbHVhX2ZpbHRlcl9hcmdzKCJwYW5kb2Mtem90eHQubHVhIikKb2xkX29wdGlvbnMgPC0gb3B0aW9ucygKICBkaWdpdHMgPSA0LCBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UsIGtuaXRyLmR1cGxpY2F0ZS5sYWJlbCA9ICJhbGxvdyIpCmdncGxvdDI6OnRoZW1lX3NldChnZ3Bsb3QyOjp0aGVtZV9idyhiYXNlX3NpemUgPSAxMCkpCnJ1bmRhdGUgPC0gZm9ybWF0KFN5cy5EYXRlKCksIGZvcm1hdCA9ICIlWSVtJWQiKQpwcmV2aW91c19maWxlIDwtICIiCnZlciA8LSBmb3JtYXQoU3lzLkRhdGUoKSwgIiVZJW0lZCIpCgojI3RtcCA8LSBzbShsb2FkbWUoZmlsZW5hbWU9cGFzdGUwKGdzdWIocGF0dGVybj0iXFwuUm1kIiwgcmVwbGFjZT0iIiwgeD1wcmV2aW91c19maWxlKSwgIi12IiwgdmVyLCAiLnJkYS54eiIpKSkKcm1kX2ZpbGUgPC0gImluZGV4LlJtZCIKYGBgCgojIFRPRE8KCiogMjAyNjA0MTMKCjEuICBTdWJ0cmFjdCBzYW1wbGVzIDEvMiBhbmQgMy80IHZpYSBycGttCjIuICBDaGVjayBBVEFDIG1ldHJpY3Mgb2YgMSwyIGFuZCAzLDQgc2VwYXJhdGVseQoKIyBJbnRyb2R1Y3Rpb24KCkkgc3BlbnQgc29tZSB0aW1lIHBsYXlpbmcgd2l0aCBjZWxscmFuZ2VyIGFuZCBpdHMgdmFyaW91cyBvcHRpb25zIGZvcgp0cmVhdGluZyBnZXgvYXRhYyBhbmQgdGhlaXIgY29tYmluZWQgZGF0YXR5cGVzLiAgSSB0aGluayBpdCBpcwp1bmxpa2VseSB0aGF0IG1vcmUgdGhhbiB+IDEwMCBjZWxscyBhcmUgbGlrZWx5IHRvIGJlIGRldGVjdGVkIGluIGFueQpjb21iaW5hdGlvbiBvZiBvcHRpb25zLiAgSSB0aGVyZWZvcmUgdGhvdWdodCBpdCB3b3VsZCBiZSBpbnRlcmVzdGluZwp0byBhdHRlbXB0IHRyZWF0aW5nIHRoZSBzYW1wbGVzIGFzIHNlcGFyYXRlIGV4cHJlc3Npb24vYXRhYyBkYXRhc2V0cwphbmQgc2VlIGlmIEkgY2FuIGxlYXJuIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgZXhwZXJpbWVudCBmcm9tIHRoZW0uCgojIEFubm90YXRpb24gZGF0YQoKSXQgbWlnaHQgcHJvdmUgdGhlIGNhc2UgdGhhdCBkb3dubG9hZGluZyBhbm5vdGF0aW9ucyBmcm9tIGJpb21hcnQgZG9lcwpub3Qgd29yaywgSSBoYXZlIGJlZW4gZ2V0dGluZyBhIGxhcmdlIG51bWJlciBvZiB0aW1lb3V0cyBhbmQgZmFpbHVyZXMKcmVjZW50bHkuCgpgYGB7cn0Kcm5fYmlvbWFydCA8LSBsb2FkX2Jpb21hcnRfYW5ub3RhdGlvbnMoc3BlY2llcyA9ICJybm9ydmVnaWN1cyIsIHllYXIgPSAyMDIyLCBtb250aCA9ICJvY3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xfY29sdW1ucyA9ICJleHRlcm5hbF9nZW5lX25hbWUiLCBvdmVyd3JpdGUgPSBUUlVFKQpybl9nZmYgPC0gbG9hZF9nZmZfYW5ub3RhdGlvbnMoIn4vbGlicmFyaWVzL2dlbm9tZS9nZmYvcm5vcnZlZ2ljdXNfNy4yXzEwNy5nZmYiKQoKcm5fYW5ub3QgPC0gcm5fYmlvbWFydFtbImdlbmVfYW5ub3RhdGlvbnMiXV0KCiNybl9leGFtcGxlIDwtIGdldF9iaW9tYXJ0X2V4YW1wbGVfZ2VuZShzcGVjaWVzID0gInJub3J2ZWdpY3VzIiwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QgPSAidXNlYXN0LmVuc2VtYmwub3JnIiwgYXJjaGl2ZSA9IEZBTFNFKQpgYGAKCiMgTWV0YWRhdGEKCk15IGFubm90YXRpb24gY29sbGVjdGlvbiB0b29sIGlzIHVuYXdhcmUgb2YgYXRhYyBkYXRhLiAgSSB0aGluawp0aGVyZWZvcmUgSSB3aWxsIHRyeSBydW5pbmcgaXQgYW5kIGp1c3Qgc2VlIHdoYXQgaGFwcGVucy4KCmBgYHtyfQpzYW1wbGVfc2hlZXQgPC0gInNhbXBsZV9zaGVldHMvYWxsX3NhbXBsZXMueGxzeCIKcm5fbWV0YSA8LSBnYXRoZXJfcHJlcHJvY2Vzc2luZ19tZXRhZGF0YShzYW1wbGVfc2hlZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2llcyA9ICJybm9ydmVnaWN1c183LjJfMTA3IikKYGBgCgpJdCBmYWlscyB1dHRlcmx5LgoKIyBDcmVhdGUgZ2V4IHN1bW1hcml6ZWQgRXhwZXJpbWVudAoKYGBge3J9CnJuX3NlIDwtIGNyZWF0ZV9zZShzYW1wbGVfc2hlZXQsIGdlbmVfaW5mbyA9IHJuX2Fubm90LCBmaWxlX2NvbHVtbiA9ICJnZXhfY291bnRfdGFibGUiKSAlPiUKICBzZXRfY29uZGl0aW9ucyhmYWN0ID0gInRyZWF0bWVudCIpICU+JQogIHNldF9iYXRjaGVzKGZhY3QgPSAicmVwbGljYXRlIikKYGBgCgojIENoZWNrIGl0IG91dAoKYGBge3J9CnJuX2xpYnNpemUgPC0gcGxvdF9saWJzaXplKHJuX3NlKQpwcChmaWxlID0gImltYWdlcy9ybl9saWJzaXplLnBuZyIpCnJuX2xpYnNpemVbWyJwbG90Il1dCmRldi5vZmYoKQpybl9saWJzaXplCnJuX256IDwtIHBsb3Rfbm9uemVybyhybl9zZSwgeV9pbnRlcmNlcHQgPSAwLjc1KQpwcChmaWxlID0gImltYWdlcy9ybl9uei5wbmciKQpybl9ueltbInBsb3QiXV0KZGV2Lm9mZigpCnJuX256CmBgYAoKIyMgTm9ybWFsaXplCgpgYGB7cn0Kcm5fbm9ybSA8LSBub3JtYWxpemUocm5fc2UsIHRyYW5zZm9ybSA9ICJsb2cyIiwgY29udmVydCA9ICJjcG0iLCBmaWx0ZXIgPSBUUlVFKQpybl9kaXNoZWF0IDwtIHBsb3RfZGlzaGVhdChybl9ub3JtKQpwcChmaWxlID0gImltYWdlcy9ybl9kaXNoZWF0LnBuZyIpCnJuX2Rpc2hlYXRbWyJwbG90Il1dCmRldi5vZmYoKQpybl9kaXNoZWF0Cgpybl9jb3JoZWF0IDwtIHBsb3RfY29yaGVhdChybl9ub3JtKQpwcChmaWxlID0gImltYWdlcy9ybl9jb3JoZWF0LnBuZyIpCnJuX2NvcmhlYXRbWyJwbG90Il1dCmRldi5vZmYoKQpybl9jb3JoZWF0Cgpybl9ucGNhIDwtIHBsb3RfcGNhKHJuX25vcm0pCnBwKGZpbGUgPSAiaW1hZ2VzL3JuX25wY2EucG5nIikKcm5fbnBjYVtbInBsb3QiXV0KZGV2Lm9mZigpCnJuX25wY2EKCnJuX25iIDwtIG5vcm1hbGl6ZShybl9zZSwgdHJhbnNmb3JtID0gImxvZzIiLCBjb252ZXJ0ID0gImNwbSIsIGZpbHRlciA9IFRSVUUsIGJhdGNoID0gInBjYSIpCnJuX25icGNhIDwtIHBsb3RfcGNhKHJuX25iKQpwcChmaWxlID0gImltYWdlcy9ybl9uYnBjYS5wbmciKQpybl9uYnBjYVtbInBsb3QiXV0KZGV2Lm9mZigpCnJuX25icGNhCmBgYAoKIyBTdWJ0cmFjdGlvbiBjb21wYXJpc29ucwoKTGV0IHVzIHB1bGwgdGhlIHJwa20gdmFsdWVzIG9mIDEsMiBhbmQgMyw0IGFuZCBleHBsaWNpdGx5IGNvbXBhcmUgdGhlbQphbmQgc2VlIGlmIGdyb3VwcyBvZiBub3Rld29ydGh5IGdlbmVzIGFwcGVhci4KCmBgYHtyfQpybl9ycGttIDwtIG5vcm1hbGl6ZShybl9zZSwgdHJhbnNmb3JtID0gImxvZzIiLCBjb252ZXJ0ID0gInJwa20iLCBmaWx0ZXIgPSBUUlVFLCBub3JtID0gInF1YW50IiwKICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoX2NvbHVtbiA9ICJjZHNfbGVuZ3RoIikKZmlyc3RfdHdvIDwtIGFzc2F5KHJuX3Jwa20pWywgInMwMSJdIC0gYXNzYXkocm5fcnBrbSlbLCAiczAyIl0Kc2Vjb25kX3R3byA8LSBhc3NheShybl9ycGttKVssICJzMDMiXSAtIGFzc2F5KHJuX3Jwa20pWywgInMwNCJdCnBhaXJlZF9tdHJ4IDwtIGRhdGEuZnJhbWUocm93Lm5hbWVzID0gcm93bmFtZXMoYXNzYXkocm5fcnBrbSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICJmaXJzdF90d28iID0gZmlyc3RfdHdvLAogICAgICAgICAgICAgICAgICAgICAgICAgICJzZWNvbmRfdHdvIiA9IHNlY29uZF90d28pCmNvci50ZXN0KHBhaXJlZF9tdHJ4W1sxXV0sIHBhaXJlZF9tdHJ4W1syXV0pCmZpcnN0X2hpZ2hlcl9veHlfaWR4IDwtIHBhaXJlZF9tdHJ4W1sxXV0gPD0gLTIuMApmaXJzdF9oaWdoZXJfb3h5IDwtIHJvd25hbWVzKHBhaXJlZF9tdHJ4KVtmaXJzdF9oaWdoZXJfb3h5X2lkeF0Kc2Vjb25kX2hpZ2hlcl9veHlfaWR4IDwtIHBhaXJlZF9tdHJ4W1syXV0gPD0gLTIuMApzZWNvbmRfaGlnaGVyX294eSA8LSByb3duYW1lcyhwYWlyZWRfbXRyeClbc2Vjb25kX2hpZ2hlcl9veHlfaWR4XQpwYWlyZWRfbXRyeF9hbm5vdGF0ZWQgPC0gbWVyZ2Uocm93RGF0YShybl9zZSksIHBhaXJlZF9tdHJ4LCBieSA9ICJyb3cubmFtZXMiKQpyb3duYW1lcyhwYWlyZWRfbXRyeF9hbm5vdGF0ZWQpIDwtIHBhaXJlZF9tdHJ4X2Fubm90YXRlZFtbIlJvdy5uYW1lcyJdXQpwYWlyZWRfbXRyeF9hbm5vdGF0ZWRbWyJSb3cubmFtZXMiXV0gPC0gTlVMTAp3cml0dGVuIDwtIHdyaXRlX3hsc3gocGFpcmVkX210cnhfYW5ub3RhdGVkLCBleGNlbCA9ICJleGNlbC90d29fcGFpcnNfb2Zfc2FtcGxlc19jb21wYXJpc29ucy54bHN4IikKCmxlbmd0aChmaXJzdF9oaWdoZXJfb3h5KQpsZW5ndGgoc2Vjb25kX2hpZ2hlcl9veHkpCnN1bShmaXJzdF9oaWdoZXJfb3h5ICVpbiUgc2Vjb25kX2hpZ2hlcl9veHkpCgoKZmlyc3RfaGlnaGVyX3NhbGluZV9pZHggPC0gcGFpcmVkX210cnhbWzFdXSA+PSAyLjAKZmlyc3RfaGlnaGVyX3NhbGluZSA8LSByb3duYW1lcyhwYWlyZWRfbXRyeClbZmlyc3RfaGlnaGVyX3NhbGluZV9pZHhdCnNlY29uZF9oaWdoZXJfc2FsaW5lX2lkeCA8LSBwYWlyZWRfbXRyeFtbMl1dID49IDIuMApzZWNvbmRfaGlnaGVyX3NhbGluZSA8LSByb3duYW1lcyhwYWlyZWRfbXRyeClbc2Vjb25kX2hpZ2hlcl9zYWxpbmVfaWR4XQoKbGVuZ3RoKGZpcnN0X2hpZ2hlcl9zYWxpbmUpCmxlbmd0aChzZWNvbmRfaGlnaGVyX3NhbGluZSkKc3VtKGZpcnN0X2hpZ2hlcl9zYWxpbmUgJWluJSBzZWNvbmRfaGlnaGVyX3NhbGluZSkKYGBgCgojIENvbXBhcmUgdGhlIHR3byBjb25kaXRpb25zCgpgYGB7cn0KcGFpcnMgPC0gYWxsX3BhaXJ3aXNlKHJuX3NlLCBtb2RlbF9zdnMgPSAic3Zhc2VxIiwgZm9yY2UgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgbW9kZWxfZnN0cmluZyA9ICJ+IDAgKyBjb25kaXRpb24iLCBmaWx0ZXIgPSBUUlVFKQpwYWlycwp0YWJsZSA8LSBjb21iaW5lX2RlX3RhYmxlcyhwYWlycywgbGFiZWxfY29sdW1uID0gImV4dGVybmFsX2dlbmVfbmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VsID0gImV4Y2VsL3BhaXJzLnhsc3giKQp0YWJsZQpzaWcgPC0gZXh0cmFjdF9zaWduaWZpY2FudF9nZW5lcyh0YWJsZSwgZXhjZWwgPSAiZXhjZWwvc2lnLnhsc3giLCBhY2NvcmRpbmdfdG8gPSAibGltbWEiKQpzaWcKYGBgCgpMaW1tYSB2b2xjYW5vIHBsb3QKCkluIHRoZW9yeSwgdGhlIGNvbHVtbiAnZXh0ZXJuYWxfZ2VuZV9uYW1lJyBzaG91bGQgcHJvdmlkZSByZWFzb25hYmxlCmdlbmVuYW1lcywgYnV0IEkgYW0gaGF2aW5nIHNvbWUgdHJvdWJsZXMgZXh0cmFjdGluZyBpdCBmcm9tIGVuc2VtYmwuCgpgYGB7cn0KcHAoZmlsZSA9ICJpbWFnZXMvZ2V4X3ZvbGNhbm8ucG5nIikKdGFibGVbWyJwbG90cyJdXVtbInNhbGluZV92c19veHljb2RvbmUiXV1bWyJsaW1tYV92b2xfcGxvdHMiXV0KZGV2Lm9mZigpCnRhYmxlW1sicGxvdHMiXV1bWyJzYWxpbmVfdnNfb3h5Y29kb25lIl1dW1sibGltbWFfdm9sX3Bsb3RzIl1dCmBgYAoKYGBge3J9CnVwcyA8LSBzaWdbWyJsaW1tYSJdXVtbInVwcyJdXVtbInNhbGluZV92c19veHljb2RvbmUiXV0KZGltKHVwcykKZG93bnMgPC0gc2lnW1sibGltbWEiXV1bWyJkb3ducyJdXVtbInNhbGluZV92c19veHljb2RvbmUiXV0KZGltKGRvd25zKQpncF91cCA8LSBzaW1wbGVfZ3Byb2ZpbGVyKHVwcywgc3BlY2llcyA9ICJybm9ydmVnaWN1cyIpCgp0dCA8LSBwbG90X2VucmljaHJlc3VsdChncF91cFtbIlJFQUNfZW5yaWNoIl1dKQpwcChmaWxlID0gImltYWdlcy9pbmNyZWFzZWRfc2FsaW5lX3JlYWN0b21lLnBuZyIpCnR0W1siZG90Il1dCmRldi5vZmYoKQoKdHQgPC0gcGxvdF9lbnJpY2hyZXN1bHQoZ3BfdXBbWyJCUF9lbnJpY2giXV0pCnBwKGZpbGUgPSAiaW1hZ2VzL2luY3JlYXNlZF9zYWxpbmVfQlAucG5nIikKdHRbWyJkb3QiXV0KZGV2Lm9mZigpCmBgYAoKIyBFeGFtaW5lIHRoZSBBVEFDIHJlc3VsdHMKCkdpdmVuIG15IGxhY2sgb2YgZXhwZXJpZW5jZSB3aXRoIEFUQUMgZGF0YSwgSSBhbSBjdXJyZW50bHkgdXNpbmcKCmh0dHBzOi8vbmJpcy13b3Jrc2hvcC1lcGlnZW5vbWljcy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvY29udGVudC90dXRvcmlhbHMvZGF0YS1wcmVwcm9jL2RhdGEtcWMtYXRhYy5odG1sCgphcyBhIGd1aWRlLgoKYGBge3J9CmxpYnJhcnkoQVRBQ3NlcVFDKQpsaWJyYXJ5KEJTZ2Vub21lLlJub3J2ZWdpY3VzLlVDU0Mucm43KQpsaWJyYXJ5KFR4RGIuUm5vcnZlZ2ljdXMuVUNTQy5ybjcucmVmR2VuZSkKbGlicmFyeShDaElQcGVha0Fubm8pCmxpYnJhcnkoUnNhbXRvb2xzKQoKYmFtX291dHB1dHMgPC0gYygKICAicHJlcHJvY2Vzc2luZy8xX3NhbGluZV9hdGFjL291dHB1dHMvNDBoaXNhdF9ybm9ydmVnaWN1c19ub3J3YXlfZ3Jjcjgvcm5vcnZlZ2ljdXNfbm9yd2F5X2dyY3I4X2dlbm9tZS1wYWlyZWQuYmFtIiwKICAicHJlcHJvY2Vzc2luZy8yX294eWNvZG9uZV9hdGFjL291dHB1dHMvNDBoaXNhdF9ybm9ydmVnaWN1c19ub3J3YXlfZ3Jjcjgvcm5vcnZlZ2ljdXNfbm9yd2F5X2dyY3I4X2dlbm9tZS1wYWlyZWQuYmFtIiwKICAicHJlcHJvY2Vzc2luZy8zX3NhbGluZV9hdGFjL291dHB1dHMvNDBoaXNhdF9ybm9ydmVnaWN1c19ub3J3YXlfZ3Jjcjgvcm5vcnZlZ2ljdXNfbm9yd2F5X2dyY3I4X2dlbm9tZS1wYWlyZWQuYmFtIiwKICAicHJlcHJvY2Vzc2luZy80X294eWNvZG9uZV9hdGFjL291dHB1dHMvNDBoaXNhdF9ybm9ydmVnaWN1c19ub3J3YXlfZ3Jjcjgvcm5vcnZlZ2ljdXNfbm9yd2F5X2dyY3I4X2dlbm9tZS1wYWlyZWQuYmFtIikKCmJhbV9xYyA8LSBiYW1RQyhiYW1fb3V0cHV0c1sxXSwgb3V0UGF0aCA9IE5VTEwpCgpwb3NzaWJsZVRhZyA8LSBjb21ibihMRVRURVJTLCAyKQpwb3NzaWJsZVRhZyA8LSBjKHBhc3RlMChwb3NzaWJsZVRhZ1sxLCBdLCBwb3NzaWJsZVRhZ1syLCBdKSwKICAgICAgICAgICAgICAgICBwYXN0ZTAocG9zc2libGVUYWdbMiwgXSwgcG9zc2libGVUYWdbMSwgXSkpCiMjIFRoaXMgc2VlbXMgYSBiaXQgc3R1cGlkPyAgSSBhbHJlYWR5IGtub3cgd2hhdCB0aGUgcHJpbWFyeSBzYW0gdGFncyBhcmUsIHNob3VsZCBJIG5vdCBqdXN0CiMjIGhhdmUgYSBsaXN0IHdpdGggdGhlaXIgbmFtZXMgYW5kIG1lYW5pbmdzPwpiYW1Ub3AxMDAgPC0gc2NhbkJhbShCYW1GaWxlKGJhbV9vdXRwdXRzWzFdLCB5aWVsZFNpemUgPSAxMDApLAogICAgICAgICAgICAgICAgICAgIHBhcmFtID0gU2NhbkJhbVBhcmFtKHRhZyA9IHBvc3NpYmxlVGFnKSlbWzFdXSR0YWcKdGFncyA8LSBuYW1lcyhiYW1Ub3AxMDApW2xlbmd0aHMoYmFtVG9wMTAwKT4wXQp0YWdzCmBgYAoKYGBge3J9CmdhbCA9IHJlYWRCYW1GaWxlKGJhbV9vdXRwdXRzWzFdLCB0YWcgPSB0YWdzLCBhc01hdGVzID0gVFJVRSwgYmlnRmlsZSA9IFRSVUUpCm91dF9kaXIgPC0gInByZXByb2Nlc3NpbmcvMV9zYWxpbmVfYXRhYy9vdXRwdXRzLzk5YXRhY19xYyIKZGlyLmNyZWF0ZShvdXRfZGlyLCByZWN1cnNpdmUgPSBUUlVFKQpzaGlmdGVkX2JhbSA8LSBmaWxlLnBhdGgob3V0X2RpciwgInNoaWZ0ZWQuYmFtIikKZ2FsMSA9IHNoaWZ0R0FsaWdubWVudHNMaXN0KGdhbCwgb3V0YmFtID0gc2hpZnRlZF9iYW0pCmBgYAoKCmBgYHtyIHNhdmVtZX0KcGFuZGVyOjpwYW5kZXIoc2Vzc2lvbkluZm8oKSkKbWVzc2FnZShwYXN0ZTAoIlRoaXMgaXMgaHBnbHRvb2xzIGNvbW1pdDogIiwgZ2V0X2dpdF9jb21taXQoKSkpCnRoaXNfc2F2ZSA8LSBwYXN0ZTAoZ3N1YihwYXR0ZXJuID0gIlxcLlJtZCIsIHJlcGxhY2UgPSAiIiwgeCA9IHJtZF9maWxlKSwgIi12IiwgdmVyLCAiLnJkYS54eiIpCm1lc3NhZ2UoIlNhdmluZyB0byAiLCB0aGlzX3NhdmUpCnRtcCA8LSBzbShzYXZlbWUoZmlsZW5hbWUgPSB0aGlzX3NhdmUpKQpgYGAK