Repository 'music_deconvolution'
hg clone https://toolshed.g2.bx.psu.edu/repos/bgruening/music_deconvolution

Changeset 0:224721e76869 (2021-09-12)
Next changeset 1:3ca0132c182a (2021-11-26)
Commit message:
"planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/music/ commit 08c6fd3885bdfbf8b5c3f4dcc2d04729b577e3e1"
added:
macros.xml
music-deconvolution.xml
scripts/dendrogram.R
scripts/estimateprops.R
scripts/inspect.R
test-data/EMTABesethealthy.subset.rds
test-data/GSE50244bulkeset.subset.rds
test-data/Mousebulkeset.rds
test-data/Mousesubeset.degenesonly2.half.rds
test-data/array.tsv
test-data/default_output.pdf
test-data/dendro.pdf
test-data/epith.markers
test-data/immune.markers
test-data/pheno.tsv
b
diff -r 000000000000 -r 224721e76869 macros.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/macros.xml Sun Sep 12 19:48:48 2021 +0000
[
@@ -0,0 +1,30 @@
+<macros>
+    <token name="@VERSION_SUFFIX@">0</token>
+    <!-- The ESet inspector/constructor and MuSiC tool can have
+         independent Galaxy versions but should reference the same
+         package version always. -->
+    <token name="@TOOL_VERSION@">0.1.1</token>
+    <xml name="requirements">
+        <requirements>
+            <requirement type="package" version="@TOOL_VERSION@" >music-deconvolution</requirement>
+            <requirement type="package" version="0.9.3" >r-cowplot</requirement>
+            <requirement type="package" version="1.4.4" >r-reshape2</requirement>
+        </requirements>
+    </xml>
+    <xml name="validator_index_identifiers" >
+        <validator type="regex" message="FORMAT terms separated by commas">^(([A-Za-z0-9+_ -]+)\s?,?)*$</validator>
+    </xml>
+    <xml name="validator_text" >
+        <validator type="regex" message="No commas allowed">^(([A-Za-z0-9+_ -]+)\s?)*$</validator>
+    </xml>
+    <xml name="celltypes_macro" >
+        <param name="celltypes" type="text" optional="true" value=""
+               label="Comma list of cell types to use from scRNA dataset" help="If NULL, then use all cell types." >
+            <expand macro="validator_index_identifiers" />
+        </param>
+    </xml>
+    <xml name="validator_text_and_urls" >
+        <validator type="regex" message="No commas or apostrophes allowed">^(([A-Za-z0-9+_ -@.:/]+)\s?)*$</validator>
+    </xml>
+</macros>
+
b
diff -r 000000000000 -r 224721e76869 music-deconvolution.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/music-deconvolution.xml Sun Sep 12 19:48:48 2021 +0000
[
b'@@ -0,0 +1,246 @@\n+<tool id="music_deconvolution" name="MuSiC" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@"\n+      profile="20.05" license="GPL-3.0-or-later" >\n+    <description>estimate cell type proportions in bulk RNA-seq data</description>\n+    <macros>\n+        <import>macros.xml</import>\n+    </macros>\n+    <expand macro="requirements" />\n+    <command detect_errors="exit_code"><![CDATA[\n+mkdir report_data &&\n+Rscript --vanilla \'$__tool_directory__/scripts/${do.method}.R\' \'$conf\'\n+]]></command>\n+    <configfiles>\n+        <configfile name="conf" >\n+\n+null_str_vec = function(gstr){\n+   tokens = unlist(as.vector(strsplit(gstr, split=",")))\n+   if (length(tokens) == 0){\n+      return(NULL)\n+   }\n+   if (length(tokens) == 1){\n+      return(tokens[[1]])\n+   }\n+   return(tokens)\n+}\n+\n+bulk_eset = readRDS(\'$bulk_eset\')\n+scrna_eset = readRDS(\'$scrna_eset\')\n+\n+#if str($do.method) == "estimateprops":\n+\n+phenotype_factors = null_str_vec(\'$do.phenotype_factors\')\n+celltypes_label = null_str_vec(\'$do.celltypes_label\')\n+samples_label = null_str_vec(\'$do.samples_label\')\n+celltypes = null_str_vec(\'$do.celltypes\')\n+methods = null_str_vec(\'$do.methods\')\n+phenotype_gene = null_str_vec(\'$do.phenotype_gene\')\n+sample_groups = null_str_vec(\'$do.sample_groups\')\n+sample_disease_group = null_str_vec(\'$do.sample_disease_group\')\n+sample_disease_group_scale = as.integer(\'$do.sample_disease_group_scale\')\n+healthy_phenotype = null_str_vec(\'$do.healthy_phenotype\')\n+compare_title = null_str_vec(\'$do.compare_title\')\n+outfile_pdf=\'$out_pdf\'\n+\n+#elif str($do.method) == "dendrogram":\n+\n+celltypes_label = null_str_vec(\'$do.celltypes_label\')\n+clustertype_label = null_str_vec(\'$do.clustertype_label\')\n+samples_label = null_str_vec(\'$do.samples_label\')\n+celltypes = null_str_vec(\'$do.celltypes\')\n+\n+data.to.use = list(\n+    #for $i, $repeat in enumerate( $do.cluster_groups )\n+        #if $i == 0:\n+        $repeat.cluster_id = list(cell.types = null_str_vec(\'$repeat.celltypes\'),\n+            marker.names = null_str_vec(\'$repeat.marker_name\'),\n+                     marker.list = read_list(\'$repeat.marker_list\'))\n+        #else\n+        , $repeat.cluster_id = list(cell.types = null_str_vec(\'$repeat.celltypes\'),\n+                     marker.names = null_str_vec(\'$repeat.marker_name\'),\n+                     marker.list = read_list(\'$repeat.marker_list\'))\n+        #end if\n+    #end for\n+)\n+\n+outfile_pdf=\'$out_pdf\'\n+outfile_tab=\'$out_tab\'\n+\n+#else\n+    stop("No such option")\n+#end if\n+\n+        </configfile>\n+    </configfiles>\n+    <inputs>\n+        <param name="scrna_eset" label="scRNA Dataset" type="data" format="rdata.eset" />\n+        <param name="bulk_eset" label="Bulk RNA Dataset" type="data" format="rdata.eset" />\n+        <conditional name="do" >\n+            <param name="method" type="select" label="Purpose" >\n+                <!-- The values here correspond to script names in the scripts folder\n+                     and must remain so -->\n+                <option value="estimateprops">Estimate Proportions</option>\n+                <option value="dendrogram">Compute Dendrogram</option>\n+            </param>\n+            <when value="estimateprops" >\n+                <param name="celltypes_label" type="text" value="cellType"\n+                       label="Cell Types Label from scRNA dataset" >\n+                    <expand macro="validator_text" />\n+                </param>\n+                <param name="samples_label" type="text" value="sampleID"\n+                       label="Samples Identifier from scRNA dataset" >\n+                    <expand macro="validator_text" />\n+                </param>\n+                <expand macro="celltypes_macro" />\n+                <param name="methods" multiple="true" type="select" display="checkboxes" label="Cell Proportion Method" >\n+                    <option value="MuSiC" selected="true" />\n+                    <option value="NNLS" selected="true" />\n+                </param>\n+                <param name="phenotype_factor'..b'alue="C3" />\n+                    <param name="celltypes" value="Endo,CD-PC,LOH,CD-IC,DCT,PT" />\n+                    <param name="marker_name" value="Epithelial" />\n+                    <param name="marker_list" value="epith.markers" />\n+                </repeat>\n+                <repeat name="cluster_groups" >\n+                    <param name="cluster_id" value="C4" />\n+                    <param name="celltypes" value="Macro,Fib,B lymph,NK,T lymph" />\n+                    <param name="marker_name" value="Immune" />\n+                    <param name="marker_list" value="immune.markers" />\n+                </repeat>\n+            </conditional>\n+            <output name="out_pdf" value="dendro.pdf" compare="sim_size" />\n+            <output name="out_tab">\n+                <assert_contents>\n+                    <has_text_matching expression="^\\s+Est\\.prop\\.weighted\\.cluster\\.Neutro\\s+Est\\.prop\\.weighted\\.cluster\\.Podo\\s+Est\\.prop\\.weighted\\.cluster\\.Endo" />\n+                    <has_text text="APOL1.GNA78M"/>\n+                </assert_contents>\n+            </output>\n+        </test>\n+        <test expect_num_outputs="2" >\n+            <!-- Estimate Proportions test -->\n+            <param name="bulk_eset" value="GSE50244bulkeset.subset.rds" />\n+            <param name="scrna_eset" value="EMTABesethealthy.subset.rds" />\n+            <conditional name="do" >\n+                <param name="method" value="estimateprops" />\n+                <param name="celltypes_label" value="cellType" />\n+                <param name="samples_label" value="sampleID" />\n+                <param name="celltypes" value="alpha,beta,delta,gamma,acinar,ductal" />\n+                <param name="methods" value="MuSiC,NNLS" />\n+                <param name="phenotype_factors" value="age,bmi,hba1c,gender" />\n+                <param name="phenotype_gene" value="hba1c" />\n+                <param name="sample_groups" value="Normal,T2D" />\n+                <param name="sample_disease_group" value="T2D" />\n+                <param name="sample_disease_group_scale" value="5" />\n+                <param name="healthy_phenotype" value="Normal" />\n+                <param name="compare_title" value="HbA1c vs Beta Cell Type Proportion" />\n+            </conditional>\n+            <output name="out_pdf" value="default_output.pdf" compare="sim_size" />\n+            <output_collection name="summaries" count="2">\n+                <element name="MuSiC" ftype="txt">\n+                    <assert_contents>\n+                        <has_text text="Residual standard error: 0.1662 on 72 degrees of freedom"/>\n+                    </assert_contents>\n+                </element>\n+                <element name="NNLS" ftype="txt">\n+                    <assert_contents>\n+                        <has_text text="Residual standard error: 0.06561 on 72 degrees of freedom"/>\n+                    </assert_contents>\n+                </element>\n+            </output_collection>\n+        </test>\n+    </tests>\n+    <help><![CDATA[\n+MuSiC utilizes cell-type specific gene expression from single-cell RNA sequencing (RNA-seq) data to characterize cell type compositions from bulk RNA-seq data in complex tissues. By appropriate weighting of genes showing cross-subject and cross-cell consistency, MuSiC enables the transfer of cell type-specific gene expression information from one dataset to another.\n+\n+Solid tissues often contain closely related cell types which leads to collinearity. To deal with collinearity, MuSiC employs a tree-guided procedure that recursively zooms in on closely related cell types. Briefly, we first group similar cell types into the same cluster and estimate cluster proportions, then recursively repeat this procedure within each cluster.\n+\n+.. image:: https://xuranw.github.io/MuSiC/articles/images/FigureMethod.jpg\n+    ]]></help>\n+    <citations>\n+        <citation type="doi">https://doi.org/10.1038/s41467-018-08023-x</citation>\n+    </citations>\n+</tool>\n\\ No newline at end of file\n'
b
diff -r 000000000000 -r 224721e76869 scripts/dendrogram.R
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/dendrogram.R Sun Sep 12 19:48:48 2021 +0000
[
@@ -0,0 +1,83 @@
+##
+suppressWarnings(suppressPackageStartupMessages(library(xbioc)))
+suppressWarnings(suppressPackageStartupMessages(library(MuSiC)))
+suppressWarnings(suppressPackageStartupMessages(library(reshape2)))
+suppressWarnings(suppressPackageStartupMessages(library(cowplot)))
+## We use this script to generate a clustering dendrogram of cell
+## types, using the prior labelling from scRNA.
+
+read_list <- function(lfile) {
+    if (lfile == "None") {
+        return(NULL)
+    }
+    return(read.table(file = lfile, header = FALSE,
+                      stringsAsFactors = FALSE)$V1)
+}
+
+args <- commandArgs(trailingOnly = TRUE)
+source(args[1])
+
+## We then perform bulk tissue cell type estimation with pre-grouping
+## of cell types: C, list_of_cell_types, marker genes name, marker
+## genes list.
+## data.to.use = list(
+##     "C1" = list(cell.types = c("Neutro"),
+##                 marker.names=NULL,
+##                 marker.list=NULL),
+##     "C2" = list(cell.types = c("Podo"),
+##                 marker.names=NULL,
+##                 marker.list=NULL),
+##     "C3" = list(cell.types = c("Endo","CD-PC","LOH","CD-IC","DCT","PT"),
+##                 marker.names = "Epithelial",
+##                 marker.list = read_list("../test-data/epith.markers")),
+##     "C4" = list(cell.types = c("Macro","Fib","B lymph","NK","T lymph"),
+##                 marker.names = "Immune",
+##                 marker.list = read_list("../test-data/immune.markers"))
+## )
+grouped_celltypes <- lapply(data.to.use, function(x) {
+    x$cell.types
+})
+marker_groups <- lapply(data.to.use, function(x) {
+    x$marker.list
+})
+names(marker_groups) <- names(data.to.use)
+
+
+## Perform the estimation
+## Produce the first step information
+sub.basis <- music_basis(scrna_eset, clusters = celltypes_label,
+                         samples = samples_label,
+                         select.ct = celltypes)
+
+## Plot the dendrogram of design matrix and cross-subject mean of
+## realtive abundance
+par(mfrow = c(1, 2))
+d <- dist(t(log(sub.basis$Disgn.mtx + 1e-6)), method = "euclidean")
+## Hierarchical clustering using Complete Linkage
+hc1 <- hclust(d, method = "complete")
+## Plot the obtained dendrogram
+plot(hc1, cex = 0.6, hang = -1, main = "Cluster log(Design Matrix)")
+d <- dist(t(log(sub.basis$M.theta + 1e-8)), method = "euclidean")
+## Hierarchical clustering using Complete Linkage
+hc2 <- hclust(d, method = "complete")
+## Plot the obtained dendrogram
+pdf(file = outfile_pdf, width = 8, height = 8)
+plot(hc2, cex = 0.6, hang = -1, main = "Cluster log(Mean of RA)")
+
+cl_type <- as.character(scrna_eset[[celltypes_label]])
+
+for (cl in seq_len(length(grouped_celltypes))) {
+  cl_type[cl_type %in% grouped_celltypes[[cl]]] <- names(grouped_celltypes)[cl]
+}
+pData(scrna_eset)[[clustertype_label]] <- factor(
+    cl_type, levels = c(names(grouped_celltypes),
+                        "CD-Trans", "Novel1", "Novel2"))
+
+est_bulk <- music_prop.cluster(
+    bulk.eset = bulk_eset, sc.eset = scrna_eset,
+    group.markers = marker_groups, clusters = celltypes_label,
+    groups = clustertype_label, samples = samples_label,
+    clusters.type = grouped_celltypes)
+
+write.table(est_bulk, file = outfile_tab, quote = F, col.names = NA, sep = "\t")
+dev.off()
b
diff -r 000000000000 -r 224721e76869 scripts/estimateprops.R
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/estimateprops.R Sun Sep 12 19:48:48 2021 +0000
[
@@ -0,0 +1,93 @@
+suppressWarnings(suppressPackageStartupMessages(library(xbioc)))
+suppressWarnings(suppressPackageStartupMessages(library(MuSiC)))
+suppressWarnings(suppressPackageStartupMessages(library(reshape2)))
+suppressWarnings(suppressPackageStartupMessages(library(cowplot)))
+## We use this script to estimate the effectiveness of proportion methods
+
+## Load Conf
+args <- commandArgs(trailingOnly = TRUE)
+source(args[1])
+
+## Estimate cell type proportions
+est_prop <- music_prop(
+    bulk.eset = bulk_eset, sc.eset = scrna_eset,
+    clusters = celltypes_label,
+    samples = samples_label, select.ct = celltypes, verbose = T)
+
+
+## Show different in estimation methods
+## Jitter plot of estimated cell type proportions
+jitter.fig <- Jitter_Est(
+    list(data.matrix(est_prop$Est.prop.weighted),
+         data.matrix(est_prop$Est.prop.allgene)),
+    method.name = methods, title = "Jitter plot of Est Proportions")
+
+
+## Make a Plot
+## A more sophisticated jitter plot is provided as below. We separated
+## the T2D subjects and normal subjects by their HbA1c levels.
+m_prop <- rbind(melt(est_prop$Est.prop.weighted),
+               melt(est_prop$Est.prop.allgene))
+
+colnames(m_prop) <- c("Sub", "CellType", "Prop")
+
+m_prop$CellType <- factor(m_prop$CellType, levels = celltypes) # nolint
+m_prop$Method <- factor(rep(methods, each = 89 * 6), levels = methods) # nolint
+m_prop$HbA1c <- rep(bulk_eset$hba1c, 2 * 6) # nolint
+m_prop <- m_prop[!is.na(m_prop$HbA1c), ]
+m_prop$Disease <- factor(sample_groups[(m_prop$HbA1c > 6.5) + 1], # nolint
+                         levels = sample_groups)
+
+m_prop$D <- (m_prop$Disease ==   # nolint
+             sample_disease_group) / sample_disease_group_scale
+m_prop <- rbind(subset(m_prop, Disease == healthy_phenotype),
+               subset(m_prop, Disease != healthy_phenotype))
+
+jitter.new <- ggplot(m_prop, aes(Method, Prop)) +
+    geom_point(aes(fill = Method, color = Disease, stroke = D, shape = Disease),
+               size = 2, alpha = 0.7,
+               position = position_jitter(width = 0.25, height = 0)) +
+    facet_wrap(~ CellType, scales = "free") +
+    scale_colour_manual(values = c("white", "gray20")) +
+    scale_shape_manual(values = c(21, 24)) + theme_minimal()
+
+## Plot to compare method effectiveness
+## Create dataframe for beta cell proportions and HbA1c levels
+m_prop_ana <- data.frame(pData(bulk_eset)[rep(1:89, 2), phenotype_factors],
+                        ct.prop = c(est_prop$Est.prop.weighted[, 2],
+                                    est_prop$Est.prop.allgene[, 2]),
+                        Method = factor(rep(methods, each = 89),
+                                        levels = methods))
+colnames(m_prop_ana)[1:4] <- phenotype_factors
+m_prop_ana <- subset(m_prop_ana, !is.na(m_prop_ana[phenotype_gene]))
+m_prop_ana$Disease <- factor(sample_groups[(  # nolint
+    m_prop_ana[phenotype_gene] > 6.5) + 1], sample_groups)
+m_prop_ana$D <- (m_prop_ana$Disease ==        # nolint
+                 sample_disease_group) / sample_disease_group_scale
+
+jitt_compare <- ggplot(m_prop_ana, aes_string(phenotype_gene, "ct.prop")) +
+    geom_smooth(method = "lm",  se = FALSE, col = "black", lwd = 0.25) +
+    geom_point(aes(fill = Method, color = Disease, stroke = D, shape = Disease),
+               size = 2, alpha = 0.7) +  facet_wrap(~ Method) +
+    ggtitle(compare_title) + theme_minimal() +
+    scale_colour_manual(values = c("white", "gray20")) +
+    scale_shape_manual(values = c(21, 24))
+
+
+pdf(file = outfile_pdf, width = 8, height = 8)
+plot_grid(jitter.fig, jitter.new, labels = "auto", ncol = 1, nrow = 2)
+jitt_compare
+dev.off()
+
+## Summary table
+for (meth in methods) {
+    ##lm_beta_meth = lm(ct.prop ~ age + bmi + hba1c + gender, data =
+    ##subset(m_prop_ana, Method == meth))
+    lm_beta_meth <- lm(as.formula(
+        paste("ct.prop", paste(phenotype_factors, collapse = " + "),
+              sep = " ~ ")),
+        data = subset(m_prop_ana, Method == meth))
+    print(paste0("Summary: ", meth))
+    capture.output(summary(lm_beta_meth),
+                   file = paste0("report_data/summ_", meth, ".txt"))
+}
b
diff -r 000000000000 -r 224721e76869 scripts/inspect.R
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/inspect.R Sun Sep 12 19:48:48 2021 +0000
[
@@ -0,0 +1,25 @@
+
+suppressWarnings(suppressPackageStartupMessages(library(xbioc)))
+suppressWarnings(suppressPackageStartupMessages(library(MuSiC)))
+
+args <- commandArgs(trailingOnly = TRUE)
+source(args[1])
+
+printout <- function(text) {
+    if (typeof(text) %in% c("list", "vector")) {
+        write.table(text, file = outfile_tab, quote = F, sep = "\t",
+                    col.names = NA)
+    } else {
+        ## text
+        capture.output(text, file = outfile_tab)  # nolint
+    }
+}
+
+if (inspector %in% c("print", "pData", "fData", "dims", "experimentData",
+                     "exprs", "signature", "annotation", "abstract")) {
+    op <- get(inspector)
+    tab <- op(rds_eset)
+    printout(tab)
+} else {
+    stop(paste0("No such option:", inspector))
+}
b
diff -r 000000000000 -r 224721e76869 test-data/EMTABesethealthy.subset.rds
b
Binary file test-data/EMTABesethealthy.subset.rds has changed
b
diff -r 000000000000 -r 224721e76869 test-data/GSE50244bulkeset.subset.rds
b
Binary file test-data/GSE50244bulkeset.subset.rds has changed
b
diff -r 000000000000 -r 224721e76869 test-data/Mousebulkeset.rds
b
Binary file test-data/Mousebulkeset.rds has changed
b
diff -r 000000000000 -r 224721e76869 test-data/Mousesubeset.degenesonly2.half.rds
b
Binary file test-data/Mousesubeset.degenesonly2.half.rds has changed
b
diff -r 000000000000 -r 224721e76869 test-data/array.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/array.tsv Sun Sep 12 19:48:48 2021 +0000
b
@@ -0,0 +1,4 @@
+ Sample1 Sample2
+Gene1 1 3
+Gene2 2 4
+Gene3 3 5
b
diff -r 000000000000 -r 224721e76869 test-data/default_output.pdf
b
Binary file test-data/default_output.pdf has changed
b
diff -r 000000000000 -r 224721e76869 test-data/dendro.pdf
b
Binary file test-data/dendro.pdf has changed
b
diff -r 000000000000 -r 224721e76869 test-data/epith.markers
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/epith.markers Sun Sep 12 19:48:48 2021 +0000
b
b'@@ -0,0 +1,2614 @@\n+Rp1\n+Sox17\n+1700034P13Rik\n+Prex2\n+Sulf1\n+Xkr9\n+Eya1\n+Sbspon\n+D030040B21Rik\n+Crispld1\n+Il17f\n+Mcm3\n+Kcnq5\n+Col19a1\n+Khdrbs2\n+Bend6\n+Gm37233\n+Sema4c\n+Fam178b\n+Chst10\n+Il1r2\n+Il1rl1\n+Gm37623\n+Fhl2\n+Gm29040\n+Col3a1\n+Stat4\n+Gm28551\n+Hecw2\n+Ankrd44\n+4930558J18Rik\n+Aox2\n+Als2cr12\n+Cdk15\n+Fzd7\n+Icos\n+Pard3bos3\n+Nrp2\n+Gm4208\n+Klf7\n+Cryga\n+Fn1\n+Tmem169\n+Igfbp2\n+Igfbp5\n+6030407O03Rik\n+Catip\n+Slc11a1\n+Prkag3\n+Wnt6\n+Wnt10a\n+Des\n+Tmem198\n+BC035947\n+Mogat1\n+5730419F03Rik\n+Serpine2\n+Fam124b\n+Dock10\n+Pid1\n+C130026I21Rik\n+A530032D15Rik\n+A530040E14Rik\n+Sp110\n+Sp100\n+A630001G21Rik\n+2810459M11Rik\n+Kcnj13\n+Inpp5d\n+Ugt1a8\n+Ugt1a6a\n+Ugt1a1\n+Gm29336\n+4930434B07Rik\n+Ackr3\n+Gm28723\n+Gm26683\n+Agxt\n+Pdcd1\n+St8sia4\n+Slco4c1\n+Panct2\n+Pam\n+Gm29012\n+Tnfrsf11a\n+Serpinb2\n+Cntnap5a\n+Sctr\n+Lypd1\n+Tmem163\n+Thsd7b\n+C4bp\n+Gm15848\n+Ctse\n+Tmcc2\n+Gm19461\n+Chil1\n+Syt2\n+Ptpn7\n+Lmod1\n+Gm38399\n+Phlda3\n+Igfn1\n+Cacna1s\n+Kif14\n+Atp6v1g3\n+Crb1\n+Cfh\n+B3galt2\n+Rgs2\n+Rgs18\n+Ptgs2\n+1700025G04Rik\n+Ncf2\n+Nmnat2\n+Rgs16\n+Cacna1e\n+Ier5\n+Tdrd5\n+Nphs2\n+Angptl1\n+4930439D14Rik\n+Astn1\n+Pappa2\n+Gm37083\n+Fasl\n+Dnm3os\n+Gm16548\n+Xcl1\n+Rcsd1\n+Cd247\n+Fam78b\n+Lrrc52\n+Rxrg\n+Rgs5\n+Sh2d1b1\n+Olfml2b\n+Fcrla\n+Gm38204\n+Gm10522\n+Fcgr4\n+Pcp4l1\n+Cd244\n+Slamf7\n+Cd48\n+Cd84\n+Slamf6\n+Atp1a4\n+Atp1a2\n+Slamf8\n+Apcs\n+Aim2\n+Gm4955\n+BC094916\n+Pydc3\n+AI607873\n+Ifi204\n+Mndal\n+Mnda\n+Ifi203\n+Ifi202b\n+Ifi205\n+Grem2\n+Akt3\n+2310043L19Rik\n+Kif26b\n+Lefty1\n+1700047M11Rik\n+Hlx\n+Mark1\n+Kcnk2\n+Gm28172\n+Prox1os\n+Vash2\n+Gm38037\n+Rd3\n+Kcnh1\n+Sertad4\n+Traf3ip3\n+4930570N18Rik\n+Lamb3\n+Cd34\n+Cr2\n+Meig1\n+Ccdc3\n+Camk1d\n+Proser2\n+Proser21\n+Itih2\n+Itga8\n+Vim\n+Tmem236\n+Mrc1\n+Malrd1\n+Nebl\n+4930426L09Rik\n+Armc3\n+Tbpl2\n+Il1f9\n+Il1f5\n+Il1rn\n+Entpd8\n+4933433C11Rik\n+Sapcd2\n+Fcnaos\n+Obp2a\n+Kcnt1\n+1810012K08Rik\n+Gm13563\n+Notch1\n+Egfl7\n+Snhg7os\n+Lcn4\n+Stkld1\n+Slc2a6\n+Sardhos\n+Col5a1\n+Olfm1\n+Ak8\n+Pkn3\n+Gm28035\n+Gm14486\n+Ptges\n+Lcn2\n+Gm13412\n+St6galnac4\n+Eng\n+Phf19\n+Stom\n+Ggta1\n+Gm13431\n+Crb2\n+Lhx2\n+Lrp1b\n+Kynu\n+Gm13470\n+Gm13499\n+1700057H21Rik\n+Neb\n+Rprm\n+Kcnj3\n+Pla2r1\n+Kcnh7\n+Scn7a\n+B3galt1\n+Nostrin\n+Gad1\n+Rapgef4\n+Gm28793\n+Gm28230\n+2600014E21Rik\n+Ttc30a2\n+Pde11a\n+Itga4\n+Prdx6b\n+Fam171b\n+Calcrl\n+Tfpi\n+Serping1\n+Slc43a1\n+Slc43a3\n+Aplnr\n+Creb3l1\n+2900072N19Rik\n+Gm13814\n+Chst1\n+Gm10804\n+Gm13889\n+E530001K10Rik\n+Elf5\n+Lmo2\n+D430041D05Rik\n+Pin1rt1\n+Wt1\n+Bdnf\n+Gm13936\n+3110099E03Rik\n+Meis2\n+2700033N17Rik\n+Tmco5\n+Rasgrp1\n+Rad51\n+Dll4\n+Chac1\n+Ehd4\n+Stard9\n+Epb42\n+Map1a\n+B2m\n+Duox1\n+Slc28a2\n+AA467197\n+Sema6d\n+Slc12a1\n+Fbn1\n+Shc4\n+Atp8b4\n+Ncaph\n+Kcnip3\n+Acoxl\n+Gm14029\n+Tgm3\n+Slc4a11\n+Gfra4\n+Adam33\n+Siglec1\n+Hspa12b\n+Gm14102\n+Bmp2\n+Bfsp1\n+Ralgapa2\n+Thbd\n+Cd93\n+Gm21994\n+Cst7\n+Nanp\n+Tcf15\n+Defb36\n+Rem1\n+Id1\n+Cox4i2\n+Dusp15\n+Ttll9\n+Ccm2l\n+Hck\n+Necab3\n+1700003F12Rik\n+4930519P11Rik\n+Gm14226\n+2310005A03Rik\n+Gssos2\n+Gssos1\n+Procr\n+Gm16098\n+Gm14168\n+Myl9\n+Tldc2\n+Mroh8\n+D630003M21Rik\n+Lbp\n+Snhg11\n+Ptprt\n+Tox2\n+Jph2\n+R3hdml\n+Ada\n+Kcns1\n+Pltp\n+Mmp9\n+Slc12a5\n+Cd40\n+Cdh22\n+Ocstamp\n+Eya2\n+Gm11464\n+Gm11466\n+Gm11468\n+5031425F14Rik\n+Prex1\n+Kcnb1\n+Gm14320\n+Gm14235\n+Tshz2\n+Cass4\n+Spo11\n+Ctcfl\n+Zbp1\n+Zfp831\n+Edn3\n+Gm14434\n+Sycp2\n+Hrh3\n+Gata5\n+Col9a3\n+Ptk6\n+Srms\n+BC051628\n+Helz2\n+Zbtb46\n+Sox18\n+Was\n+Sytl5\n+Tspan7\n+Gm10489\n+Nyx\n+Gpr34\n+Timp1\n+Slc6a14\n+Zcchc12\n+Rhox8\n+Sh2d1a\n+Smarca1\n+Hs6st2\n+4930502E18Rik\n+Xlr\n+Gm773\n+Adgrg4\n+Fgf13\n+Slitrk4\n+Fmr1nb\n+Aff2\n+Prrg3\n+Gabre\n+Xlr5c\n+Bgn\n+Dusp9\n+Pnck\n+Srpk3\n+L1cam\n+Avpr2\n+Tktl1\n+Gab3\n+F8\n+Gm15063\n+Gm7173\n+Mageb16\n+Tmem47\n+Gm14762\n+5430427O19Rik\n+F630028O10Rik\n+Kif4\n+Il2rg\n+Cxcr3\n+Ercc6l\n+Dmrtc1a\n+Cdx4\n+Fgf16\n+Cysltr1\n+Lpar4\n+P2ry10\n+A630033H20Rik\n+Gpr174\n+Itm2a\n+Rps6ka6\n+Pcdh19\n+Btk\n+Tceal5\n+Nup62cl\n+Frmpd3\n+Vsig1\n+Gucy2f\n+Pak3\n+Trpc5\n+Zcchc16\n+Lhfpl1\n+Lrch2\n+Alas2\n+Tro\n+Kctd12b\n+4930524N10Rik\n+Cnksr2\n+Gm15241\n+Scml2\n+Bmx\n+Pir\n+Egfl6\n+Tmsb4x\n+Frmpd4\n+Gm15726\n+Hnf4g\n+Gm37350\n+Stmn2\n+Hey1\n+C030034L19Rik\n+Gm9833\n+Fabp4\n+Fabp12\n+Gm38303\n+A930001A20Rik\n+Gm9733\n+Sirpb1a\n+Sirpb1b\n+Sirpb1c\n+Gm5150\n+Bhlhe22\n+Cyp7b1\n+Cp\n+Nlgn1\n+1700125G22Rik\n+Tnik\n+Gm33051\n+Egfem1\n+Actrt3\n+Pex5l\n+Mccc1os\n+Trpc3\n+Fat4\n+Pabpc4l\n+Pcdh18\n+Slc7a11\n+Mgst'..b'sr2\n+4930426I24Rik\n+Fam71d\n+Tmem229b\n+Galnt16\n+Acot3\n+Acot5\n+Acot6\n+Dnal1\n+Pgf\n+Batf\n+Gm26531\n+Tgfb3\n+Nrxn3\n+Tshr\n+Gpr68\n+Ccdc88c\n+Fbln5\n+Asb2\n+Ifi27l2a\n+Serpina1b\n+Serpina1d\n+Serpina1c\n+Serpina3f\n+Serpina3g\n+Serpina3n\n+Ak7\n+Dlk1\n+Meg3\n+Dio3\n+Exoc3l4\n+Kif26a\n+Inf2\n+Ahnak2\n+Gpr132\n+Jag2\n+9230104M06Rik\n+Tex22\n+Crip1\n+Ptprn2\n+Rapgef5\n+Macc1\n+Ccdc152\n+Plcxd3\n+Gm16311\n+Osmr\n+C1qtnf3\n+Slc45a2\n+Npr3\n+Basp1\n+Ank\n+Ctnnd2\n+Matn2\n+Gm10384\n+Trhr\n+Aard\n+Samd12\n+Tnfrsf11b\n+Col14a1\n+Sntb1\n+Klhl38\n+Anxa13\n+Pvt1\n+Tmem71\n+Tg\n+Sla\n+Gm17035\n+St3gal1\n+Gm20732\n+Ptp4a3\n+Psca\n+Lypd2\n+Ly6d\n+Ly6c1\n+Ly6c2\n+BC025446\n+Ly6f\n+Gpihbp1\n+Gsdmd\n+Slc39a4\n+Apol9a\n+Apol10b\n+Apol9b\n+Pvalb\n+Csf2rb2\n+Csf2rb\n+Cyth4\n+Mfng\n+Slc16a8\n+Kdelr3\n+Nptxr\n+Pdgfb\n+Grap2\n+Dnajb7\n+Tnfrsf13c\n+Sept3\n+Cyp2d11\n+Cyp2d10\n+Nfam1\n+Pnpla3\n+Parvb\n+Parvg\n+Upk3a\n+Fbln1\n+Mapk12\n+Mapk11\n+Odf3b\n+Shank3\n+Abcd2\n+Slc2a13\n+Pdzrn4\n+Prickle1\n+Tmem117\n+Endou\n+Ccdc184\n+Ddn\n+Dhh\n+Troap\n+Dnajc22\n+Fam186b\n+Aqp2\n+Aqp6\n+Racgap1\n+Asic1\n+Galnt6\n+Scn8a\n+Acvrl1\n+A330009N23Rik\n+Grasp\n+Krt80\n+Krt5\n+Igfbp6\n+Rarg\n+Espl1\n+Nfe2\n+Gpr84\n+Itga5\n+Mefv\n+4930451G09Rik\n+AU021092\n+Tekt5\n+Tnp2\n+Snn\n+Tnfrsf17\n+Ifitm7\n+2900011O08Rik\n+Myh11\n+Snai2\n+Igll1\n+2610318N02Rik\n+Serpind1\n+Scarf2\n+Rtn4r\n+Gp1bb\n+Cldn5\n+2010309G21Rik\n+Lamp3\n+B3gnt5\n+Klhl6\n+Thpo\n+Chrd\n+Gm16863\n+Crygs\n+Fetub\n+Hrg\n+BC106179\n+St6gal1\n+Rtp4\n+Cldn16\n+Tmem207\n+Fgf12\n+Atp13a4\n+Tmem44\n+Nrros\n+Muc20\n+Slc12a8\n+Heg1\n+Adcy5\n+Pdia5\n+Sema5b\n+Parp14\n+Stfa2l1\n+BC100530\n+Hcls1\n+Popdc2\n+Pla1a\n+Arhgap31\n+Upk1b\n+Lsamp\n+Zdhhc23\n+Sidt1\n+Boc\n+Cd200r4\n+Cd200r3\n+Ccdc80\n+Btla\n+Gcsam\n+Tmprss7\n+Gm15638\n+Cd96\n+Alcam\n+Abi3bp\n+Gm16892\n+Filip1l\n+Cadm2\n+Robo2\n+Samsn1\n+D16Ertd472e\n+Jam2\n+Cyyr1\n+Adamts1\n+Adamts5\n+Eva1c\n+4930563D23Rik\n+Kcne1\n+Runx1\n+Cldn14\n+Sim2\n+Ripply3\n+Erg\n+Bace2\n+3300005D01Rik\n+Gm1604a\n+Gm17087\n+Agpat4\n+Mas1\n+Tcp10b\n+Smoc2\n+Thbs2\n+Fpr1\n+Fpr2\n+Cldn9\n+9530082P21Rik\n+Sbp\n+Prss30\n+Prss22\n+Tbc1d24\n+Bricd5\n+Slc9a3r2\n+Meiob\n+Tmem204\n+Baiap3\n+Sox8\n+Nhlrc4\n+A930017K11Rik\n+D630044L22Rik\n+Ip6k3\n+Pacsin1\n+Spdef\n+Gm15597\n+Tcp11\n+4930539E08Rik\n+Trp53cor1\n+Cdkn1a\n+Rab44\n+Pi16\n+Gm28043\n+Dnah8\n+Tff3\n+Tff2\n+Hsf2bp\n+Rasal3\n+Pglyrp2\n+Cyp4f15\n+Actl9\n+Myo1f\n+Kank3\n+Kifc1\n+Platr17\n+Psmb9\n+Psmb8\n+H2-Ob\n+H2-Eb2\n+Notch4\n+Gpsm3\n+Prrt1\n+Gm20461\n+Tnxb\n+Vwa7\n+Sapcd1\n+Lst1\n+Tnf\n+H2-D1\n+H2-Q1\n+H2-Q4\n+H2-Q6\n+H2-Q7\n+2300002M23Rik\n+Gm20443\n+Ppp1r18\n+H2-T24\n+2410017I17Rik\n+Zfp57\n+Ubd\n+H2-M3\n+9130008F23Rik\n+Adgrf1\n+Adgrf5\n+Mep1a\n+Rcan2\n+Clic5\n+Runx2\n+Runx2os1\n+Tmem151b\n+Capn11\n+Slc22a7\n+Mdfi\n+9830107B12Rik\n+A530064D06Rik\n+Trem3\n+Treml4\n+Treml2\n+B430306N03Rik\n+Trem2\n+Unc5cl\n+Kif6\n+Rftn1\n+Gm19585\n+Adgre4\n+Shd\n+Lrg1\n+Sema6b\n+Tnfaip8l1\n+Tnfsf14\n+C3\n+Vav1\n+Adgre1\n+Arhgap28\n+Gm20703\n+Gm26510\n+Emilin2\n+Ndc80\n+Clip4\n+Lbh\n+Ehd3\n+Srd5a2\n+Nlrc4\n+Ltbp1\n+Rasgrp3\n+Cyp1b1\n+Plekhh2\n+Epas1\n+Ston1\n+Bambi\n+Map3k8\n+9430020K01Rik\n+Zeb1\n+Mkx\n+Colec12\n+4930563E18Rik\n+Gata6\n+Psma8\n+Aqp4\n+Mep1b\n+Ccdc178\n+Celf4\n+Gm16344\n+Gypc\n+Tslp\n+Cdc25c\n+Reep2\n+Ecscr\n+Slc4a9\n+Eif4ebp3\n+Pcdhb4\n+Pcdhb8\n+Pcdhb12\n+Pcdhb20\n+Slc25a2\n+Pcdhga4\n+Pcdhga6\n+Pcdhgc5\n+Arap3\n+Pcdh12\n+Spry4\n+2900055J20Rik\n+Dpysl3\n+Spink12\n+Npy6r\n+Mcc\n+Trim36\n+Sema6a\n+1700065O20Rik\n+Lox\n+Sncaip\n+Gm4951\n+Gm4841\n+F830016B08Rik\n+Iigp1\n+Synpo\n+Arsi\n+Pdgfrb\n+Bvht\n+Mir143hg\n+Piezo2\n+Rax\n+Ccbe1\n+Tubb6\n+4930503L19Rik\n+Stard6\n+Gm9925\n+Lipg\n+Pstpip2\n+Slc14a1\n+Sall3\n+Gm27239\n+Gm16146\n+Cd226\n+Aldh3b3\n+Aldh3b2\n+Tbx10\n+BC021614\n+Cabp2\n+Gm960\n+Actn3\n+Cd248\n+Kcnk7\n+Tigd3\n+Naaladl1\n+Batf2\n+Pygm\n+Rasgrp2\n+Kcnk4\n+Fermt3\n+Lgals12\n+Slc22a27\n+Slc22a28\n+Slc22a29\n+Slc22a30\n+Slc22a6\n+Chrm1\n+Syt7\n+Cyb561a3\n+Vwce\n+Pga5\n+Cd5\n+Cd6\n+Slc15a3\n+Ms4a4c\n+Gm37387\n+Ms4a2\n+Mpeg1\n+Gm4952\n+Prune2\n+Trpm6\n+Rorb\n+Anxa1\n+Aldh1a1\n+C330002G04Rik\n+Apba1\n+2610016A17Rik\n+Dmrt2\n+Pdcd1lg2\n+Il33\n+Prkg1\n+Acta2\n+Fas\n+Ch25h\n+Ifit3\n+Ifit3b\n+Ifit1bl2\n+Ifit1\n+A830019P07Rik\n+Ankrd1\n+Hectd2\n+Ppp1r3c\n+Hhex\n+Cep55\n+Ffar4\n+Cyp2c69\n+Pdlim1\n+Entpd1\n+Dntt\n+Arhgap19\n+Sfrp5\n+Loxl4\n+Scd4\n+Wnt8b\n+Gm26644\n+Cyp17a1\n+Calhm2\n+Neurl1a\n+Gm19557\n+Cfap43\n+Sorcs3\n+Sorcs1\n+1700054A03Rik\n+4833407H14Rik\n+Adra2a\n+Afap1l2\n+Slc18a2\n+E330013P04Rik\n+Csprs\n+AC125149.3\n'
b
diff -r 000000000000 -r 224721e76869 test-data/immune.markers
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/immune.markers Sun Sep 12 19:48:48 2021 +0000
b
b'@@ -0,0 +1,8126 @@\n+Sox17\n+Gm37988\n+Gm26901\n+Mybl1\n+1700034P13Rik\n+Sgk3\n+Mcmdc2\n+Tcf24\n+Ppp1r42\n+Prex2\n+Sulf1\n+Xkr9\n+Eya1\n+Rdh10\n+Stau2\n+Ly96\n+Il17f\n+Mcm3\n+Paqr8\n+Tram2\n+Tmem14a\n+Gsta3\n+Khdc1a\n+Kcnq5\n+Gm29107\n+Ogfrl1\n+Col19a1\n+Gm5524\n+Prim2\n+Rab23\n+Bag2\n+Bend6\n+Dst\n+Gm37233\n+Arhgef4\n+Gm38336\n+Neurl3\n+4930403P22Rik\n+Lman2l\n+Cnnm4\n+Ankrd23\n+Sema4c\n+Fam178b\n+Zap70\n+Tmem131\n+Mgat4a\n+2010300C02Rik\n+Tsga10\n+Lipt1\n+Aff3\n+Gm16152\n+Chst10\n+Tbc1d8\n+Rnf149\n+Il1r2\n+Gm16894\n+Il1r1\n+Il1rl2\n+Il1rl1\n+Il18r1\n+Il18rap\n+Slc9a4\n+Slc9a2\n+8430432A02Rik\n+AI597479\n+Fhl2\n+Nck2\n+1500015O10Rik\n+Gm8251\n+Tex30\n+Kdelc1\n+Bivm\n+Ercc5\n+Gulp1\n+Col5a2\n+Wdr75\n+Slc40a1\n+Dnah7b\n+Gm28151\n+Sdpr\n+Nabp1\n+Gm17767\n+Myo1b\n+Stat4\n+Nab1\n+Mfsd6\n+Inpp1\n+1700019D03Rik\n+Pms1\n+Osgepl1\n+Hecw2\n+Pgap1\n+Rftn2\n+Mars2\n+Plcl1\n+Satb2\n+1700066M21Rik\n+Spats2l\n+Sgol2a\n+Aox2\n+Nif3l1\n+Gm15834\n+Als2cr12\n+Trak2\n+Tmem237\n+G730003C15Rik\n+Mpp4\n+Als2\n+Fzd7\n+Gm973\n+Bmpr2\n+Wdr12\n+Cd28\n+Gm11579\n+Ctla4\n+Icos\n+Pard3b\n+Gm4208\n+Ino80dos\n+Gm20342\n+Ccnyl1\n+Fzd5\n+Plekhm3\n+Cryga\n+D630023F18Rik\n+Pikfyve\n+Map2\n+Erbb4\n+Ikzf2\n+Bard1\n+Atic\n+Fn1\n+Mreg\n+D230017M19Rik\n+Tmem169\n+Xrcc5\n+Smarcal1\n+Igfbp5\n+Rufy4\n+Cxcr2\n+Tmbim1\n+Catip\n+Slc11a1\n+Usp37\n+Plcd4\n+Stk36\n+Cyp27a1\n+Wnt6\n+Wnt10a\n+Ihh\n+Nhej1\n+Slc23a3\n+Abcb6\n+Speg\n+Gmppa\n+Chpf\n+Obsl1\n+Tmem198\n+Inha\n+Stk11ip\n+Slc4a3\n+Epha4\n+Sgpp2\n+Farsb\n+Mogat1\n+Acsl3\n+Utp14b\n+Ap1s3\n+Serpine2\n+Fam124b\n+Irs1\n+Rhbdd1\n+Slc19a3\n+Pid1\n+Slc16a14\n+C130026I21Rik\n+A530032D15Rik\n+A530040E14Rik\n+A630001G21Rik\n+Itm2c\n+Gpr55\n+2810459M11Rik\n+Armc9\n+B3gnt7\n+Cops7b\n+Efhd1\n+Kcnj13\n+Ngef\n+Neu2\n+Ugt1a10\n+Ugt1a9\n+Ugt1a7c\n+Ugt1a6a\n+Ugt1a5\n+Ugt1a2\n+Gm29336\n+Arl4c\n+Sh3bp4\n+Ackr3\n+Col6a3\n+Mlph\n+Rab17\n+Ramp1\n+Ube2f\n+Klhl30\n+Per2\n+Asb1\n+Gm26720\n+Otos\n+Gpc1\n+Dusp28\n+5033417F24Rik\n+9430060I03Rik\n+Gpr35\n+Kif1a\n+Sned1\n+Gm28535\n+Pask\n+Hdlbp\n+Farp2\n+Bok\n+Ing5\n+Pdcd1\n+Fam174a\n+Panct2\n+D1Ertd622e\n+Ppip5k2\n+Rnf152\n+Pign\n+Tnfrsf11a\n+Gm7160\n+Zcchc2\n+Bcl2\n+Serpinb2\n+Serpinb10\n+Serpinb8\n+Dsel\n+Cntnap5a\n+Clasp1\n+Tfcp2l1\n+Ralb\n+Gm27184\n+Tmem185b\n+Ptpn4\n+Tmem177\n+Sctr\n+Tmem37\n+3110009E18Rik\n+Steap3\n+Slc35f5\n+Gpr39\n+Lypd1\n+Nckap5\n+Tmem163\n+2900009J06Rik\n+Zranb3\n+Thsd7b\n+Gm15675\n+Cd55\n+Gm29427\n+Pfkfb2\n+AA986860\n+Fcamr\n+Gm15848\n+Pigr\n+Fcmr\n+Mapkapk2\n+Dyrk3\n+Ikbke\n+Srgap2\n+Fam72a\n+Rab7b\n+Pm20d1\n+Rab29\n+Cdk18\n+Klhdc8a\n+Nuak2\n+Tmcc2\n+Dstyk\n+Tmem81\n+Cntn2\n+Pik3c2b\n+Golt1a\n+Ren1\n+Etnk2\n+Gm26706\n+Zc3h11a\n+Gm38394\n+Lax1\n+Atp2b4\n+Chil1\n+Ppfia4\n+Cyb5r1\n+Klhl12\n+Rabif\n+Ube2t\n+Gm15445\n+Elf3\n+Rnpep\n+Lmod1\n+Ipo9\n+Nav1\n+Gm38399\n+Lad1\n+Tmem9\n+Cacna1s\n+Kif21b\n+5730559C18Rik\n+Ddx59\n+Kif14\n+Gm19705\n+A430106G13Rik\n+Atp6v1g3\n+Aspm\n+Cfh\n+B3galt2\n+Trove2\n+Rgs2\n+Rgs1\n+Rgs18\n+Pla2g4a\n+Ptgs2\n+Gm10138\n+Fam129a\n+2810414N06Rik\n+Edem3\n+1700025G04Rik\n+Colgalt2\n+Ncf2\n+Nmnat2\n+Lamc2\n+Npl\n+Rgs16\n+Teddm2\n+A830008E24Rik\n+Cacna1e\n+Gm9530\n+Ier5\n+BC034090\n+Qsox1\n+Fam163a\n+Nphs2\n+Soat1\n+Gm10031\n+Tor3a\n+Ralgps2\n+Angptl1\n+4930439D14Rik\n+Rasal2\n+Sec16b\n+4930523C07Rik\n+Rabgap1l\n+Gm37083\n+Serpinc1\n+Dars2\n+Fasl\n+Suco\n+Dnm3\n+Fmo4\n+BC055324\n+Sell\n+Gm16548\n+F5\n+Slc19a2\n+Gm26685\n+Gm32569\n+Xcl1\n+Gpr161\n+Mpzl1\n+Creg1\n+Cd247\n+Pou2f1\n+Gm15853\n+Pogk\n+Fam78b\n+Uck2\n+Lrrc52\n+Rxrg\n+Nuf2\n+Rgs5\n+3110045C21Rik\n+Gm37748\n+4930500M09Rik\n+Sh2d1b1\n+Gm7694\n+Nos1ap\n+Atf6\n+Gm26620\n+Fcrla\n+Fcgr2b\n+Gm10522\n+Fcgr4\n+Fcgr3\n+Cfap126\n+Pcp4l1\n+Apoa2\n+Fcer1g\n+Klhdc9\n+Pvrl4\n+Usf1\n+Gm26641\n+F11r\n+Cd244\n+Ly9\n+Slamf7\n+Slamf1\n+Gm37065\n+Slamf6\n+Vangl2\n+Ncstn\n+Pea15a\n+Atp1a4\n+Igsf8\n+Atp1a2\n+Kcnj10\n+Pigm\n+Slamf9\n+Igsf9\n+Tagln2\n+Cfap45\n+Vsig8\n+Slamf8\n+Dusp23\n+Aim2\n+BC094916\n+Pydc3\n+AI607873\n+Ifi204\n+Mnda\n+Ifi202b\n+Ifi205\n+Kmo\n+Opn3\n+Chml\n+Exo1\n+Cep170\n+Zbtb18\n+2310043L19Rik\n+1700016C15Rik\n+Gm16432\n+B230369F24Rik\n+Kif26b\n+Cnst\n+Sccpdh\n+Cdc42bpa\n+Gm37336\n+Gm31728\n+Lin9\n+H3f3a\n+Gm17275\n+H3f3aos\n+Pycr2\n+Lefty1\n+Ephx1\n+Cnih4\n+A430110L20Rik\n+Fbxo28\n+Capn2\n+Susd4\n+Disp1\n+Gm37986\n+Dusp10\n+1700056E22Rik\n+Hlx\n+4930532G15Rik\n+Tgfb2\n+A430105J06Rik\n+Esrrg\n+Gm36388\n+Cenpf\n+Ptpn14\n+Smyd2\n+Prox1\n+Gm28172\n+Prox1os\n+Rps6kc1\n+Vash2\n+Mfsd7b\n+Nsl1\n+Batf3\n+Atf3\n+D730003I15Rik\n+Tmem206\n+Gm32200\n+Dtl\n+Lpgat1\n+Gm38037\n+Nek2\n+1700034H1'..b't1\n+Ehd3\n+Xdh\n+Nlrc4\n+Ttc27\n+Ltbp1\n+Rasgrp3\n+Fez2\n+Gm10093\n+Heatr5b\n+Gm26637\n+Qpct\n+Cdc42ep3\n+Gemin6\n+Dhx57\n+Arhgef33\n+Cdkl4\n+Map4k3\n+Thumpd2\n+Slc8a1\n+Gm6594\n+Pkdcc\n+C430042M11Rik\n+Thada\n+Dync2li1\n+1110020A21Rik\n+Prepl\n+Camkmt\n+Srbd1\n+Prkce\n+Epas1\n+Socs5\n+Mcfd2\n+Msh6\n+Ppp1r21\n+Ston1\n+Gm10184\n+Mettl4\n+Gm1976\n+Gm26734\n+Gm20939\n+Kdm5d\n+Gm29650\n+Gm6225\n+Bambi\n+Map3k8\n+9430020K01Rik\n+Svil\n+Zfp438\n+Zeb1\n+Gm28529\n+Fzd8\n+Colec12\n+Gm17430\n+Greb1l\n+Abhd3\n+Mib1\n+Gata6\n+Gm6277\n+Tmem241\n+Gm15956\n+Ankrd29\n+Ttc39c\n+Zfp521\n+Gm5160\n+Psma8\n+Taf4b\n+Kctd1\n+Aqp4\n+Cdh2\n+Dsc2\n+Dsg2\n+Ttr\n+B4galt6\n+Rnf125\n+Mep1b\n+Garem\n+Klhl14\n+4930426D05Rik\n+Asxl3\n+Dtna\n+Gm15972\n+Rprd1a\n+Slc39a6\n+Mocos\n+Fhod3\n+Celf4\n+Sap130\n+Gm26533\n+Gpr17\n+Proc\n+A830052D11Rik\n+Gypc\n+Tslp\n+Wdr36\n+Camk4\n+Nrep\n+Epb41l4a\n+Pkd2l2\n+Nme5\n+4933408B17Rik\n+Kif20a\n+Cdc23\n+Cdc25c\n+Gm3550\n+Gm26538\n+Egr1\n+Ctnna1\n+Sil1\n+Gm5239\n+Gm28285\n+Mzb1\n+Prob1\n+Spata24\n+Ecscr\n+Gm29417\n+Psd2\n+Nrg2\n+Hbegf\n+Slc4a9\n+Eif4ebp3\n+Cd14\n+Tmco6\n+Dnd1\n+Pcdhb17\n+Pcdhb20\n+Slc25a2\n+3222401L13Rik\n+Pcdhgb4\n+Pcdhgb5\n+Pcdhgb6\n+Pcdhga12\n+Pcdhga8.1\n+Pcdhgc5\n+Rell2\n+Fchsd1\n+Arap3\n+Pcdh1\n+1700086O06Rik\n+Pcdh12\n+Spry4\n+Arhgap26\n+2900055J20Rik\n+Prelid2\n+Ppp2r2b\n+Stk32a\n+Dpysl3\n+Mcc\n+Kcnn2\n+Trim36\n+Ccdc112\n+Ticam2\n+Cdo1\n+Commd10\n+Eno1b\n+Srfbp1\n+Lox\n+Sncaip\n+Snx2\n+Snx24\n+Csnk1g3\n+Zfp608\n+Gramd3\n+March3\n+Prrc1\n+Slc12a2\n+Gm4951\n+Gm4841\n+F830016B08Rik\n+Iigp1\n+Smim3\n+Synpo\n+Cd74\n+Arsi\n+Camk2a\n+Pdgfrb\n+Csf1r\n+Pde6a\n+Arhgef37\n+Bvht\n+Pcyox1l\n+Ablim3\n+Sh3tc2\n+Adrb2\n+Gm9949\n+Spink10\n+Wdr7\n+Atp8b1\n+Alpk2\n+Malt1\n+Sec11c\n+Lman1\n+Ccbe1\n+Pmaip1\n+Gnal\n+Mppe1\n+Tubb6\n+Spire1\n+Cep76\n+Ptpn2\n+Gm26910\n+Cep192\n+Ldlrad4\n+Tcf4\n+Ccdc68\n+Rab27b\n+4930503L19Rik\n+Stard6\n+Poli\n+Elac1\n+Me2\n+Mapk4\n+Gm9925\n+Ska1\n+Cfap53\n+Lipg\n+Dym\n+Ctif\n+Katnal2\n+8030462N17Rik\n+Pstpip2\n+Epg5\n+Slc14a1\n+Setbp1\n+Pard6g\n+Rbfa\n+Hsbp1l1\n+Pqlc1\n+Atp9b\n+Sall3\n+Gm27239\n+Mbp\n+Zfp516\n+Socs6\n+Rttn\n+Cd226\n+Ighmbp2\n+Mtl5\n+Lrp5\n+1810055G02Rik\n+Tcirg1\n+Aldh3b1\n+Unc93b1\n+Aldh3b2\n+Tbx10\n+Gstp2\n+BC021614\n+Pitpnm1\n+Coro1b\n+Ptprcap\n+Carns1\n+Gm17552\n+Tbc1d10c\n+Ssh3\n+Ankrd13d\n+Syt12\n+2010003K11Rik\n+Lrfn4\n+Sptbn2\n+Gm21992\n+Rbm4\n+Rbm14\n+Ctsf\n+Zdhhc24\n+Bbs1\n+Peli3\n+Slc29a2\n+Rin1\n+Cd248\n+Tmem151a\n+Cnih2\n+Pacs1\n+Cst6\n+Sart1\n+Ccdc85b\n+Ctsw\n+Efemp2\n+Mus81\n+Snx32\n+1700020D05Rik\n+Ovol1\n+Ap5b1\n+Kat5\n+Kcnk7\n+Ehbp1l1\n+Fam89b\n+Ltbp3\n+Frmd8os\n+Frmd8\n+Slc25a45\n+Tigd3\n+Cdc42ep2\n+Gm10814\n+Syvn1\n+Cdca5\n+Batf2\n+Cdc42bpg\n+Men1\n+Map4k2\n+Pygm\n+Rasgrp2\n+Nrxn2\n+Gm14964\n+Gpr137\n+Fkbp2\n+Trpt1\n+Gm17227\n+AI846148\n+1700105P06Rik\n+2700081O15Rik\n+Slc22a19\n+Slc22a29\n+Chrm1\n+1700092M07Rik\n+Zbtb3\n+Gng3\n+Ints5\n+Rom1\n+Eml3\n+Mta2\n+Tut1\n+Ahnak\n+Pcna-ps2\n+Rab3il1\n+Fads3\n+Fads2\n+Fads1\n+Dagla\n+Syt7\n+Tmem216\n+Cyb561a3\n+Vps37c\n+Cd5\n+Cd6\n+Slc15a3\n+Tmem132a\n+AW112010\n+Ms4a8a\n+Ms4a1\n+Ms4a7\n+Gm28935\n+Ms4a4c\n+Ms4a4b\n+Gm37387\n+Ms4a6c\n+Gm8369\n+Ms4a6b\n+Ms4a6d\n+Ms4a2\n+Stx3\n+Mpeg1\n+Dtx4\n+Gm4952\n+Cep78\n+Gnaq\n+Gna14\n+Vps13a\n+Prune2\n+Anxa1\n+Aldh1a1\n+Aldh1a7\n+Gda\n+1110059E24Rik\n+Abhd17b\n+Tmem2\n+Trpm3\n+C330002G04Rik\n+Ptar1\n+Gm9938\n+Apba1\n+Fam189a2\n+Tjp2\n+Pgm5\n+Cbwd1\n+2610016A17Rik\n+Dmrt2\n+Rfx3\n+Glis3\n+1700018L02Rik\n+Insl6\n+Cd274\n+Pdcd1lg2\n+A930007I19Rik\n+Il33\n+Mbl2\n+A1cf\n+Sgms1\n+2700046G09Rik\n+Rnls\n+Lipo4\n+Lipo1\n+Lipo2\n+Stambpl1\n+Acta2\n+Fas\n+Ch25h\n+Lipa\n+Ifit2\n+Ifit3\n+Ifit1bl1\n+Ifit3b\n+Ifit1\n+Kif20b\n+Hectd2\n+Ppp1r3c\n+Fgfbp3\n+A330032B11Rik\n+Kif11\n+Hhex\n+Cyp26a1\n+Myof\n+Cep55\n+Ffar4\n+Plce1\n+Cyp2c69\n+Pdlim1\n+Sorbs1\n+Aldh18a1\n+Tctn3\n+Ccnj\n+Zfp518a\n+Blnk\n+Dntt\n+Gm340\n+AI606181\n+Arhgap19\n+Frat2\n+Rrp12\n+Ubtd1\n+Hoga1\n+Avpi1\n+Sfrp5\n+Entpd7\n+Cox15\n+Cyp2c44\n+Erlin1\n+Bloc1s2\n+Scd3\n+Scd2\n+Scd4\n+Scd1\n+Sec31b\n+Pax2\n+Fbxw4\n+Gm15491\n+Kcnip2\n+9130011E15Rik\n+Hps6\n+Pprc1\n+Psd\n+Tmem180\n+Sufu\n+Cyp17a1\n+As3mt\n+Pcgf6\n+Calhm2\n+Neurl1a\n+Sh3pxd2a\n+Obfc1\n+Gm19557\n+Slk\n+Cfap43\n+Gsto1\n+Gsto2\n+Sorcs3\n+Mirt1\n+4833407H14Rik\n+Dusp5\n+Nutf2-ps1\n+Rbm20\n+Pdcd4\n+Adra2a\n+Gpam\n+Tcf7l2\n+Nrap\n+Casp7\n+Dclre1a\n+Nhlrc2\n+Adrb1\n+Vwa2\n+Afap1l2\n+Ablim1\n+B230217O12Rik\n+Atrnl1\n+Pnliprp1\n+Hspa12a\n+Shtn1\n+Slc18a2\n+Emx2os\n+Emx2\n+Nanos1\n+Sfxn4\n+Grk5\n+Gm7102\n+Csf2ra\n+Tmlhe\n+Csprs\n+AC125149.3\n+AC168977.1\n+CAAA01147332.1\n'
b
diff -r 000000000000 -r 224721e76869 test-data/pheno.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/pheno.tsv Sun Sep 12 19:48:48 2021 +0000
b
@@ -0,0 +1,3 @@
+ gender type score
+Sample1 1 3 5
+Sample2 2 4 9