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

Changeset 2:7902cd31b9b5 (2022-01-29)
Previous changeset 1:be91cb6f48e7 (2021-11-26) Next changeset 3:7ffaa0968da3 (2022-02-10)
Commit message:
"planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/music/ commit 20f8561478535013e111d982b99639f48f1bea79"
modified:
construct_eset.xml
macros.xml
scripts/dendrogram.R
scripts/estimateprops.R
added:
test-data/default_output_no_disease.pdf
test-data/mouse_scrna_exprs.tabular
test-data/mouse_scrna_pheno.tabular
removed:
scripts/inspect.R
b
diff -r be91cb6f48e7 -r 7902cd31b9b5 construct_eset.xml
--- a/construct_eset.xml Fri Nov 26 15:55:11 2021 +0000
+++ b/construct_eset.xml Sat Jan 29 12:52:10 2022 +0000
b
@@ -33,13 +33,13 @@
 ## - This file is the only non-optional parameter
 exprs_file = '$exprs_file'
 exprs = as.matrix(read.table(exprs_file, header = T, sep = "\t",
-                  row.names = 1, as.is = T))
+                  row.names = 1, as.is = T, check.names=FALSE))
 ## Phenotype Data
 ## S rows of samples, and V columns of covariates (e.g. sex, age, etc.)
 pdata = NULL
 #if '$pdata_file':
 pdata_file = '$pdata_file'
-pdata = read.table(pdata_file, row.names = 1, header = T, sep = "\t", as.is=T)
+pdata = read.table(pdata_file, row.names = 1, header = T, sep = "\t", as.is=T, check.names=FALSE)
 #end if
 ## Annotation and Feature Data, or just a string for type of chip used
 annotation = null_str_vec('$annotation')
@@ -158,10 +158,20 @@
     </inputs>
     <outputs>
         <data name="out_txt" format="txt" label="${tool.name} on ${on_string}: General Info" />
-        <data name="out_rds" format="rdata.eset" label="${tool.name} on ${on_string}: RData ESet Object" />
+        <data name="out_rds" format="@RDATATYPE@" label="${tool.name} on ${on_string}: RData ESet Object" />
     </outputs>
     <tests>
         <test expect_num_outputs="2" >
+            <!-- Simple object -->
+            <param name="exprs_file" value="mouse_scrna_exprs.tabular" />
+            <param name="pdata_file" value="mouse_scrna_pheno.tabular" />
+            <output name="out_txt">
+                <assert_contents>
+                    <has_text text="assayData: 100 features, 100 samples " />
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="2" >
             <!-- Values from the manual -->
             <param name="exprs_file" value="array.tsv" />
             <param name="pdata_file" value="pheno.tsv" />
b
diff -r be91cb6f48e7 -r 7902cd31b9b5 macros.xml
--- a/macros.xml Fri Nov 26 15:55:11 2021 +0000
+++ b/macros.xml Sat Jan 29 12:52:10 2022 +0000
b
@@ -1,9 +1,14 @@
 <macros>
-    <token name="@VERSION_SUFFIX@">1</token>
+    <token name="@VERSION_SUFFIX@">2</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>
+    <token name="@RDATATYPE@">rdata</token>
+    <!-- Below is disabled until Galaxy supports it. Still not present
+         in 21.09
+         <token name="@RDATATYPE@">rdata.eset</token>
+    -->
     <xml name="requirements">
         <requirements>
             <requirement type="package" version="@TOOL_VERSION@" >music-deconvolution</requirement>
b
diff -r be91cb6f48e7 -r 7902cd31b9b5 scripts/dendrogram.R
--- a/scripts/dendrogram.R Fri Nov 26 15:55:11 2021 +0000
+++ b/scripts/dendrogram.R Sat Jan 29 12:52:10 2022 +0000
b
@@ -10,7 +10,7 @@
     if (lfile == "None") {
         return(NULL)
     }
-    return(read.table(file = lfile, header = FALSE,
+    return(read.table(file = lfile, header = FALSE, check.names = FALSE,
                       stringsAsFactors = FALSE)$V1)
 }
 
b
diff -r be91cb6f48e7 -r 7902cd31b9b5 scripts/estimateprops.R
--- a/scripts/estimateprops.R Fri Nov 26 15:55:11 2021 +0000
+++ b/scripts/estimateprops.R Sat Jan 29 12:52:10 2022 +0000
[
b'@@ -17,13 +17,21 @@\n estimated_music_props <- est_prop$Est.prop.weighted\n estimated_nnls_props <- est_prop$Est.prop.allgene\n \n+scale_yaxes <- function(gplot, value) {\n+    if (is.na(value)) {\n+        gplot\n+    } else {\n+        gplot + scale_y_continuous(lim = c(0, value))\n+    }\n+}\n+\n ## Show different in estimation methods\n ## Jitter plot of estimated cell type proportions\n-jitter_fig <- Jitter_Est(\n+jitter_fig <- scale_yaxes(Jitter_Est(\n     list(data.matrix(estimated_music_props),\n          data.matrix(estimated_nnls_props)),\n     method.name = methods, title = "Jitter plot of Est Proportions",\n-    size = 2, alpha = 0.7) + theme_minimal()\n+    size = 2, alpha = 0.7) + theme_minimal(), maxyscale)\n \n \n ## Make a Plot\n@@ -42,11 +50,6 @@\n     message(celltypes)\n }\n \n-if (phenotype_target_threshold == -99) {\n-    phenotype_target_threshold <- -Inf\n-    message("phenotype target threshold set to -Inf")\n-}\n-\n if (is.null(phenotype_factors)) {\n     phenotype_factors <- colnames(pData(bulk_eset))\n }\n@@ -54,67 +57,94 @@\n phenotype_factors <- phenotype_factors[\n     !(phenotype_factors %in% phenotype_factors_always_exclude)]\n message("Phenotype Factors to use:")\n-message(phenotype_factors)\n-\n+message(paste0(phenotype_factors, collapse = ", "))\n \n m_prop$CellType <- factor(m_prop$CellType, levels = celltypes) # nolint\n m_prop$Method <- factor(rep(methods, each = nrow(estimated_music_props_flat)), # nolint\n                         levels = methods)\n-m_prop$Disease_factor <- rep(bulk_eset[[phenotype_target]], 2 * length(celltypes)) # nolint\n-m_prop <- m_prop[!is.na(m_prop$Disease_factor), ]\n-## Generate a TRUE/FALSE table of Normal == 1 and Disease == 2\n-sample_groups <- c("Normal", sample_disease_group)\n-m_prop$Disease <- factor(sample_groups[(m_prop$Disease_factor > phenotype_target_threshold) + 1], # nolint\n-                         levels = sample_groups)\n+\n+if (use_disease_factor) {\n+\n+    if (phenotype_target_threshold == -99) {\n+        phenotype_target_threshold <- -Inf\n+        message("phenotype target threshold set to -Inf")\n+    }\n+\n+    m_prop$Disease_factor <- rep(bulk_eset[[phenotype_target]], 2 * length(celltypes)) # nolint\n+    m_prop <- m_prop[!is.na(m_prop$Disease_factor), ]\n+    ## Generate a TRUE/FALSE table of Normal == 1 and Disease == 2\n+    sample_groups <- c("Normal", sample_disease_group)\n+    m_prop$Disease <- factor(sample_groups[(m_prop$Disease_factor > phenotype_target_threshold) + 1], # nolint\n+                             levels = sample_groups)\n \n-## Binary to scale: e.g. TRUE / 5 = 0.2\n-m_prop$D <- (m_prop$Disease ==   # nolint\n-             sample_disease_group) / sample_disease_group_scale\n-## NA\'s are not included in the comparison below\n-m_prop <- rbind(subset(m_prop, Disease != sample_disease_group),\n-               subset(m_prop, Disease == sample_disease_group))\n+    ## Binary to scale: e.g. TRUE / 5 = 0.2\n+    m_prop$D <- (m_prop$Disease ==   # nolint\n+                 sample_disease_group) / sample_disease_group_scale\n+    ## NA\'s are not included in the comparison below\n+    m_prop <- rbind(subset(m_prop, Disease != sample_disease_group),\n+                    subset(m_prop, Disease == sample_disease_group))\n \n-jitter_new <- ggplot(m_prop, aes(Method, Prop)) +\n-    geom_point(aes(fill = Method, color = Disease, stroke = D, shape = Disease),\n-               size = 2, alpha = 0.7,\n-               position = position_jitter(width = 0.25, height = 0)) +\n-    facet_wrap(~ CellType, scales = "free") +\n-    scale_colour_manual(values = c("white", "gray20")) +\n-    scale_shape_manual(values = c(21, 24)) + theme_minimal()\n+    jitter_new <- scale_yaxes(ggplot(m_prop, aes(Method, Prop)) +\n+        geom_point(aes(fill = Method, color = Disease, stroke = D, shape = Disease),\n+                   size = 2, alpha = 0.7,\n+                   position = position_jitter(width = 0.25, height = 0)) +\n+        facet_wrap(~ CellType, scales = "free") +\n+        scale_colour_manual(values = c("white", "gray20")) '..b'type_target), " vs. ",\n+                       toupper(phenotype_scrna_target), " Cell Type Proportion")) +\n+        theme_minimal() +\n+        ylab(paste0("Proportion of ",\n+                    phenotype_scrna_target, " cells")) +\n+        xlab(paste0("Level of bulk factor (", phenotype_target, ")")) +\n+        scale_colour_manual(values = c("white", "gray20")) +\n+        scale_shape_manual(values = c(21, 24)), maxyscale)\n+}\n \n ## BoxPlot\n-plot_box <- Boxplot_Est(list(\n+plot_box <- scale_yaxes(Boxplot_Est(list(\n     data.matrix(estimated_music_props),\n     data.matrix(estimated_nnls_props)),\n     method.name = c("MuSiC", "NNLS")) +\n     theme(axis.text.x = element_text(angle = -90),\n           axis.text.y = element_text(size = 8)) +\n-    ggtitle(element_blank()) + theme_minimal()\n+    ggtitle(element_blank()) + theme_minimal(), maxyscale)\n \n ## Heatmap\n plot_hmap <- Prop_heat_Est(list(\n@@ -125,8 +155,15 @@\n           axis.text.y = element_text(size = 6))\n \n pdf(file = outfile_pdf, width = 8, height = 8)\n-plot_grid(jitter_fig, plot_box, labels = "auto", ncol = 1, nrow = 2)\n-plot_grid(jitter_new, jitt_compare, labels = "auto", ncol = 1, nrow = 2)\n+if (length(celltypes) <= 8) {\n+    plot_grid(jitter_fig, plot_box, labels = "auto", ncol = 1, nrow = 2)\n+} else {\n+    print(jitter_fig)\n+    plot_box\n+}\n+if (use_disease_factor) {\n+    plot_grid(jitter_new, jitt_compare, labels = "auto", ncol = 1, nrow = 2)\n+}\n plot_hmap\n message(dev.off())\n \n@@ -159,29 +196,32 @@\n             quote = F, sep = "\\t", col.names = NA)\n \n \n-## Summary table\n-for (meth in methods) {\n-    ##lm_beta_meth = lm(ct.prop ~ age + bmi + hba1c + gender, data =\n-    sub_data <- subset(m_prop_ana, Method == meth)\n-    ## We can only do regression where there are more than 1 factors\n-    ## so we must find and exclude the ones which are not\n-    gt1_facts <- sapply(phenotype_factors, function(facname) {\n-        return(length(unique(sort(sub_data[[facname]]))) == 1)\n-    })\n-    form_factors <- phenotype_factors\n-    exclude_facts <- names(gt1_facts)[gt1_facts]\n-    if (length(exclude_facts) > 0) {\n-        message("Factors with only one level will be excluded:")\n-        message(exclude_facts)\n-        form_factors <- phenotype_factors[\n-            !(phenotype_factors %in% exclude_facts)]\n+if (use_disease_factor) {\n+    ## Summary table of linear regressions of disease factors\n+    for (meth in methods) {\n+        ##lm_beta_meth = lm(ct.prop ~ age + bmi + hba1c + gender, data =\n+        sub_data <- subset(m_prop_ana, Method == meth)\n+\n+        ## We can only do regression where there are more than 1 factors\n+        ## so we must find and exclude the ones which are not\n+        gt1_facts <- sapply(phenotype_factors, function(facname) {\n+            return(length(unique(sort(sub_data[[facname]]))) == 1)\n+        })\n+        form_factors <- phenotype_factors\n+        exclude_facts <- names(gt1_facts)[gt1_facts]\n+        if (length(exclude_facts) > 0) {\n+            message("Factors with only one level will be excluded:")\n+            message(exclude_facts)\n+            form_factors <- phenotype_factors[\n+                !(phenotype_factors %in% exclude_facts)]\n+        }\n+        lm_beta_meth <- lm(as.formula(\n+            paste("ct.prop", paste(form_factors, collapse = " + "),\n+                  sep = " ~ ")), data = sub_data)\n+        message(paste0("Summary: ", meth))\n+        capture.output(summary(lm_beta_meth),\n+                       file = paste0("report_data/summ_Log of ",\n+                                     meth,\n+                                     " fitting.txt"))\n     }\n-    lm_beta_meth <- lm(as.formula(\n-        paste("ct.prop", paste(form_factors, collapse = " + "),\n-              sep = " ~ ")), data = sub_data)\n-    message(paste0("Summary: ", meth))\n-    capture.output(summary(lm_beta_meth),\n-                   file = paste0("report_data/summ_Log of ",\n-                                 meth,\n-                                 " fitting.txt"))\n }\n'
b
diff -r be91cb6f48e7 -r 7902cd31b9b5 scripts/inspect.R
--- a/scripts/inspect.R Fri Nov 26 15:55:11 2021 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,27 +0,0 @@
-
-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", "integer", "double", "numeric")) {
-        write.table(text, file = outfile_tab, quote = F, sep = "\t",
-                    col.names = NA)
-    } else {
-        ## text
-        print(typeof(text))
-        capture.output(text, file = outfile_tab)  # nolint
-    }
-}
-
-if (inspector %in% c("print", "pData", "fData", "dims",
-                     "experimentData", "protocolData", "exprs",
-                     "signature", "annotation", "abstract")) {
-    op <- get(inspector)
-    tab <- op(rds_eset)
-    printout(tab)
-} else {
-    stop(paste0("No such option:", inspector))
-}
b
diff -r be91cb6f48e7 -r 7902cd31b9b5 test-data/default_output_no_disease.pdf
b
Binary file test-data/default_output_no_disease.pdf has changed
b
diff -r be91cb6f48e7 -r 7902cd31b9b5 test-data/mouse_scrna_exprs.tabular
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/mouse_scrna_exprs.tabular Sat Jan 29 12:52:10 2022 +0000
b
b'@@ -0,0 +1,101 @@\n+\tTGGTTCCGTCGGCTCA-2\tCGAGCCAAGCGTCAAG-4\tGAATGAAGTTTGGGCC-5\tCTCGTACGTTGCCTCT-7\tTTCTCAATCCACGCAG-5\tCCTTCCCCATACCATG-4\tACTTTCACAGCTGGCT-7\tTGGGAAGCAAAGTGCG-7\tTCTATTGAGTAGGCCA-7\tTCGGTAACATCACGTA-2\tGGGTTGCCAGCTGTAT-2\tTGCGGGTGTCATATCG-6\tACTTGTTTCATATCGG-5\tCCAATCCCACGGCGTT-2\tCTAAGACCACCAGGCT-7\tTTAACTCAGTAGGCCA-6\tGTACTCCGTAACGCGA-1\tGCCTCTAGTTGTACAC-2\tTTCGAAGTCCTGCAGG-3\tTTCTACAAGTTGTAGA-7\tCCGTTCAGTTGAACTC-7\tGTGTTAGTCAGCTCGG-1\tGGATTACGTGTGCGTC-6\tTACGGTATCCGTTGTC-6\tTTAGTTCGTATTAGCC-5\tCCCAATCGTAGCGATG-3\tACACCAATCTGCGTAA-7\tAATCCAGTCCAAACTG-7\tCAGAATCAGCAATATG-1\tGCACATAAGCCGGTAA-5\tCCTTCCCAGGAGTTTA-5\tCGGAGCTAGGACTGGT-5\tTACGGATGTAAATGTG-4\tGGCAATTCATTCACTT-2\tCTCGGGAGTCTGCGGT-4\tCATTCGCGTCCTCTTG-2\tCGCGTTTAGATCGATA-1\tGGGTTGCCACCAACCG-4\tTGTGTTTCATCGATGT-2\tAGAGTGGAGCTGTTCA-7\tCTCACACGTCTCACCT-3\tAGTTGGTTCCACGAAT-7\tATCTGCCAGACCACGA-6\tTGTATTCCATTGAGCT-7\tTGAAAGAGTAGCCTAT-7\tAAATGCCAGAACTGTA-7\tTTTGCGCTCTACCAGA-4\tACATACGGTTTCCACC-6\tGCCTCTAGTTCCACAA-7\tGGGAGATGTACTCTCC-6\tGAACGGATCTTGTACT-7\tTACCTTATCCTAGAAC-1\tGCGCGATAGATGCCAG-2\tGACAGAGCAAGTTGTC-7\tTGACTAGGTATGAATG-3\tCACACTCAGTCACGCC-6\tATTGGTGGTTAGGGTG-5\tAGCAGCCCAGCGTAAG-2\tCATTCGCAGCCTTGAT-6\tGCGAGAACATAGACTC-2\tAGTCTTTGTAATAGCA-7\tTCGCGAGCAGACACTT-7\tCGGAGTCCAGCAGTTT-2\tGGTGTTACACACATGT-7\tTTCTCAAGTAAGTGTA-2\tTGCTGCTAGTCAATAG-2\tGATGAGGTCTACCAGA-2\tACATACGGTTGTACAC-5\tACGAGGACAGCTATTG-7\tCGATGTATCGGCGGTT-2\tCTGCGGATCACAACGT-2\tCGAACATAGTTGAGTA-5\tTAGTTGGTCGCGATCG-6\tGCAGCCACAATGTAAG-4\tCTCACACCAATAACGA-7\tCCTTTCTCATGAAGTA-2\tAGTGTCAAGAGCAATT-7\tAGCATACGTAAAGGAG-1\tACACCAATCTCGCTTG-5\tGGGATGAGTATCAGTC-6\tTGACAACAGAAGCCCA-2\tCGAATGTTCACAATGC-1\tGCACTCTTCCGCATAA-1\tCACCAGGTCCCAAGAT-2\tGTTACAGCACCGCTAG-6\tTAGCCGGCAGTACACT-2\tACGATGTGTTAAAGAC-2\tCCTTCCCAGTCTCGGC-7\tTAGTGGTTCTCTGTCG-7\tTAGCCGGAGGCTAGCA-5\tTTGTAGGTCAGCACAT-1\tGAATAAGCAGCTTCGG-7\tTCGCGAGAGTCCGGTC-3\tTCAACGAAGAGTAAGG-2\tCAGGTGCCACGAAATA-5\tTGTGTTTCACTATCTT-2\tTGGCCAGAGTGAAGAG-6\tACCAGTAAGTAGCCGA-2\tGCGGGTTAGAAGGTTT-1\tCAGTCCTGTCATTAGC-2\n+Rp1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+Sox17\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+Mrpl15\t0\t0\t0\t1\t0\t0\t1\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t1\t2\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t2\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t2\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t1\n+Lypla1\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t1\t2\t0\t1\t1\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t1\t0\t1\t2\t0\t1\t1\t0\t0\t1\t0\t0\t0\t1\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t1\t0\t1\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t1\t2\t0\t0\t0\t6\t2\t0\t2\t0\t0\t2\t0\t2\t0\t1\t1\t0\t0\t0\t0\t0\n+Gm37988\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+Tcea1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t1\t0\t0\t1\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t1\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+Atp6v1h\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t2\t1\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t2\t0\t1\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t1\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t1\t0\t0\t1\t0\t0\t0\t1\t0\t0\t0\t0\t0\t3\n+Rb1cc1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t2\t1\t2\t0\t2\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t2\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+4732440D04Rik\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t2\t0\t0\t0\n+Pcmtd1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t1\t0\t1\t0\t0\t1\t0\t1\t0\t0\t1\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t1\t1\t1\t0\t0\t1\t0\t0\t0\t0\t1\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t1\t0\t1'..b'\t0\t0\t0\t0\t0\t1\t0\t1\t0\t0\t1\t0\t0\t1\t1\t0\n+Hs6st1\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t2\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t2\t0\t2\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t2\t0\t0\n+Uggt1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t2\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+Neurl3\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+Arid5a\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+4930403P22Rik\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+Kansl3\t0\t0\t0\t0\t1\t0\t1\t0\t1\t0\t0\t1\t0\t0\t0\t0\t1\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t1\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t2\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t1\t1\t1\t0\t1\t0\t0\t0\t1\t0\t0\t0\t0\t0\t1\t1\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\n+Lman2l\t0\t0\t0\t2\t1\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t1\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t1\t0\t0\t0\t2\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+Cnnm4\t0\t0\t0\t0\t0\t0\t2\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+Cnnm3\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t2\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+Ankrd23\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+Ankrd39\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\n+Sema4c\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+Fam178b\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+Cox5b\t1\t4\t1\t1\t10\t0\t1\t1\t0\t2\t2\t0\t0\t2\t0\t1\t7\t3\t17\t0\t8\t5\t1\t0\t4\t1\t4\t5\t2\t12\t2\t21\t3\t5\t5\t6\t2\t2\t3\t3\t1\t2\t0\t4\t6\t2\t0\t1\t0\t5\t2\t7\t5\t2\t4\t0\t5\t1\t0\t0\t1\t4\t4\t1\t4\t1\t0\t5\t10\t1\t6\t4\t0\t1\t0\t5\t2\t1\t10\t4\t4\t0\t2\t11\t2\t0\t2\t1\t7\t11\t9\t4\t1\t14\t2\t3\t1\t5\t0\t12\n+Actr1b\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t1\t1\t2\t0\t0\t0\t0\t1\t0\t0\t2\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t1\t1\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t1\t0\t0\n+Zap70\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+Tmem131\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+Inpp4a\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+Coa5\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\n'
b
diff -r be91cb6f48e7 -r 7902cd31b9b5 test-data/mouse_scrna_pheno.tabular
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/mouse_scrna_pheno.tabular Sat Jan 29 12:52:10 2022 +0000
b
@@ -0,0 +1,101 @@
+ sampleID SubjectName cellTypeID cellType
+TGGTTCCGTCGGCTCA-2 2 Mouse2 3 PT
+CGAGCCAAGCGTCAAG-4 4 Mouse4 5 DCT
+GAATGAAGTTTGGGCC-5 5 Mouse5 3 PT
+CTCGTACGTTGCCTCT-7 7 Mouse7 3 PT
+TTCTCAATCCACGCAG-5 5 Mouse5 4 LOH
+CCTTCCCCATACCATG-4 4 Mouse4 14 T lymph
+ACTTTCACAGCTGGCT-7 7 Mouse7 3 PT
+TGGGAAGCAAAGTGCG-7 7 Mouse7 3 PT
+TCTATTGAGTAGGCCA-7 7 Mouse7 3 PT
+TCGGTAACATCACGTA-2 2 Mouse2 3 PT
+GGGTTGCCAGCTGTAT-2 2 Mouse2 2 Podo
+TGCGGGTGTCATATCG-6 6 Mouse6 3 PT
+ACTTGTTTCATATCGG-5 5 Mouse5 14 T lymph
+CCAATCCCACGGCGTT-2 2 Mouse2 5 DCT
+CTAAGACCACCAGGCT-7 7 Mouse7 3 PT
+TTAACTCAGTAGGCCA-6 6 Mouse6 3 PT
+GTACTCCGTAACGCGA-1 1 Mouse1 3 PT
+GCCTCTAGTTGTACAC-2 2 Mouse2 3 PT
+TTCGAAGTCCTGCAGG-3 3 Mouse3 3 PT
+TTCTACAAGTTGTAGA-7 7 Mouse7 3 PT
+CCGTTCAGTTGAACTC-7 7 Mouse7 7 CD-IC
+GTGTTAGTCAGCTCGG-1 1 Mouse1 4 LOH
+GGATTACGTGTGCGTC-6 6 Mouse6 3 PT
+TACGGTATCCGTTGTC-6 6 Mouse6 3 PT
+TTAGTTCGTATTAGCC-5 5 Mouse5 3 PT
+CCCAATCGTAGCGATG-3 3 Mouse3 3 PT
+ACACCAATCTGCGTAA-7 7 Mouse7 5 DCT
+AATCCAGTCCAAACTG-7 7 Mouse7 5 DCT
+CAGAATCAGCAATATG-1 1 Mouse1 3 PT
+GCACATAAGCCGGTAA-5 5 Mouse5 5 DCT
+CCTTCCCAGGAGTTTA-5 5 Mouse5 3 PT
+CGGAGCTAGGACTGGT-5 5 Mouse5 4 LOH
+TACGGATGTAAATGTG-4 4 Mouse4 3 PT
+GGCAATTCATTCACTT-2 2 Mouse2 3 PT
+CTCGGGAGTCTGCGGT-4 4 Mouse4 6 CD-PC
+CATTCGCGTCCTCTTG-2 2 Mouse2 8 CD-Trans
+CGCGTTTAGATCGATA-1 1 Mouse1 6 CD-PC
+GGGTTGCCACCAACCG-4 4 Mouse4 7 CD-IC
+TGTGTTTCATCGATGT-2 2 Mouse2 3 PT
+AGAGTGGAGCTGTTCA-7 7 Mouse7 3 PT
+CTCACACGTCTCACCT-3 3 Mouse3 3 PT
+AGTTGGTTCCACGAAT-7 7 Mouse7 3 PT
+ATCTGCCAGACCACGA-6 6 Mouse6 3 PT
+TGTATTCCATTGAGCT-7 7 Mouse7 3 PT
+TGAAAGAGTAGCCTAT-7 7 Mouse7 3 PT
+AAATGCCAGAACTGTA-7 7 Mouse7 5 DCT
+TTTGCGCTCTACCAGA-4 4 Mouse4 3 PT
+ACATACGGTTTCCACC-6 6 Mouse6 3 PT
+GCCTCTAGTTCCACAA-7 7 Mouse7 3 PT
+GGGAGATGTACTCTCC-6 6 Mouse6 1 Endo
+GAACGGATCTTGTACT-7 7 Mouse7 3 PT
+TACCTTATCCTAGAAC-1 1 Mouse1 3 PT
+GCGCGATAGATGCCAG-2 2 Mouse2 3 PT
+GACAGAGCAAGTTGTC-7 7 Mouse7 3 PT
+TGACTAGGTATGAATG-3 3 Mouse3 4 LOH
+CACACTCAGTCACGCC-6 6 Mouse6 3 PT
+ATTGGTGGTTAGGGTG-5 5 Mouse5 3 PT
+AGCAGCCCAGCGTAAG-2 2 Mouse2 1 Endo
+CATTCGCAGCCTTGAT-6 6 Mouse6 3 PT
+GCGAGAACATAGACTC-2 2 Mouse2 14 T lymph
+AGTCTTTGTAATAGCA-7 7 Mouse7 3 PT
+TCGCGAGCAGACACTT-7 7 Mouse7 3 PT
+CGGAGTCCAGCAGTTT-2 2 Mouse2 3 PT
+GGTGTTACACACATGT-7 7 Mouse7 3 PT
+TTCTCAAGTAAGTGTA-2 2 Mouse2 1 Endo
+TGCTGCTAGTCAATAG-2 2 Mouse2 3 PT
+GATGAGGTCTACCAGA-2 2 Mouse2 3 PT
+ACATACGGTTGTACAC-5 5 Mouse5 3 PT
+ACGAGGACAGCTATTG-7 7 Mouse7 4 LOH
+CGATGTATCGGCGGTT-2 2 Mouse2 3 PT
+CTGCGGATCACAACGT-2 2 Mouse2 13 B lymph
+CGAACATAGTTGAGTA-5 5 Mouse5 3 PT
+TAGTTGGTCGCGATCG-6 6 Mouse6 5 DCT
+GCAGCCACAATGTAAG-4 4 Mouse4 1 Endo
+CTCACACCAATAACGA-7 7 Mouse7 3 PT
+CCTTTCTCATGAAGTA-2 2 Mouse2 7 CD-IC
+AGTGTCAAGAGCAATT-7 7 Mouse7 3 PT
+AGCATACGTAAAGGAG-1 1 Mouse1 6 CD-PC
+ACACCAATCTCGCTTG-5 5 Mouse5 3 PT
+GGGATGAGTATCAGTC-6 6 Mouse6 3 PT
+TGACAACAGAAGCCCA-2 2 Mouse2 3 PT
+CGAATGTTCACAATGC-1 1 Mouse1 1 Endo
+GCACTCTTCCGCATAA-1 1 Mouse1 3 PT
+CACCAGGTCCCAAGAT-2 2 Mouse2 3 PT
+GTTACAGCACCGCTAG-6 6 Mouse6 3 PT
+TAGCCGGCAGTACACT-2 2 Mouse2 11 Macro
+ACGATGTGTTAAAGAC-2 2 Mouse2 9 Novel1
+CCTTCCCAGTCTCGGC-7 7 Mouse7 3 PT
+TAGTGGTTCTCTGTCG-7 7 Mouse7 7 CD-IC
+TAGCCGGAGGCTAGCA-5 5 Mouse5 7 CD-IC
+TTGTAGGTCAGCACAT-1 1 Mouse1 4 LOH
+GAATAAGCAGCTTCGG-7 7 Mouse7 3 PT
+TCGCGAGAGTCCGGTC-3 3 Mouse3 14 T lymph
+TCAACGAAGAGTAAGG-2 2 Mouse2 5 DCT
+CAGGTGCCACGAAATA-5 5 Mouse5 3 PT
+TGTGTTTCACTATCTT-2 2 Mouse2 3 PT
+TGGCCAGAGTGAAGAG-6 6 Mouse6 3 PT
+ACCAGTAAGTAGCCGA-2 2 Mouse2 6 CD-PC
+GCGGGTTAGAAGGTTT-1 1 Mouse1 3 PT
+CAGTCCTGTCATTAGC-2 2 Mouse2 7 CD-IC