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

Changeset 0:2cfd0db49bbc (2021-09-12)
Next changeset 1:be91cb6f48e7 (2021-11-26)
Commit message:
"planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/music/ commit 08c6fd3885bdfbf8b5c3f4dcc2d04729b577e3e1"
added:
construct_eset.xml
macros.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 2cfd0db49bbc construct_eset.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/construct_eset.xml Sun Sep 12 19:49:12 2021 +0000
[
b'@@ -0,0 +1,211 @@\n+<tool id="music_construct_eset" name="Construct Expression Set Object" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@"\n+      profile="20.05" license="GPL-3.0-or-later" >\n+    <description>Create an ExpressionSet object from tabular and textual data</description>\n+    <macros>\n+        <import>macros.xml</import>\n+    </macros>\n+    <expand macro="requirements" />\n+    <command detect_errors="exit_code"><![CDATA[\n+Rscript --vanilla \'$conf\'\n+]]></command>\n+    <configfiles>\n+        <configfile name="conf" >\n+\n+suppressWarnings(suppressPackageStartupMessages(library(xbioc)))\n+suppressWarnings(suppressPackageStartupMessages(library(MuSiC)))\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+## Assay Data\n+## F rows of features and S columns of samples\n+## - This file is the only non-optional parameter\n+exprs_file = \'$exprs_file\'\n+exprs = as.matrix(read.table(exprs_file, header = T, sep = "\\t",\n+                  row.names = 1, as.is = T))\n+## Phenotype Data\n+## S rows of samples, and V columns of covariates (e.g. sex, age, etc.)\n+pdata = NULL\n+#if \'$pdata_file\':\n+pdata_file = \'$pdata_file\'\n+pdata = read.table(pdata_file, row.names = 1, header = T, sep = "\\t", as.is=T)\n+#end if\n+## Annotation and Feature Data, or just a string for type of chip used\n+annotation = null_str_vec(\'$annotation\')\n+\n+if (all(rownames(pdata) != colnames(exprs))) {\n+   stop("Number of Samples between phenotypes and assays are not the same")\n+}\n+\n+##metadata = data.frame(\n+##    labelDescription = c(\n+##        "Patient gender",\n+##        "Case/Control",\n+##        "Tumor progress"),\n+##    row.names = c("gender", "type", "score"))\n+metadata = as.data.frame(do.call(rbind, list(\n+#for i, row in enumerate($metadata):\n+      #if i==0\n+      list(ldesc=\'$row.label_desc\', lname=\'$row.row_names\')\n+      #else\n+      ,list(ldesc=\'$row.label_desc\', lname=\'$row.row_names\')\n+      #end if\n+#end for\n+)))\n+metadata\\$labelDescription = unlist(metadata\\$ldesc)\n+rownames(metadata) = unlist(metadata\\$lname)\n+metadata\\$ldesc = NULL\n+metadata\\$lname = NULL\n+\n+if (nrow(metadata)==0) {\n+   metadata = NULL\n+}\n+\n+pheno_data = new("AnnotatedDataFrame", data = pdata, varMetadata = metadata)\n+\n+## Experiment Description -- using the MIAME object\n+experiment_data = new(\n+    "MIAME",\n+    name = null_str_vec(\'$expdata.name\'),\n+    lab = null_str_vec(\'$expdata.lab\'),\n+    contact = null_str_vec(\'$expdata.contact\'),\n+    title = null_str_vec(\'$expdata.title\'),\n+    abstract = null_str_vec(\'$expdata.abstract\'),\n+    url = null_str_vec(\'$expdata.url\'),\n+    other = list(\n+#for i, row in enumerate($expdata.other):\n+    #if i==0\n+    \'$row.field\' = null_str_vec(\'$row.comment\')\n+    #else\n+    ,\'$row.field\' = null_str_vec(\'$row.comment\')\n+    #end if\n+#end for\n+))\n+\n+e_set = ExpressionSet(assayData = exprs,\n+                      phenoData = pheno_data,\n+                      experimentData = experiment_data,\n+                      annotation = annotation)\n+\n+capture.output(print(e_set), file = \'$out_tab\')\n+saveRDS(e_set, file= \'$out_rds\')\n+\n+        </configfile>\n+    </configfiles>\n+    <inputs>\n+        <param name="exprs_file" label="Assay Data" type="data" format="tabular,tsv"\n+               help="F rows of features and S columns of samples. A Tab delimited file, with a header line and the first column has row names." />\n+        <param name="pdata_file" label="Phenotype Data" type="data"\n+               format="tabular,tsv" optional="true"\n+               help="S rows of samples, and V columns of covariates (e.g. sex, age)" />\n+        <param name="annotation" label="Annotation" type="text"\n+               optional="true" help="A string detailing which chip was used"  >\n+            <expand macro="validator_text_and_urls" />\n+        </param>\n+        <repeat name="metadata" title'..b'       <param name="title" label="Title" type="text" value="" optional="true" >\n+                <expand macro="validator_text_and_urls" />\n+            </param>\n+            <param name="abstract" label="Abstract" type="text" value="" optional="true" >\n+                <expand macro="validator_text_and_urls" />\n+            </param>\n+            <param name="url" label="URL" type="text" value="" optional="true" >\n+                <expand macro="validator_text_and_urls" />\n+            </param>\n+            <repeat name="other" title="Other Fields" min="1">\n+                <param name="field" label="FieldName" type="text" value="notes" >\n+                    <expand macro="validator_text_and_urls" />\n+                </param>\n+                <param name="comment" label="Comment" type="text" value="Created in Galaxy" >\n+                    <expand macro="validator_text_and_urls" />\n+                </param>\n+            </repeat>\n+        </section>\n+    </inputs>\n+    <outputs>\n+        <data name="out_tab" format="tabular" label="${tool.name} on ${on_string}: General Info" />\n+        <data name="out_rds" format="rdata.eset" label="${tool.name} on ${on_string}: RData ESet Object" />\n+    </outputs>\n+    <tests>\n+        <test expect_num_outputs="2" >\n+            <!-- Values from the manual -->\n+            <param name="exprs_file" value="array.tsv" />\n+            <param name="pdata_file" value="pheno.tsv" />\n+            <param name="annotation" value="hgu95av2" />\n+            <repeat name="metadata" >\n+                <param name="row_names" value="gender" />\n+                <param name="label_desc" value="Patient gender" />\n+            </repeat>\n+            <repeat name="metadata" >\n+                <param name="row_names" value="type" />\n+                <param name="label_desc" value="Case/control status" />\n+            </repeat>\n+            <repeat name="metadata" >\n+                <param name="row_names" value="score" />\n+                <param name="label_desc" value="Tumor Progress on XYZ scale" />\n+            </repeat>\n+            <section name="expdata">\n+                <param name="name" value="Pierre Fermat" />\n+                <param name="lab" value="Francis Galton Lab" />\n+                <param name="contact" value="pfermat@lab.not.exist" />\n+                <param name="title" value="Smoking-Cancer Experiment" />\n+                <param name="abstract" value="An example ExpressionSet" />\n+                <param name="url" value="www.lab.not.exist" />\n+                <repeat name="other" >\n+                    <param name="field" value="notes" />\n+                    <param name="comment" value="Created in Galaxy" />\n+                </repeat>\n+                <repeat name="other" >\n+                    <param name="field" value="general" />\n+                    <param name="comment" value="Some other comment" />\n+                </repeat>\n+            </section>\n+            <output name="out_tab">\n+                <assert_contents>\n+                    <has_text text="assayData: 3 features, 2 samples " />\n+                </assert_contents>\n+            </output>\n+        </test>\n+    </tests>\n+    <help><![CDATA[\n+Construct an ExpressionSet object from a variety of input attributes, such as experimentData, phenotype data, and annotations.\n+\n+For more options and information, consult `the manual <http://www.bioconductor.org/packages/release/bioc/vignettes/Biobase/inst/doc/ExpressionSetIntroduction.pdf>`_ and the `rdocumentation <https://www.rdocumentation.org/packages/Biobase/versions/2.32.0/topics/ExpressionSet>`_\n+.\n+    ]]></help>\n+    <citations>\n+        <citation type="bibtex">\n+            @misc{falcon2007introduction,\n+            title={An introduction to bioconductor\xe2\x80\x99s expressionset class},\n+            author={Falcon, Seth and Morgan, Martin and Gentleman, Robert},\n+            year={2007}\n+            }\n+        </citation>\n+    </citations>\n+</tool>\n\\ No newline at end of file\n'
b
diff -r 000000000000 -r 2cfd0db49bbc macros.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/macros.xml Sun Sep 12 19:49:12 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 2cfd0db49bbc scripts/dendrogram.R
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/dendrogram.R Sun Sep 12 19:49:12 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 2cfd0db49bbc scripts/estimateprops.R
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/estimateprops.R Sun Sep 12 19:49:12 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 2cfd0db49bbc scripts/inspect.R
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/inspect.R Sun Sep 12 19:49:12 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 2cfd0db49bbc test-data/EMTABesethealthy.subset.rds
b
Binary file test-data/EMTABesethealthy.subset.rds has changed
b
diff -r 000000000000 -r 2cfd0db49bbc test-data/GSE50244bulkeset.subset.rds
b
Binary file test-data/GSE50244bulkeset.subset.rds has changed
b
diff -r 000000000000 -r 2cfd0db49bbc test-data/Mousebulkeset.rds
b
Binary file test-data/Mousebulkeset.rds has changed
b
diff -r 000000000000 -r 2cfd0db49bbc test-data/Mousesubeset.degenesonly2.half.rds
b
Binary file test-data/Mousesubeset.degenesonly2.half.rds has changed
b
diff -r 000000000000 -r 2cfd0db49bbc test-data/array.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/array.tsv Sun Sep 12 19:49:12 2021 +0000
b
@@ -0,0 +1,4 @@
+ Sample1 Sample2
+Gene1 1 3
+Gene2 2 4
+Gene3 3 5
b
diff -r 000000000000 -r 2cfd0db49bbc test-data/default_output.pdf
b
Binary file test-data/default_output.pdf has changed
b
diff -r 000000000000 -r 2cfd0db49bbc test-data/dendro.pdf
b
Binary file test-data/dendro.pdf has changed
b
diff -r 000000000000 -r 2cfd0db49bbc test-data/epith.markers
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/epith.markers Sun Sep 12 19:49:12 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 2cfd0db49bbc test-data/immune.markers
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/immune.markers Sun Sep 12 19:49:12 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 2cfd0db49bbc test-data/pheno.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/pheno.tsv Sun Sep 12 19:49:12 2021 +0000
b
@@ -0,0 +1,3 @@
+ gender type score
+Sample1 1 3 5
+Sample2 2 4 9