biopipen 0.24.1__py3-none-any.whl → 0.24.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of biopipen might be problematic. Click here for more details.
- biopipen/__init__.py +1 -1
- biopipen/ns/cellranger.py +31 -0
- biopipen/ns/cellranger_pipeline.py +95 -0
- biopipen/reports/cellranger/CellRangerCount.svelte +5 -2
- biopipen/reports/cellranger/CellRangerSummary.svelte +16 -0
- biopipen/reports/cellranger/CellRangerVdj.svelte +5 -2
- biopipen/scripts/cellranger/CellRangerSummary.R +189 -0
- biopipen/scripts/scrna/CellsDistribution.R +4 -5
- biopipen/scripts/scrna/MarkersFinder.R +2 -3
- biopipen/scripts/scrna/MetaMarkers.R +3 -4
- biopipen/scripts/scrna/RadarPlots.R +2 -3
- biopipen/scripts/scrna/ScFGSEA.R +2 -3
- biopipen/scripts/scrna/SeuratClusterStats-hists.R +1 -1
- biopipen/scripts/scrna/SeuratClusterStats.R +0 -1
- biopipen/scripts/scrna/SeuratPreparing.R +13 -10
- biopipen/scripts/scrna/TopExpressingGenes.R +2 -3
- biopipen/scripts/scrna_metabolic_landscape/MetabolicFeatures.R +2 -3
- biopipen/scripts/scrna_metabolic_landscape/MetabolicFeaturesIntraSubset.R +1 -2
- biopipen/scripts/scrna_metabolic_landscape/MetabolicPathwayHeterogeneity.R +1 -2
- biopipen/scripts/tcr/CDR3AAPhyschem.R +0 -1
- biopipen/scripts/tcr/CloneResidency.R +5 -6
- biopipen/scripts/tcr/Immunarch-diversity.R +2 -2
- biopipen/scripts/tcr/Immunarch-kmer.R +1 -1
- biopipen/scripts/tcr/Immunarch-spectratyping.R +2 -2
- biopipen/scripts/tcr/Immunarch-vjjunc.R +1 -1
- biopipen/scripts/tcr/Immunarch.R +0 -1
- biopipen/scripts/tcr/TCRClusterStats.R +4 -5
- biopipen/utils/gsea.R +7 -2
- biopipen/utils/misc.R +11 -8
- {biopipen-0.24.1.dist-info → biopipen-0.24.2.dist-info}/METADATA +1 -1
- {biopipen-0.24.1.dist-info → biopipen-0.24.2.dist-info}/RECORD +33 -30
- {biopipen-0.24.1.dist-info → biopipen-0.24.2.dist-info}/entry_points.txt +1 -0
- {biopipen-0.24.1.dist-info → biopipen-0.24.2.dist-info}/WHEEL +0 -0
biopipen/__init__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "0.24.
|
|
1
|
+
__version__ = "0.24.2"
|
biopipen/ns/cellranger.py
CHANGED
|
@@ -50,6 +50,7 @@ class CellRangerCount(Proc):
|
|
|
50
50
|
script = "file://../scripts/cellranger/CellRangerCount.py"
|
|
51
51
|
plugin_opts = {
|
|
52
52
|
"report": "file://../reports/cellranger/CellRangerCount.svelte",
|
|
53
|
+
"report_paging": 5,
|
|
53
54
|
}
|
|
54
55
|
|
|
55
56
|
|
|
@@ -98,4 +99,34 @@ class CellRangerVdj(Proc):
|
|
|
98
99
|
script = "file://../scripts/cellranger/CellRangerVdj.py"
|
|
99
100
|
plugin_opts = {
|
|
100
101
|
"report": "file://../reports/cellranger/CellRangerVdj.svelte",
|
|
102
|
+
"report_paging": 5,
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
class CellRangerSummary(Proc):
|
|
107
|
+
"""Summarize cellranger metrics
|
|
108
|
+
|
|
109
|
+
Input:
|
|
110
|
+
indirs: The directories containing cellranger results
|
|
111
|
+
from `CellRangerCount`/`CellRangerVdj`.
|
|
112
|
+
|
|
113
|
+
Output:
|
|
114
|
+
outdir: The output directory
|
|
115
|
+
|
|
116
|
+
Envs:
|
|
117
|
+
group (type=auto): The group of the samples for boxplots.
|
|
118
|
+
If `None`, don't do boxplots.
|
|
119
|
+
It can be a dict of group names and sample names, e.g.
|
|
120
|
+
`{"group1": ["sample1", "sample2"], "group2": ["sample3"]}`
|
|
121
|
+
or a file containing the group information, with the first column
|
|
122
|
+
being the sample names and the second column being the group names.
|
|
123
|
+
The file should be tab-delimited with no header.
|
|
124
|
+
"""
|
|
125
|
+
input = "indirs:dirs"
|
|
126
|
+
output = "outdir:dir:{{in.indirs | first | stem | append: '-etc.summary'}}"
|
|
127
|
+
lang = config.lang.rscript
|
|
128
|
+
script = "file://../scripts/cellranger/CellRangerSummary.R"
|
|
129
|
+
envs = {"group": None}
|
|
130
|
+
plugin_opts = {
|
|
131
|
+
"report": "file://../reports/cellranger/CellRangerSummary.svelte",
|
|
101
132
|
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"""The cellranger pipelines
|
|
2
|
+
|
|
3
|
+
Primarily cellranger process plus summary for summarizing the metrics for
|
|
4
|
+
multiple samples.
|
|
5
|
+
"""
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
from typing import TYPE_CHECKING
|
|
8
|
+
|
|
9
|
+
from diot import Diot
|
|
10
|
+
from pipen_args.procgroup import ProcGroup
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from pipen import Proc
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class CellRangerCountPipeline(ProcGroup):
|
|
17
|
+
"""The cellranger count pipeline
|
|
18
|
+
|
|
19
|
+
Run cellranger count for multiple samples and summarize the metrics.
|
|
20
|
+
"""
|
|
21
|
+
DEFAULTS = Diot(input=None)
|
|
22
|
+
|
|
23
|
+
def post_init(self):
|
|
24
|
+
"""Check if the input is a list of fastq files"""
|
|
25
|
+
if (
|
|
26
|
+
not isinstance(self.opts.input, (list, tuple))
|
|
27
|
+
or len(self.opts.input) == 0
|
|
28
|
+
or not isinstance(self.opts.input[0], (list, tuple))
|
|
29
|
+
):
|
|
30
|
+
raise TypeError(
|
|
31
|
+
"The input of `CellRangerCountPipeline` should be a list of lists of "
|
|
32
|
+
"fastq files."
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
@ProcGroup.add_proc
|
|
36
|
+
def p_cellranger_count(self) -> Proc:
|
|
37
|
+
"""Build CellRangerCount process"""
|
|
38
|
+
from .cellranger import CellRangerCount as _CellRangerCount
|
|
39
|
+
|
|
40
|
+
class CellRangerCount(_CellRangerCount):
|
|
41
|
+
input_data = self.opts.input
|
|
42
|
+
|
|
43
|
+
return CellRangerCount
|
|
44
|
+
|
|
45
|
+
@ProcGroup.add_proc
|
|
46
|
+
def p_cellranger_count_summary(self) -> Proc:
|
|
47
|
+
"""Build CellRangerCountSummary process"""
|
|
48
|
+
from .cellranger import CellRangerSummary
|
|
49
|
+
|
|
50
|
+
class CellRangerCountSummary(CellRangerSummary):
|
|
51
|
+
requires = self.p_cellranger_count
|
|
52
|
+
input_data = lambda ch: [list(ch.iloc[:, 0])]
|
|
53
|
+
|
|
54
|
+
return CellRangerCountSummary
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class CellRangerVdjPipeline(ProcGroup):
|
|
58
|
+
"""The cellranger vdj pipeline
|
|
59
|
+
|
|
60
|
+
Run cellranger vdj for multiple samples and summarize the metrics.
|
|
61
|
+
"""
|
|
62
|
+
DEFAULTS = Diot(input=None)
|
|
63
|
+
|
|
64
|
+
def post_init(self):
|
|
65
|
+
"""Check if the input is a list of fastq files"""
|
|
66
|
+
if (
|
|
67
|
+
not isinstance(self.opts.input, (list, tuple))
|
|
68
|
+
or len(self.opts.input) == 0
|
|
69
|
+
or not isinstance(self.opts.input[0], (list, tuple))
|
|
70
|
+
):
|
|
71
|
+
raise TypeError(
|
|
72
|
+
"The input of `CellRangerVdjPipeline` should be a list of lists of "
|
|
73
|
+
"fastq files."
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
@ProcGroup.add_proc
|
|
77
|
+
def p_cellranger_vdj(self) -> Proc:
|
|
78
|
+
"""Build CellRangerVdj process"""
|
|
79
|
+
from .cellranger import CellRangerVdj as _CellRangerVdj
|
|
80
|
+
|
|
81
|
+
class CellRangerVdj(_CellRangerVdj):
|
|
82
|
+
input_data = self.opts.input
|
|
83
|
+
|
|
84
|
+
return CellRangerVdj
|
|
85
|
+
|
|
86
|
+
@ProcGroup.add_proc
|
|
87
|
+
def p_cellranger_vdj_summary(self) -> Proc:
|
|
88
|
+
"""Build CellRangerVdjSummary process"""
|
|
89
|
+
from .cellranger import CellRangerSummary
|
|
90
|
+
|
|
91
|
+
class CellRangerVdjSummary(CellRangerSummary):
|
|
92
|
+
requires = self.p_cellranger_vdj
|
|
93
|
+
input_data = lambda ch: [list(ch.iloc[:, 0])]
|
|
94
|
+
|
|
95
|
+
return CellRangerVdjSummary
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
{% from "utils/misc.liq" import report_jobs, table_of_images -%}
|
|
2
|
+
<script>
|
|
3
|
+
import { Iframe } from "$libs";
|
|
4
|
+
</script>
|
|
2
5
|
|
|
3
6
|
{%- macro report_job(job, h=1) -%}
|
|
4
|
-
<
|
|
7
|
+
<Iframe
|
|
5
8
|
src="{{job.out.outdir}}/outs/web_summary.html"
|
|
6
9
|
width="100%"
|
|
7
10
|
frameborder="0"
|
|
8
|
-
style="min-height: 60vh"
|
|
11
|
+
style="min-height: 60vh" />
|
|
9
12
|
{%- endmacro -%}
|
|
10
13
|
|
|
11
14
|
{%- macro head_job(job) -%}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{% from "utils/misc.liq" import report_jobs -%}
|
|
2
|
+
|
|
3
|
+
<script>
|
|
4
|
+
import { Image, DataTable, Descr } from "$libs";
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
{%- macro report_job(job, h=1) -%}
|
|
8
|
+
{{ job | render_job: h=h }}
|
|
9
|
+
{%- endmacro -%}
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
{%- macro head_job(job) -%}
|
|
13
|
+
<h1>{{job.out.outdir | stem | escape}}</h1>
|
|
14
|
+
{%- endmacro -%}
|
|
15
|
+
|
|
16
|
+
{{ report_jobs(jobs, head_job, report_job) }}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
{% from "utils/misc.liq" import report_jobs, table_of_images -%}
|
|
2
|
+
<script>
|
|
3
|
+
import { Iframe } from "$libs";
|
|
4
|
+
</script>
|
|
2
5
|
|
|
3
6
|
{%- macro report_job(job, h=1) -%}
|
|
4
|
-
<
|
|
7
|
+
<Iframe
|
|
5
8
|
src="{{job.out.outdir}}/outs/web_summary.html"
|
|
6
9
|
width="100%"
|
|
7
10
|
frameborder="0"
|
|
8
|
-
style="min-height: 60vh"
|
|
11
|
+
style="min-height: 60vh" />
|
|
9
12
|
{%- endmacro -%}
|
|
10
13
|
|
|
11
14
|
{%- macro head_job(job) -%}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
source("{{biopipen_dir}}/utils/misc.R")
|
|
2
|
+
library(rlang)
|
|
3
|
+
library(dplyr)
|
|
4
|
+
library(ggplot2)
|
|
5
|
+
library(ggprism)
|
|
6
|
+
|
|
7
|
+
theme_set(theme_prism())
|
|
8
|
+
|
|
9
|
+
indirs <- {{in.indirs | r}}
|
|
10
|
+
outdir <- {{out.outdir | r}}
|
|
11
|
+
joboutdir <- {{job.outdir | r}}
|
|
12
|
+
group <- {{envs.group | r}}
|
|
13
|
+
|
|
14
|
+
if (is.character(group)) {
|
|
15
|
+
group <- read.csv(group, header = FALSE, row.names = NULL)
|
|
16
|
+
colnames(group) <- c("Sample", "Group")
|
|
17
|
+
} else if (is.list(group)) {
|
|
18
|
+
group <- do_call(
|
|
19
|
+
rbind,
|
|
20
|
+
lapply(names(group), function(n) data.frame(Sample = group[[n]], Group = n))
|
|
21
|
+
)
|
|
22
|
+
} else if (!is.null(group)) {
|
|
23
|
+
stop(paste0("Invalid group: ", paste0(group, collapse = ", ")))
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
cellranger_type <- NULL
|
|
27
|
+
log_info("Reading and merging metrics for each sample ...")
|
|
28
|
+
metrics <- NULL
|
|
29
|
+
for (indir in indirs) {
|
|
30
|
+
sample <- basename(indir)
|
|
31
|
+
log_debug("- Reading metrics for sample: ", sample)
|
|
32
|
+
metric <- read.csv(
|
|
33
|
+
file.path(indir, "outs", "metrics_summary.csv"),
|
|
34
|
+
header = TRUE, row.names = NULL, check.names = FALSE)
|
|
35
|
+
metric$Sample <- sample
|
|
36
|
+
sample_cellranger_type <- ifelse(
|
|
37
|
+
file.exists(file.path(indir, "outs", "clonotypes.csv")),
|
|
38
|
+
"vdj",
|
|
39
|
+
"count" # support more types in the future
|
|
40
|
+
)
|
|
41
|
+
cellranger_type <- cellranger_type %||% sample_cellranger_type
|
|
42
|
+
if (cellranger_type != sample_cellranger_type) {
|
|
43
|
+
stop("Multiple types of CellRanger output detected. Should be either count or vdj.")
|
|
44
|
+
}
|
|
45
|
+
if (!is.null(metrics)) {
|
|
46
|
+
missing_cols <- setdiff(colnames(metrics), colnames(metric))
|
|
47
|
+
if (length(missing_cols) > 0) {
|
|
48
|
+
log_warn('- Missing columns: {paste0(missing_cols, collapse = ", ")} in sample: {sample}')
|
|
49
|
+
metric[missing_cols] <- NA
|
|
50
|
+
}
|
|
51
|
+
missing_cols <- setdiff(colnames(metric), colnames(metrics))
|
|
52
|
+
if (length(missing_cols) > 0) {
|
|
53
|
+
log_warn('- Missing columns: {paste0(missing_cols, collapse = ", ")} in samples before {sample}')
|
|
54
|
+
metrics[missing_cols] <- NA
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
metrics <- rbind(metrics, metric)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (is.null(metrics)) {
|
|
61
|
+
stop("No samples found, check the input directories.")
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
percent_columns <- sapply(colnames(metrics), function(x) {
|
|
65
|
+
is.character(metrics[[x]]) && grepl("%", metrics[[x]][1]) && x != "Sample"
|
|
66
|
+
})
|
|
67
|
+
percent_columns <- colnames(metrics)[percent_columns]
|
|
68
|
+
# Remove %
|
|
69
|
+
metrics <- metrics %>%
|
|
70
|
+
mutate(across(all_of(percent_columns), ~as.numeric(gsub("%", "", .x)))) %>%
|
|
71
|
+
rename_with(.fn = function(x) { paste0(x, " (%)") }, .cols = percent_columns) %>%
|
|
72
|
+
mutate(across(-Sample, ~as.numeric(gsub(",", "", .x))))
|
|
73
|
+
|
|
74
|
+
# Save metrics
|
|
75
|
+
write.table(
|
|
76
|
+
metrics,
|
|
77
|
+
file.path(outdir, "metrics.txt"),
|
|
78
|
+
sep = "\t",
|
|
79
|
+
quote = FALSE,
|
|
80
|
+
row.names = FALSE
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
add_report(
|
|
84
|
+
list(kind = "descr", content = "Metrics for all samples"),
|
|
85
|
+
list(kind = "table", src = file.path(outdir, "metrics.txt")),
|
|
86
|
+
h1 = "Metrics of all samples"
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
if (cellranger_type == "vdj") {
|
|
90
|
+
METRIC_DESCR = list(
|
|
91
|
+
`Estimated Number of Cells` = "The number of barcodes estimated to correspond to GEMs containing cells. See VDJ Cell Calling Algorithm.",
|
|
92
|
+
`Mean Read Pairs per Cell` = "Number of input read pairs divided by the estimated number of cells.",
|
|
93
|
+
`Number of Cells With Productive V-J Spanning Pair` = "Number of cell barcodes for which at least one productive sequence was found for each of TRA and TRB (or heavy and light chains, for Ig).",
|
|
94
|
+
`Number of Read Pairs` = "Total number of read pairs that were assigned to this library in demultiplexing.",
|
|
95
|
+
`Valid Barcodes` = "Fraction of reads with barcodes that match the whitelist after barcode correction.",
|
|
96
|
+
`Q30 Bases in Barcode` = "Fraction of cell barcode bases with Q-score greater than or equal to 30.",
|
|
97
|
+
`Q30 Bases in RNA Read 1` = "Fraction of read 1 bases with Q-score greater than or equal to 30. (Likewise for read 2.)",
|
|
98
|
+
`Q30 Bases in Sample Index` = "Fraction of sample index bases with Q-score greater than or equal to 30.",
|
|
99
|
+
`Q30 Bases in UMI` = "Fraction of UMI bases with Q-score ≥ 30.",
|
|
100
|
+
`Reads Mapped to Any V(D)J Gene` = "Fraction of reads that partially or wholly map to a V(D)J gene segment.",
|
|
101
|
+
`Reads Mapped to TRA` = "Fraction of reads that map partially or wholly to a TRA gene segment.",
|
|
102
|
+
`Mean Used Read Pairs per Cell` = "Mean number of read pairs used in assembly per cell barcode. These reads must have a cell barcode, map to a V(D)J gene, and have a UMI with sufficient read support, counted after subsampling.",
|
|
103
|
+
`Fraction Reads in Cells` = "Number of reads with cell barcodes divided by the number of reads with valid barcodes.",
|
|
104
|
+
`Median TRA UMIs per Cell` = "Median number of UMIs assigned to a TRA contig per cell.",
|
|
105
|
+
`Paired Clonotype Diversity` = "Effective diversity of the paired clonotypes, computed as the Inverse Simpson Index of the clonotype frequencies. A value of 1 indicates a minimally diverse sample - only one distinct clonotype was detected. A value equal to the estimated number of cells indicates a maximally diverse sample.",
|
|
106
|
+
`Cells With TRA Contig` = "Fraction of cell barcodes with at least one TRA contig annotated as a full or partial V(D)J gene.",
|
|
107
|
+
`Cells With CDR3-annotated TRA Contig` = "Fraction of cell barcodes with at least one TRA contig where a CDR3 was detected.",
|
|
108
|
+
`Cells With V-J Spanning Contig` = "Fraction of cell barcodes with at least one full-length contig.",
|
|
109
|
+
`Cells With V-J Spanning TRA Contig` = "Fraction of cell barcodes with at least one full-length TRA contig.",
|
|
110
|
+
`Cells With Productive TRA Contig` = "Fraction of cell barcodes with at least one full-length TRA contig that is productive.",
|
|
111
|
+
`Cells With Productive V-J Spanning Pair` = "Fraction of cell barcodes with at least one contig for each chain of the receptor pair that is productive."
|
|
112
|
+
)
|
|
113
|
+
} else {
|
|
114
|
+
METRIC_DESCR = list(
|
|
115
|
+
`Estimated Number of Cells` = "The number of barcodes associated with cell-containing partitions, estimated from the barcode UMI count distribution.",
|
|
116
|
+
`Mean Reads per Cell` = "The total number of reads divided by the estimated number of cells.",
|
|
117
|
+
`Median Genes per Cell` = "Median number of read pairs sequenced from the cells assigned to this sample. In case of multiplexing, only cell-associated barcodes assigned exactly one CMO can be assigned to a sample.",
|
|
118
|
+
`Number of Reads` = "Total number of sequencing reads.",
|
|
119
|
+
`Valid Barcodes` = "Fraction of reads with cell-barcodes that match the whitelist.",
|
|
120
|
+
`Sequencing Saturation` = 'Fraction of reads originating from an already-observed UMI. This is a function of library complexity and sequencing depth. More specifically, this is a ratio where: the denominator is the number of confidently-mapped reads with a valid cell-barcode and valid UMI, and the numerator is the subset of those reads that had a non-unique combination of (cell-barcode, UMI, gene). This metric was called "cDNA PCR Duplication" in versions of Cell Ranger prior to 1.2.',
|
|
121
|
+
`Q30 Bases in Barcode` = "Fraction of bases with Q-score at least 30 in the cell barcode sequences. This is the i7 index (I1) read for the Single Cell 3' v1 chemistry and the R1 read for the Single Cell 3' v2 chemistry.",
|
|
122
|
+
`Q30 Bases in RNA` = "Fraction of bases with Q-score at least 30 in the RNA read sequences. This is Illumina R1 for the Single Cell 3' v1 chemistry and Illumina R2 for the Single Cell 3' v2 chemistry.",
|
|
123
|
+
`Q30 Bases in UMI` = "Fraction of bases with Q-score at least 30 in the UMI sequences. This is the R2 read for the Single Cell 3' v1 chemistry and the R1 read for the Single Cell 3' v2 chemistry.",
|
|
124
|
+
`Reads Mapped to Genome` = "Fraction of reads that mapped to the genome.",
|
|
125
|
+
`Reads Mapped Confidently to Genome` = "Fraction of reads that mapped uniquely to the genome. If a read mapped to exonic loci from a single gene and also to non-exonic loci, it is considered uniquely mapped to one of the exonic loci.",
|
|
126
|
+
`Reads Mapped Confidently to Intergenic Regions` = "Fraction of reads that mapped to the intergenic regions of the genome with a high mapping quality score as reported by the aligner.",
|
|
127
|
+
`Reads Mapped Confidently to Intronic Regions` = "Fraction of reads that mapped to the intronic regions of the genome with a high mapping quality score as reported by the aligner.",
|
|
128
|
+
`Reads Mapped Confidently to Exonic Regions` = "Fraction of reads that mapped to the exonic regions of the genome with a high mapping quality score as reported by the aligner.",
|
|
129
|
+
`Reads Mapped Confidently to Transcriptome` = "Fraction of reads that mapped to a unique gene in the transcriptome with a high mapping quality score as reported by the aligner. The read must be consistent with annotated splice junctions when include-introns=false. These reads are considered for UMI counting.",
|
|
130
|
+
`Reads Confidently Mapped Antisense` = "Fraction of reads confidently mapped to the transcriptome, but on the opposite strand of their annotated gene. A read is counted as antisense if it has any alignments that are consistent with an exon of a transcript but antisense to it, and has no sense alignments.",
|
|
131
|
+
`Total Genes Detected Median UMI Counts per Cell` = "The number of genes with at least one UMI count in any cell."
|
|
132
|
+
)
|
|
133
|
+
}
|
|
134
|
+
log_info("Plotting metrics ...")
|
|
135
|
+
for (metric in colnames(metrics)) {
|
|
136
|
+
if (metric == "Sample") { next }
|
|
137
|
+
metric_name <- sub(" \\(%\\)$", "", metric)
|
|
138
|
+
log_info("- {metric_name}")
|
|
139
|
+
|
|
140
|
+
add_report(
|
|
141
|
+
list(
|
|
142
|
+
kind = "descr",
|
|
143
|
+
content = METRIC_DESCR[[metric_name]] %||% paste0("Metric: ", metric)
|
|
144
|
+
),
|
|
145
|
+
h1 = metric
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
# barplot
|
|
149
|
+
p <- ggplot(metrics, aes(x = Sample, y = !!sym(metric))) +
|
|
150
|
+
geom_bar(stat = "identity", fill = "steelblue") +
|
|
151
|
+
labs(x = "Sample", y = metric) +
|
|
152
|
+
theme(axis.text.x = element_text(angle = 90, hjust = 1))
|
|
153
|
+
|
|
154
|
+
figfile <- file.path(outdir, paste0(slugify(metric), ".barplot.png"))
|
|
155
|
+
png(figfile, height = 600, res = 100, width = nrow(metrics) * 30 + 200)
|
|
156
|
+
print(p)
|
|
157
|
+
dev.off()
|
|
158
|
+
|
|
159
|
+
add_report(
|
|
160
|
+
list(src = figfile, name = "By Sample"),
|
|
161
|
+
ui = "table_of_images",
|
|
162
|
+
h1 = metric
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
if (is.null(group)) { next }
|
|
166
|
+
# boxplot, if group is provided
|
|
167
|
+
# group: Sample, Group
|
|
168
|
+
pdata <- group %>%
|
|
169
|
+
left_join(metrics, by = "Sample") %>%
|
|
170
|
+
mutate(Group = factor(Group, levels = unique(Group)))
|
|
171
|
+
|
|
172
|
+
p <- ggplot(pdata, aes(x = Group, y = !!sym(metric))) +
|
|
173
|
+
geom_boxplot(fill = "steelblue") +
|
|
174
|
+
labs(x = "Group", y = metric) +
|
|
175
|
+
theme(axis.text.x = element_text(angle = 90, hjust = 1))
|
|
176
|
+
|
|
177
|
+
figfile <- file.path(outdir, paste0(slugify(metric), ".boxplot.png"))
|
|
178
|
+
png(figfile, height = 600, res = 100, width = length(unique(pdata$Group)) * 30 + 200)
|
|
179
|
+
print(p)
|
|
180
|
+
dev.off()
|
|
181
|
+
|
|
182
|
+
add_report(
|
|
183
|
+
list(src = figfile, name = "By Group"),
|
|
184
|
+
ui = "table_of_images",
|
|
185
|
+
h1 = metric
|
|
186
|
+
)
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
save_report(joboutdir)
|
|
@@ -8,7 +8,6 @@ library(dplyr)
|
|
|
8
8
|
library(ggplot2)
|
|
9
9
|
library(ggVennDiagram)
|
|
10
10
|
library(UpSetR)
|
|
11
|
-
library(slugify)
|
|
12
11
|
library(circlize)
|
|
13
12
|
library(ComplexHeatmap)
|
|
14
13
|
|
|
@@ -127,8 +126,8 @@ casename_info <- function(casename, create = FALSE) {
|
|
|
127
126
|
casename = casename,
|
|
128
127
|
section = sec_case_names[1],
|
|
129
128
|
case = cname,
|
|
130
|
-
section_slug = slugify(sec_case_names[1]
|
|
131
|
-
case_slug = slugify(cname
|
|
129
|
+
section_slug = slugify(sec_case_names[1]),
|
|
130
|
+
case_slug = slugify(cname)
|
|
132
131
|
)
|
|
133
132
|
out$sec_dir <- file.path(outdir, out$section_slug)
|
|
134
133
|
if (create) {
|
|
@@ -139,7 +138,7 @@ casename_info <- function(casename, create = FALSE) {
|
|
|
139
138
|
|
|
140
139
|
plot_heatmap <- function(group, meta, case, info, cluster_order_val) {
|
|
141
140
|
log_info(paste("- Running heatmap for case:", info$casename, "group:", group))
|
|
142
|
-
hmfile <- file.path(info$sec_dir, paste0(info$case_slug, ".", slugify(group
|
|
141
|
+
hmfile <- file.path(info$sec_dir, paste0(info$case_slug, ".", slugify(group), ".heatmap.png"))
|
|
143
142
|
|
|
144
143
|
# A matrix: 10 × 8 of type int
|
|
145
144
|
# g3 g6 g0 g1 g7 g5 g4 g8
|
|
@@ -435,7 +434,7 @@ do_overlap <- function(section) {
|
|
|
435
434
|
stop(paste0("Not enough cases for overlap for section: ", section))
|
|
436
435
|
}
|
|
437
436
|
|
|
438
|
-
sec_dir <- file.path(outdir, slugify(section
|
|
437
|
+
sec_dir <- file.path(outdir, slugify(section))
|
|
439
438
|
venn_plot <- file.path(sec_dir, "venn.png")
|
|
440
439
|
venn_p <- ggVennDiagram(overlap_cases, label_percent_digit = 1) +
|
|
441
440
|
scale_fill_distiller(palette = "Reds", direction = 1) +
|
|
@@ -14,7 +14,6 @@ library(future)
|
|
|
14
14
|
library(tidyseurat)
|
|
15
15
|
library(ggVennDiagram)
|
|
16
16
|
library(UpSetR)
|
|
17
|
-
library(slugify)
|
|
18
17
|
|
|
19
18
|
log_info("Setting up EnrichR ...")
|
|
20
19
|
setEnrichrSite("Enrichr")
|
|
@@ -205,8 +204,8 @@ casename_info <- function(casename, create = FALSE) {
|
|
|
205
204
|
casename = casename,
|
|
206
205
|
section = sec_case_names[1],
|
|
207
206
|
case = cname,
|
|
208
|
-
section_slug = slugify(sec_case_names[1]
|
|
209
|
-
case_slug = slugify(cname
|
|
207
|
+
section_slug = slugify(sec_case_names[1]),
|
|
208
|
+
case_slug = slugify(cname)
|
|
210
209
|
)
|
|
211
210
|
out$casedir <- file.path(outdir, out$section_slug, out$case_slug)
|
|
212
211
|
if (create) {
|
|
@@ -12,7 +12,6 @@ library(ggplot2)
|
|
|
12
12
|
library(ggprism)
|
|
13
13
|
library(parallel)
|
|
14
14
|
library(tidyseurat)
|
|
15
|
-
library(slugify)
|
|
16
15
|
|
|
17
16
|
setEnrichrSite("Enrichr")
|
|
18
17
|
|
|
@@ -133,8 +132,8 @@ casename_info <- function(casename, create = FALSE) {
|
|
|
133
132
|
casename = casename,
|
|
134
133
|
section = sec_case_names[1],
|
|
135
134
|
case = cname,
|
|
136
|
-
section_slug = slugify(sec_case_names[1]
|
|
137
|
-
case_slug = slugify(cname
|
|
135
|
+
section_slug = slugify(sec_case_names[1]),
|
|
136
|
+
case_slug = slugify(cname)
|
|
138
137
|
)
|
|
139
138
|
out$casedir <- file.path(outdir, out$section_slug, out$case_slug)
|
|
140
139
|
if (create) {
|
|
@@ -283,7 +282,7 @@ do_case <- function(casename) {
|
|
|
283
282
|
# Plot the top 10 genes in each group with violin plots
|
|
284
283
|
geneplots <- list()
|
|
285
284
|
for (gene in markers$gene) {
|
|
286
|
-
outfile <- file.path(plotdir, paste0(slugify(gene
|
|
285
|
+
outfile <- file.path(plotdir, paste0(slugify(gene), ".png"))
|
|
287
286
|
p <- ggplot(df, aes_string(x="GROUP", y=bQuote(gene), fill="GROUP")) +
|
|
288
287
|
geom_violin(alpha = .8) +
|
|
289
288
|
geom_boxplot(width=0.1, fill="white") +
|
|
@@ -7,7 +7,6 @@ library(tidyr)
|
|
|
7
7
|
library(tibble)
|
|
8
8
|
library(ggplot2)
|
|
9
9
|
library(ggradar)
|
|
10
|
-
library(slugify)
|
|
11
10
|
library(ggprism)
|
|
12
11
|
|
|
13
12
|
# input/output
|
|
@@ -143,8 +142,8 @@ casename_info <- function(casename, create = FALSE) {
|
|
|
143
142
|
casename = casename,
|
|
144
143
|
section = sec_case_names[1],
|
|
145
144
|
case = cname,
|
|
146
|
-
section_slug = slugify(sec_case_names[1]
|
|
147
|
-
case_slug = slugify(cname
|
|
145
|
+
section_slug = slugify(sec_case_names[1]),
|
|
146
|
+
case_slug = slugify(cname)
|
|
148
147
|
)
|
|
149
148
|
out$casedir <- file.path(outdir, out$section_slug, out$case_slug)
|
|
150
149
|
if (create) {
|
biopipen/scripts/scrna/ScFGSEA.R
CHANGED
|
@@ -4,7 +4,6 @@ source("{{biopipen_dir}}/utils/mutate_helpers.R")
|
|
|
4
4
|
library(rlang)
|
|
5
5
|
library(Seurat)
|
|
6
6
|
library(tidyseurat)
|
|
7
|
-
library(slugify)
|
|
8
7
|
|
|
9
8
|
srtfile <- {{in.srtobj | r}} # nolint
|
|
10
9
|
outdir <- {{out.outdir | r}} # nolint
|
|
@@ -122,8 +121,8 @@ casename_info <- function(casename, create = FALSE) {
|
|
|
122
121
|
casename = casename,
|
|
123
122
|
section = sec_case_names[1],
|
|
124
123
|
case = cname,
|
|
125
|
-
section_slug = slugify(sec_case_names[1]
|
|
126
|
-
case_slug = slugify(cname
|
|
124
|
+
section_slug = slugify(sec_case_names[1]),
|
|
125
|
+
case_slug = slugify(cname)
|
|
127
126
|
)
|
|
128
127
|
out$casedir <- file.path(outdir, out$section_slug, out$case_slug)
|
|
129
128
|
if (create) {
|
|
@@ -64,7 +64,7 @@ if (is.null(hists) || length(hists) == 0) {
|
|
|
64
64
|
hists[[name]] <- list_update(hists_defaults, hists[[name]])
|
|
65
65
|
case <- hists[[name]]
|
|
66
66
|
|
|
67
|
-
odir <- file.path(outdir, "hists", slugify(name
|
|
67
|
+
odir <- file.path(outdir, "hists", slugify(name))
|
|
68
68
|
dir.create(odir, recursive=TRUE, showWarnings=FALSE)
|
|
69
69
|
|
|
70
70
|
h1 <- name
|
|
@@ -5,7 +5,6 @@ library(future)
|
|
|
5
5
|
library(bracer)
|
|
6
6
|
library(ggplot2)
|
|
7
7
|
library(tidyseurat)
|
|
8
|
-
library(slugify)
|
|
9
8
|
|
|
10
9
|
metafile = {{in.metafile | quote}}
|
|
11
10
|
rdsfile = {{out.rdsfile | quote}}
|
|
@@ -17,13 +16,17 @@ options(future.globals.maxSize = 80000 * 1024^2)
|
|
|
17
16
|
options(Seurat.object.assay.version = "v5")
|
|
18
17
|
plan(strategy = "multicore", workers = envs$ncores)
|
|
19
18
|
|
|
19
|
+
.stringify_list <- function(x) {
|
|
20
|
+
paste(sapply(names(x), function(n) paste(n, x[[n]], sep = " = ") ), collapse = "; ")
|
|
21
|
+
}
|
|
22
|
+
|
|
20
23
|
add_report(
|
|
21
24
|
list(
|
|
22
25
|
kind = "descr",
|
|
23
26
|
name = "Filters applied",
|
|
24
27
|
content = paste0(
|
|
25
28
|
"<p>Cell filters: ", html_escape(envs$cell_qc), "</p>",
|
|
26
|
-
"<p>Gene filters: ", html_escape(envs$gene_qc), "</p>"
|
|
29
|
+
"<p>Gene filters: ", html_escape(.stringify_list(envs$gene_qc)), "</p>"
|
|
27
30
|
)
|
|
28
31
|
),
|
|
29
32
|
h1 = "Filters and QC"
|
|
@@ -177,7 +180,7 @@ for (feat in feats) {
|
|
|
177
180
|
position = position_jitterdodge(jitter.width = 0.4, dodge.width = 0.9)
|
|
178
181
|
) + scale_color_manual(values = c("#181818", pal_biopipen()(1)), breaks = c(TRUE, FALSE))
|
|
179
182
|
|
|
180
|
-
vlnplot = file.path(plotsdir, paste0(slugify(feat
|
|
183
|
+
vlnplot = file.path(plotsdir, paste0(slugify(feat), ".vln.png"))
|
|
181
184
|
png(
|
|
182
185
|
vlnplot,
|
|
183
186
|
width = 800 + length(samples) * 15, height = 600, res = 100
|
|
@@ -221,7 +224,7 @@ for (feat in setdiff(feats, "nCount_RNA")) {
|
|
|
221
224
|
NoLegend() +
|
|
222
225
|
scale_color_manual(values = c("#181818", pal_biopipen()(1)), breaks = c(TRUE, FALSE))
|
|
223
226
|
|
|
224
|
-
scatfile = file.path(plotsdir, paste0(slugify(feat
|
|
227
|
+
scatfile = file.path(plotsdir, paste0(slugify(feat), "-nCount_RNA.scatter.png"))
|
|
225
228
|
png(scatfile, width = 800, height = 600, res = 100)
|
|
226
229
|
print(scat_p)
|
|
227
230
|
dev.off()
|
|
@@ -302,7 +305,7 @@ if (envs$use_sct) {
|
|
|
302
305
|
log_info("- Running SCTransform ...")
|
|
303
306
|
SCTransformArgs <- envs$SCTransform
|
|
304
307
|
# log to stdout but don't populate it to running log
|
|
305
|
-
print(" SCTransform:
|
|
308
|
+
print(paste0(" SCTransform: ", .formatArgs(SCTransformArgs)))
|
|
306
309
|
log_debug(" SCTransform: {.formatArgs(SCTransformArgs)}")
|
|
307
310
|
SCTransformArgs$object <- sobj
|
|
308
311
|
sobj <- do_call(SCTransform, SCTransformArgs)
|
|
@@ -310,21 +313,21 @@ if (envs$use_sct) {
|
|
|
310
313
|
} else {
|
|
311
314
|
log_info("- Running NormalizeData ...")
|
|
312
315
|
NormalizeDataArgs <- envs$NormalizeData
|
|
313
|
-
print(" NormalizeData:
|
|
316
|
+
print(paste0(" NormalizeData: ", .formatArgs(NormalizeDataArgs)))
|
|
314
317
|
log_debug(" NormalizeData: {.formatArgs(NormalizeDataArgs)}")
|
|
315
318
|
NormalizeDataArgs$object <- sobj
|
|
316
319
|
sobj <- do_call(NormalizeData, NormalizeDataArgs)
|
|
317
320
|
|
|
318
321
|
log_info("- Running FindVariableFeatures ...")
|
|
319
322
|
FindVariableFeaturesArgs <- envs$FindVariableFeatures
|
|
320
|
-
print(" FindVariableFeatures:
|
|
323
|
+
print(paste0(" FindVariableFeatures: ", .formatArgs(FindVariableFeaturesArgs)))
|
|
321
324
|
log_debug(" FindVariableFeatures: {.formatArgs(FindVariableFeaturesArgs)}")
|
|
322
325
|
FindVariableFeaturesArgs$object <- sobj
|
|
323
326
|
sobj <- do_call(FindVariableFeatures, FindVariableFeaturesArgs)
|
|
324
327
|
|
|
325
328
|
log_info("- Running ScaleData ...")
|
|
326
329
|
ScaleDataArgs <- envs$ScaleData
|
|
327
|
-
print(" ScaleData:
|
|
330
|
+
print(paste0(" ScaleData: ", .formatArgs(ScaleDataArgs)))
|
|
328
331
|
log_debug(" ScaleData: {.formatArgs(ScaleDataArgs)}")
|
|
329
332
|
ScaleDataArgs$object <- sobj
|
|
330
333
|
sobj <- do_call(ScaleData, ScaleDataArgs)
|
|
@@ -333,7 +336,7 @@ if (envs$use_sct) {
|
|
|
333
336
|
log_info("- Running RunPCA ...")
|
|
334
337
|
RunPCAArgs <- envs$RunPCA
|
|
335
338
|
RunPCAArgs$npcs <- if (is.null(RunPCAArgs$npcs)) { 50 } else { min(RunPCAArgs$npcs, ncol(sobj) - 1) }
|
|
336
|
-
print(" RunPCA:
|
|
339
|
+
print(paste0(" RunPCA: ", .formatArgs(RunPCAArgs)))
|
|
337
340
|
log_debug(" RunPCA: {.formatArgs(RunPCAArgs)}")
|
|
338
341
|
RunPCAArgs$object <- sobj
|
|
339
342
|
sobj <- do_call(RunPCA, RunPCAArgs)
|
|
@@ -367,7 +370,7 @@ if (!envs$no_integration) {
|
|
|
367
370
|
if (is.null(IntegrateLayersArgs$new.reduction)) {
|
|
368
371
|
IntegrateLayersArgs$new.reduction <- new_reductions[[method]]
|
|
369
372
|
}
|
|
370
|
-
print(" IntegrateLayers:
|
|
373
|
+
print(paste0(" IntegrateLayers: ", .formatArgs(IntegrateLayersArgs)))
|
|
371
374
|
log_debug(" IntegrateLayers: {.formatArgs(IntegrateLayersArgs)}")
|
|
372
375
|
IntegrateLayersArgs$object <- sobj
|
|
373
376
|
sobj <- do_call(IntegrateLayers, IntegrateLayersArgs)
|
|
@@ -5,7 +5,6 @@ library(tibble)
|
|
|
5
5
|
library(enrichR)
|
|
6
6
|
library(rlang)
|
|
7
7
|
library(dplyr)
|
|
8
|
-
library(slugify)
|
|
9
8
|
library(ggprism)
|
|
10
9
|
|
|
11
10
|
setEnrichrSite("Enrichr")
|
|
@@ -134,8 +133,8 @@ casename_info <- function(casename, create = FALSE) {
|
|
|
134
133
|
casename = casename,
|
|
135
134
|
section = sec_case_names[1],
|
|
136
135
|
case = cname,
|
|
137
|
-
section_slug = slugify(sec_case_names[1]
|
|
138
|
-
case_slug = slugify(cname
|
|
136
|
+
section_slug = slugify(sec_case_names[1]),
|
|
137
|
+
case_slug = slugify(cname)
|
|
139
138
|
)
|
|
140
139
|
out$casedir <- file.path(outdir, out$section_slug, out$case_slug)
|
|
141
140
|
if (create) {
|
|
@@ -3,7 +3,6 @@ source("{{biopipen_dir}}/utils/gsea.R")
|
|
|
3
3
|
|
|
4
4
|
library(parallel)
|
|
5
5
|
library(Seurat)
|
|
6
|
-
library(slugify)
|
|
7
6
|
|
|
8
7
|
sobjfile <- {{ in.sobjfile | r }}
|
|
9
8
|
outdir <- {{ out.outdir | r }}
|
|
@@ -44,7 +43,7 @@ sobj <- readRDS(sobjfile)
|
|
|
44
43
|
do_one_group <- function(obj, features, group, outputdir, h1) {
|
|
45
44
|
log_info(paste("- Processing group", grouping, ":", group))
|
|
46
45
|
groupname = paste0(grouping_prefix, group)
|
|
47
|
-
odir = file.path(outputdir, slugify(groupname
|
|
46
|
+
odir = file.path(outputdir, slugify(groupname))
|
|
48
47
|
dir.create(odir, showWarnings = FALSE)
|
|
49
48
|
|
|
50
49
|
classes = as.character(obj@meta.data[[grouping]])
|
|
@@ -109,7 +108,7 @@ do_one_subset <- function(s, subset_col, subset_prefix) {
|
|
|
109
108
|
outputdir <- file.path(outdir, "ALL")
|
|
110
109
|
subset_obj <- sobj
|
|
111
110
|
} else {
|
|
112
|
-
outputdir <- file.path(outdir, slugify(paste0(subset_prefix, s)
|
|
111
|
+
outputdir <- file.path(outdir, slugify(paste0(subset_prefix, s)))
|
|
113
112
|
subset_code <- paste0("subset(sobj, subset = ", subset_col, "=='", s, "')")
|
|
114
113
|
subset_obj <- eval(parse(text = subset_code))
|
|
115
114
|
}
|
|
@@ -4,7 +4,6 @@ source("{{biopipen_dir}}/utils/gsea.R")
|
|
|
4
4
|
library(parallel)
|
|
5
5
|
library(scater)
|
|
6
6
|
library(Seurat)
|
|
7
|
-
library(slugify)
|
|
8
7
|
|
|
9
8
|
sobjfile <- {{ in.sobjfile | r }}
|
|
10
9
|
outdir <- {{ out.outdir | r }}
|
|
@@ -139,7 +138,7 @@ do_one_group <- function(group) {
|
|
|
139
138
|
)
|
|
140
139
|
obj = eval(parse(text = group_code))
|
|
141
140
|
groupname = paste0(grouping_prefix, group)
|
|
142
|
-
groupdir = file.path(outdir, slugify(groupname
|
|
141
|
+
groupdir = file.path(outdir, slugify(groupname))
|
|
143
142
|
dir.create(groupdir, showWarnings = FALSE)
|
|
144
143
|
|
|
145
144
|
report = list()
|
|
@@ -8,7 +8,6 @@ library(ggprism)
|
|
|
8
8
|
library(Matrix)
|
|
9
9
|
library(sparseMatrixStats)
|
|
10
10
|
library(Seurat)
|
|
11
|
-
library(slugify)
|
|
12
11
|
|
|
13
12
|
sobjfile <- {{ in.sobjfile | r }}
|
|
14
13
|
outdir <- {{ out.outdir | r }}
|
|
@@ -53,7 +52,7 @@ do_one_subset <- function(s, subset_col, subset_prefix) {
|
|
|
53
52
|
subset_dir = file.path(outdir, "ALL")
|
|
54
53
|
subset_obj = sobj
|
|
55
54
|
} else {
|
|
56
|
-
subset_dir = file.path(outdir, slugify(paste0(subset_prefix, s)
|
|
55
|
+
subset_dir = file.path(outdir, slugify(paste0(subset_prefix, s)))
|
|
57
56
|
subset_code = paste0("subset(sobj, subset = ", subset_col, " == '", s, "')")
|
|
58
57
|
subset_obj = eval(parse(text = subset_code))
|
|
59
58
|
}
|
|
@@ -10,7 +10,6 @@ library(ggplot2)
|
|
|
10
10
|
library(ggprism)
|
|
11
11
|
library(ggVennDiagram)
|
|
12
12
|
library(UpSetR)
|
|
13
|
-
library(slugify)
|
|
14
13
|
|
|
15
14
|
theme_set(theme_prism())
|
|
16
15
|
|
|
@@ -163,19 +162,19 @@ perpare_case <- function(casename, case) {
|
|
|
163
162
|
|
|
164
163
|
# Create case-specific directories
|
|
165
164
|
# Scatter plots
|
|
166
|
-
scatter_dir <- file.path(outdir, slugify(casename
|
|
165
|
+
scatter_dir <- file.path(outdir, slugify(casename), "scatter")
|
|
167
166
|
dir.create(scatter_dir, recursive = TRUE, showWarnings = FALSE)
|
|
168
167
|
|
|
169
168
|
# Venn diagrams
|
|
170
|
-
venn_dir <- file.path(outdir, slugify(casename
|
|
169
|
+
venn_dir <- file.path(outdir, slugify(casename), "venn")
|
|
171
170
|
dir.create(venn_dir, recursive = TRUE, showWarnings = FALSE)
|
|
172
171
|
|
|
173
172
|
# Upset plots
|
|
174
|
-
upset_dir <- file.path(outdir, slugify(casename
|
|
173
|
+
upset_dir <- file.path(outdir, slugify(casename), "upset")
|
|
175
174
|
dir.create(upset_dir, recursive = TRUE, showWarnings = FALSE)
|
|
176
175
|
|
|
177
176
|
# Counts
|
|
178
|
-
counts_dir <- file.path(outdir, slugify(casename
|
|
177
|
+
counts_dir <- file.path(outdir, slugify(casename), "counts")
|
|
179
178
|
dir.create(counts_dir, recursive = TRUE, showWarnings = FALSE)
|
|
180
179
|
|
|
181
180
|
case
|
|
@@ -396,7 +395,7 @@ headings <- function(section, casename, subject) {
|
|
|
396
395
|
}
|
|
397
396
|
|
|
398
397
|
handle_subject <- function(i, subjects, casename, case) {
|
|
399
|
-
casedir = file.path(outdir, slugify(casename
|
|
398
|
+
casedir = file.path(outdir, slugify(casename))
|
|
400
399
|
# Generate a residency table
|
|
401
400
|
# | CDR3.aa | Tumor | Normal |
|
|
402
401
|
# | SEABESRWEFAEF | 0 | 10 |
|
|
@@ -657,9 +657,9 @@ run_div_case = function(casename) {
|
|
|
657
657
|
log_info("Processing case: {casename} ...")
|
|
658
658
|
case = div_cases[[casename]]
|
|
659
659
|
if (case$method == "raref") {
|
|
660
|
-
ddir = file.path(outdir, "rarefraction", slugify(casename
|
|
660
|
+
ddir = file.path(outdir, "rarefraction", slugify(casename))
|
|
661
661
|
} else {
|
|
662
|
-
ddir = file.path(div_dir, slugify(casename
|
|
662
|
+
ddir = file.path(div_dir, slugify(casename))
|
|
663
663
|
}
|
|
664
664
|
dir.create(ddir, recursive = TRUE, showWarnings = FALSE)
|
|
665
665
|
|
|
@@ -87,7 +87,7 @@ for (name in names(cases)) {
|
|
|
87
87
|
do_one_case_kmer = function(name, case, kmer_dir) {
|
|
88
88
|
# print(paste0(" Case: ", name))
|
|
89
89
|
log_info("Processing case: {name} ...")
|
|
90
|
-
odir = file.path(kmer_dir, slugify(name
|
|
90
|
+
odir = file.path(kmer_dir, slugify(name))
|
|
91
91
|
dir.create(odir, showWarnings = FALSE)
|
|
92
92
|
|
|
93
93
|
if (!is.null(case$subset)) {
|
|
@@ -44,7 +44,7 @@ if (is.null(spects$cases) || length(spects$cases) == 0) {
|
|
|
44
44
|
do_one_case_spectratyping = function(name, case, spect_dir) {
|
|
45
45
|
# print(paste0(" Case: ", name))
|
|
46
46
|
log_info("- Processing case: {name} ...")
|
|
47
|
-
odir = file.path(spect_dir, slugify(name
|
|
47
|
+
odir = file.path(spect_dir, slugify(name))
|
|
48
48
|
dir.create(odir, showWarnings = FALSE)
|
|
49
49
|
|
|
50
50
|
if (!is.null(case$subset)) {
|
|
@@ -61,7 +61,7 @@ do_one_case_spectratyping = function(name, case, spect_dir) {
|
|
|
61
61
|
.quant = case$quant,
|
|
62
62
|
.col = case$col
|
|
63
63
|
)
|
|
64
|
-
spectfile = file.path(odir, paste0(slugify(sample
|
|
64
|
+
spectfile = file.path(odir, paste0(slugify(sample), ".spect.png"))
|
|
65
65
|
png(
|
|
66
66
|
spectfile,
|
|
67
67
|
res = case$devpars$res,
|
|
@@ -47,7 +47,7 @@ dir.create(vjjunc_dir, showWarnings = FALSE)
|
|
|
47
47
|
|
|
48
48
|
do_one_case_vjjunc <- function(name, case) {
|
|
49
49
|
log_info("Processing case: {name} ...")
|
|
50
|
-
odir = file.path(vjjunc_dir, slugify(name
|
|
50
|
+
odir = file.path(vjjunc_dir, slugify(name))
|
|
51
51
|
dir.create(odir, showWarnings = FALSE)
|
|
52
52
|
|
|
53
53
|
if (!is.null(case$subset)) {
|
biopipen/scripts/tcr/Immunarch.R
CHANGED
|
@@ -6,7 +6,6 @@ library(dplyr)
|
|
|
6
6
|
library(rlang)
|
|
7
7
|
library(immunarch)
|
|
8
8
|
library(ggprism)
|
|
9
|
-
library(slugify)
|
|
10
9
|
|
|
11
10
|
immfile = {{in.immfile | quote}}
|
|
12
11
|
outdir = {{out.outdir | quote}}
|
|
@@ -56,7 +55,7 @@ sample_diversity_cases = expand_cases(sample_diversity_envs)
|
|
|
56
55
|
cluster_size_distribution = function(name) {
|
|
57
56
|
log_info("- Working on cluster size distribution: {name}")
|
|
58
57
|
|
|
59
|
-
odir = file.path(outdir, "ClusterSizeDistribution", slugify(name
|
|
58
|
+
odir = file.path(outdir, "ClusterSizeDistribution", slugify(name))
|
|
60
59
|
dir.create(odir, showWarnings = FALSE, recursive = TRUE)
|
|
61
60
|
case = cluster_size_cases[[name]]
|
|
62
61
|
|
|
@@ -100,7 +99,7 @@ cluster_size_distribution = function(name) {
|
|
|
100
99
|
shared_clusters = function(name) {
|
|
101
100
|
log_info("- Working on shared clusters: {name}")
|
|
102
101
|
|
|
103
|
-
odir = file.path(outdir, "SharedClusters", slugify(name
|
|
102
|
+
odir = file.path(outdir, "SharedClusters", slugify(name))
|
|
104
103
|
dir.create(odir, showWarnings = FALSE, recursive = TRUE)
|
|
105
104
|
case = shared_clusters_cases[[name]]
|
|
106
105
|
if (!is.null(case$grouping)) {
|
|
@@ -169,7 +168,7 @@ shared_clusters = function(name) {
|
|
|
169
168
|
}
|
|
170
169
|
|
|
171
170
|
shared_clusters_by_grouping = function(name) {
|
|
172
|
-
odir = file.path(outdir, "SharedClusters", slugify(name
|
|
171
|
+
odir = file.path(outdir, "SharedClusters", slugify(name))
|
|
173
172
|
case = shared_clusters_cases[[name]]
|
|
174
173
|
|
|
175
174
|
data = list()
|
|
@@ -241,7 +240,7 @@ div_methods = list(
|
|
|
241
240
|
sample_diversity = function(name) {
|
|
242
241
|
log_info("- Working on sample diversity: {name}")
|
|
243
242
|
|
|
244
|
-
odir = file.path(outdir, "SampleDiversity", slugify(name
|
|
243
|
+
odir = file.path(outdir, "SampleDiversity", slugify(name))
|
|
245
244
|
dir.create(odir, showWarnings = FALSE, recursive = TRUE)
|
|
246
245
|
case = sample_diversity_cases[[name]]
|
|
247
246
|
|
biopipen/utils/gsea.R
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
library(ggplot2)
|
|
2
2
|
library(dplyr)
|
|
3
3
|
library(tibble)
|
|
4
|
-
library(slugify)
|
|
5
4
|
|
|
5
|
+
.slugify <- function(x, non_alphanum_replace="-", collapse_replace=TRUE, tolower=FALSE) {
|
|
6
|
+
x <- gsub("[^[:alnum:]_]", non_alphanum_replace, x)
|
|
7
|
+
if(collapse_replace) x <- gsub(paste0(non_alphanum_replace, "+"), non_alphanum_replace, x)
|
|
8
|
+
if(tolower) x <- tolower(x)
|
|
9
|
+
x
|
|
10
|
+
}
|
|
6
11
|
|
|
7
12
|
localizeGmtfile <- function(gmturl, cachedir = tempdir()) {
|
|
8
13
|
# Download the GMT file and save it to cachedir
|
|
@@ -176,7 +181,7 @@ runFGSEA = function(
|
|
|
176
181
|
dev.off()
|
|
177
182
|
|
|
178
183
|
for (pathway in topPathways) {
|
|
179
|
-
enrfig = file.path(outdir, paste0("fgsea_", slugify(pathway), ".png"))
|
|
184
|
+
enrfig = file.path(outdir, paste0("fgsea_", .slugify(pathway), ".png"))
|
|
180
185
|
png(enrfig, res=100, width=1000, height=800)
|
|
181
186
|
print(plotEnrichment(
|
|
182
187
|
envs$pathways[[pathway]],
|
biopipen/utils/misc.R
CHANGED
|
@@ -22,14 +22,17 @@ bQuote <- function(x) {
|
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
25
|
+
#' Slugify a string
|
|
26
|
+
#' @param x A string
|
|
27
|
+
#' @param non_alphanum_replace Replace non-alphanumeric characters
|
|
28
|
+
#' @param collapse_replace Collapse consecutive non-alphanumeric character replacements
|
|
29
|
+
#' @param tolower Convert to lowercase
|
|
30
|
+
#' @return A slugified string
|
|
31
|
+
slugify <- function(x, non_alphanum_replace="-", collapse_replace=TRUE, tolower=FALSE) {
|
|
32
|
+
x <- gsub("[^[:alnum:]_]", non_alphanum_replace, x)
|
|
33
|
+
if(collapse_replace) x <- gsub(paste0(non_alphanum_replace, "+"), non_alphanum_replace, x)
|
|
34
|
+
if(tolower) x <- tolower(x)
|
|
35
|
+
x
|
|
33
36
|
}
|
|
34
37
|
|
|
35
38
|
do_call <- function (what, args, quote = FALSE, envir = parent.frame()) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
biopipen/__init__.py,sha256=
|
|
1
|
+
biopipen/__init__.py,sha256=UBF3OYTcBAovta3ux5ybxb0MZYAGpGO79WH_ax2NGeI,23
|
|
2
2
|
biopipen/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
3
|
biopipen/core/config.py,sha256=edK5xnDhM8j27srDzsxubi934NMrglLoKrdcC8qsEPk,1069
|
|
4
4
|
biopipen/core/config.toml,sha256=Rn7Cta7WsMtmQkKGC4h9d5dU_STaIVBgR8UliiGgL6o,1757
|
|
@@ -10,7 +10,8 @@ biopipen/ns/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
10
10
|
biopipen/ns/bam.py,sha256=5AsYrB0mtr_mH6mCL6gjJ5rC4NywpjFkpFjUrBGp7Fk,9301
|
|
11
11
|
biopipen/ns/bcftools.py,sha256=puCDfIL-1z6cz2y1Rlz-ESNIr8xJgeIjEQ440qicCvM,3467
|
|
12
12
|
biopipen/ns/bed.py,sha256=UN38qUChDeE-ipuSBY8RVLwvJqM2wxSRmlhOiDo4JG0,5395
|
|
13
|
-
biopipen/ns/cellranger.py,sha256=
|
|
13
|
+
biopipen/ns/cellranger.py,sha256=2FwE8YNsGEXn-vS0AmO7m5xmlTgNQjL1lhWUeJ6XNJA,4796
|
|
14
|
+
biopipen/ns/cellranger_pipeline.py,sha256=D6gvIeasHjDCdro7f4wjomxRYTtsJT77Ld47XzlU3Fw,2891
|
|
14
15
|
biopipen/ns/cnv.py,sha256=vq6dZfEOyuVuqg3nP6FQtNmQ-JocpBJMX9IYlZ0OPD0,6803
|
|
15
16
|
biopipen/ns/cnvkit.py,sha256=5mA2Q8-YDs4g1HoxtpB_NWnyZYwEThNr3s3wlubLQrQ,31130
|
|
16
17
|
biopipen/ns/cnvkit_pipeline.py,sha256=2fJLn70L2jJ81ZMNdnU84Sf3HoKA2CSnHuDzLGR8jmw,36854
|
|
@@ -29,8 +30,9 @@ biopipen/ns/web.py,sha256=3zucrDo-IVsSnIvlw-deoScuxqWa6OMTm8Vo-R4E44Q,2224
|
|
|
29
30
|
biopipen/reports/bam/CNAClinic.svelte,sha256=D4IxQcgDCPQZMbXog-aZP5iJEQTK2N4i0C60e_iXyfs,213
|
|
30
31
|
biopipen/reports/bam/CNVpytor.svelte,sha256=s03SlhbEPd8-_44Dy_cqE8FSErhUdqStLK39te5o7ZE,1364
|
|
31
32
|
biopipen/reports/bam/ControlFREEC.svelte,sha256=OwN96RW0dN-gtQ1zWKbXYZCYkkrOC0RQmP3UG4x7zqU,837
|
|
32
|
-
biopipen/reports/cellranger/CellRangerCount.svelte,sha256=
|
|
33
|
-
biopipen/reports/cellranger/
|
|
33
|
+
biopipen/reports/cellranger/CellRangerCount.svelte,sha256=InkkGold9Vta8vSPeE7WgFuFWuMVBkQvwc2yxWFGVM4,466
|
|
34
|
+
biopipen/reports/cellranger/CellRangerSummary.svelte,sha256=WEYPwmcmgtSqpFpTvNPV40yZR-7ERa5LgZni2RXxUZQ,348
|
|
35
|
+
biopipen/reports/cellranger/CellRangerVdj.svelte,sha256=InkkGold9Vta8vSPeE7WgFuFWuMVBkQvwc2yxWFGVM4,466
|
|
34
36
|
biopipen/reports/cnv/AneuploidyScore.svelte,sha256=x0LbhqjauZpqMzmzDWmYgx-rEh5Tzo8qBrXcLcM0h78,1020
|
|
35
37
|
biopipen/reports/cnv/AneuploidyScoreSummary.svelte,sha256=AWlns70mChJGhH3z8r5uXuI4tc7VbVN_cOUdqBr3ZKg,4414
|
|
36
38
|
biopipen/reports/cnv/TMADScoreSummary.svelte,sha256=tJutaMOqeXxKroAosOIqOJVyhTTFet-soMwuOYVHTYU,2060
|
|
@@ -78,6 +80,7 @@ biopipen/scripts/bed/BedConsensus.py,sha256=gfAxuIalvCEpS0tiOyAJGPYGgHN0L-hm0K37
|
|
|
78
80
|
biopipen/scripts/bed/BedLiftOver.sh,sha256=Y4gBsz9w4zhE29UmWojO6F4PXMMMWC1uCzjrxa19eOs,256
|
|
79
81
|
biopipen/scripts/bed/BedtoolsMerge.py,sha256=TjKO5MpUzDj931bQAWku2660MVSiZzdMHt_v2Xbt0IE,355
|
|
80
82
|
biopipen/scripts/cellranger/CellRangerCount.py,sha256=ZDcry8suLhulXiTsl01LGKmSJkewJ-TgHazLtfsBr6U,2516
|
|
83
|
+
biopipen/scripts/cellranger/CellRangerSummary.R,sha256=8EqP4j074RLi5Adw47xyqQwkDEcvSS6Yfk0UgKKYOuo,11045
|
|
81
84
|
biopipen/scripts/cellranger/CellRangerVdj.py,sha256=-QbhPKqFBZ15Es6NJaU7Lwf1KQW_3Lyv0aISh-Urk2M,2504
|
|
82
85
|
biopipen/scripts/cnv/AneuploidyScore.R,sha256=liAN8u8_lj8voJ01oBW9Dw09yi388KF5f_gwPOv0wdE,8437
|
|
83
86
|
biopipen/scripts/cnv/AneuploidyScoreSummary.R,sha256=9Zni5zqYfzevs5XSAt3fqD9WZ_RWr_ByUnXReKLLWoY,12337
|
|
@@ -113,47 +116,47 @@ biopipen/scripts/scrna/CellTypeAnnotation-hitype.R,sha256=6_DBAlLKcHqaMyWGZWvTd4
|
|
|
113
116
|
biopipen/scripts/scrna/CellTypeAnnotation-sccatch.R,sha256=1ejye0hs-EOwzzdP9gFWSLPcF6dOAA6VmNKXEjmS11E,1654
|
|
114
117
|
biopipen/scripts/scrna/CellTypeAnnotation-sctype.R,sha256=1nKRtzhVoJ9y0yMg1sgI6u7czsrk2cN0FvNUCZo8l-o,3878
|
|
115
118
|
biopipen/scripts/scrna/CellTypeAnnotation.R,sha256=6Le1SvZcKI8D0SLkFZ5SibGsW9ZWqirnBl3Q1BNZOuU,513
|
|
116
|
-
biopipen/scripts/scrna/CellsDistribution.R,sha256=
|
|
119
|
+
biopipen/scripts/scrna/CellsDistribution.R,sha256=r9XJwA-VZ2JP8TZEe4OS8Ah1b06yd58HrfAyPi4Be1M,16562
|
|
117
120
|
biopipen/scripts/scrna/DimPlots.R,sha256=-mXOTMnpPxvR30XLjwcohFfFx7xTqWKKiICwJiD6yEo,1554
|
|
118
121
|
biopipen/scripts/scrna/ExprImpution-alra.R,sha256=w3W1txJcdWg52-SETY2Z0lO7maDNfiMjBYIGN587YW0,843
|
|
119
122
|
biopipen/scripts/scrna/ExprImpution-rmagic.R,sha256=jYIfqZpnvjKJkvItLnemPVtUApHBYQi1_L8rHVbEe1M,735
|
|
120
123
|
biopipen/scripts/scrna/ExprImpution-scimpute.R,sha256=mg40qCUW7-nP5oHPvARq7dmtoahM0GRFWXQpum0BXVk,1082
|
|
121
124
|
biopipen/scripts/scrna/ExprImpution.R,sha256=7768ezrr59xUZDXq8lO9jj2XhnkSsx-xxBmOD9_DO7c,313
|
|
122
|
-
biopipen/scripts/scrna/MarkersFinder.R,sha256=
|
|
123
|
-
biopipen/scripts/scrna/MetaMarkers.R,sha256=
|
|
125
|
+
biopipen/scripts/scrna/MarkersFinder.R,sha256=82XTp_8o4nBQ7yklqI5NoYW_4StLIdBj60M-AqhZnw4,26294
|
|
126
|
+
biopipen/scripts/scrna/MetaMarkers.R,sha256=CyKRW81WFMv00W5mHbloaYrsq7B1niAFFtypf9Meezo,12411
|
|
124
127
|
biopipen/scripts/scrna/ModuleScoreCalculator.R,sha256=JSHd-_-KiFqW8avCGxgU4T-C5BtDr2u0kwIvEu2lFIg,4188
|
|
125
|
-
biopipen/scripts/scrna/RadarPlots.R,sha256=
|
|
128
|
+
biopipen/scripts/scrna/RadarPlots.R,sha256=0A4rX0ngx3S0TDx-HMgLNIa6w5551vPvpTQZuZSb7J0,14757
|
|
126
129
|
biopipen/scripts/scrna/SCImpute.R,sha256=dSJOHhmJ3x_72LBRXT72dbCti5oiB85CJ-OjWtqONbk,2958
|
|
127
|
-
biopipen/scripts/scrna/ScFGSEA.R,sha256=
|
|
130
|
+
biopipen/scripts/scrna/ScFGSEA.R,sha256=POyFFDmtDteVw0wN3ADkh85JhQvMPw3diW_Dg9NXMVM,7487
|
|
128
131
|
biopipen/scripts/scrna/SeuratClusterStats-dimplots.R,sha256=pZKv1SnSNEGXDeE0_2VYp0GAikYitohW2FR5YGKjs8Q,2351
|
|
129
132
|
biopipen/scripts/scrna/SeuratClusterStats-features.R,sha256=SaKTJloP1fttRXZQeb2ApX0ej7al13wOoEYkthSk13k,15489
|
|
130
|
-
biopipen/scripts/scrna/SeuratClusterStats-hists.R,sha256=
|
|
133
|
+
biopipen/scripts/scrna/SeuratClusterStats-hists.R,sha256=YhuD-GePjJPSkR0iLRgV_hiGHD_bnOIKp-LB6GCwquo,5037
|
|
131
134
|
biopipen/scripts/scrna/SeuratClusterStats-ngenes.R,sha256=GVKIXFNS_syCuSN8oxoBkjxxAeI5LdSxh-qLVkUsbDA,2146
|
|
132
135
|
biopipen/scripts/scrna/SeuratClusterStats-stats.R,sha256=CE9989SaO75_KYEEVqivEbUoTcUOtiTkRGWLNtWzxI8,6450
|
|
133
|
-
biopipen/scripts/scrna/SeuratClusterStats.R,sha256=
|
|
136
|
+
biopipen/scripts/scrna/SeuratClusterStats.R,sha256=ouWoj7Q644uG3MUlT23AES8f74g38-jPtPhINSvoUas,1267
|
|
134
137
|
biopipen/scripts/scrna/SeuratClustering.R,sha256=kAvQq3RV86_KSv9NlUtUeQrPKkbhSsnv6Q4DoiTu8M0,6403
|
|
135
138
|
biopipen/scripts/scrna/SeuratFilter.R,sha256=BrYK0MLdaTtQvInMaQsmOt7oH_hlks0M1zykkJtg2lM,509
|
|
136
139
|
biopipen/scripts/scrna/SeuratLoading.R,sha256=ekWKnHIqtQb3kHVQiVymAHXXqiUxs6KKefjZKjaykmk,900
|
|
137
140
|
biopipen/scripts/scrna/SeuratMap2Ref.R,sha256=tisYmoSaCX8Kl8y6euuuUroWdDsJ2NGI27J5AWr9Niw,4392
|
|
138
141
|
biopipen/scripts/scrna/SeuratMetadataMutater.R,sha256=Pp4GsF3hZ6ZC2vroC3LSBmVa4B1p2L3hbh981yaAIeQ,1093
|
|
139
|
-
biopipen/scripts/scrna/SeuratPreparing.R,sha256=
|
|
142
|
+
biopipen/scripts/scrna/SeuratPreparing.R,sha256=cgXWon2it6g4y-yrYk_zhivViOX8ZVf36u3wb9lKtj0,13133
|
|
140
143
|
biopipen/scripts/scrna/SeuratSplit.R,sha256=vdK11V39_Uo_NaOh76QWCtxObGaEr5Ynxqq0hTiSvsU,754
|
|
141
144
|
biopipen/scripts/scrna/SeuratSubClustering.R,sha256=L1SwKhNNKvsQGrcj0ZjScW9BLuvdO2pg7U48Ospsot8,6096
|
|
142
145
|
biopipen/scripts/scrna/SeuratSubset.R,sha256=yVA11NVE2FSSw-DhxQcJRapns0tNNHdyDYi5epO6SKM,1776
|
|
143
146
|
biopipen/scripts/scrna/SeuratTo10X.R,sha256=T2nJBTwOe12AIKC2FZsMSv6xx3s-67CYZokpz5wshqY,2679
|
|
144
|
-
biopipen/scripts/scrna/TopExpressingGenes.R,sha256=
|
|
147
|
+
biopipen/scripts/scrna/TopExpressingGenes.R,sha256=J6tM54HStWkguUwFoIHRo_EAtCUKOuCBEfInzRfDYMQ,7703
|
|
145
148
|
biopipen/scripts/scrna/Write10X.R,sha256=OMhXvJwvaH-aWsMpijKrvXQVabc1qUu5ZEwiLAhkDeY,285
|
|
146
149
|
biopipen/scripts/scrna/sctype.R,sha256=NaUJkABwF5G1UVm1CCtcMbwLSj94Mo24mbYCKFqo1Bw,6524
|
|
147
|
-
biopipen/scripts/scrna_metabolic_landscape/MetabolicFeatures.R,sha256=
|
|
148
|
-
biopipen/scripts/scrna_metabolic_landscape/MetabolicFeaturesIntraSubset.R,sha256=
|
|
150
|
+
biopipen/scripts/scrna_metabolic_landscape/MetabolicFeatures.R,sha256=b77yG5FeRse3bNfFgLIEYGHNZzydAn1OeyyR_n5Ju60,4790
|
|
151
|
+
biopipen/scripts/scrna_metabolic_landscape/MetabolicFeaturesIntraSubset.R,sha256=ic8Fy8QqYDGh_izmvZVJ3KL66podg_CSF5ITL3FZsvo,5196
|
|
149
152
|
biopipen/scripts/scrna_metabolic_landscape/MetabolicPathwayActivity.R,sha256=95DLX1Rz0tobOuDZ8V9YdGgO0KiNthhccoeeOK21tno,16216
|
|
150
|
-
biopipen/scripts/scrna_metabolic_landscape/MetabolicPathwayHeterogeneity.R,sha256=
|
|
153
|
+
biopipen/scripts/scrna_metabolic_landscape/MetabolicPathwayHeterogeneity.R,sha256=EpV4Wqj1dLqtaJyIJo6dN6vxeRH6elLibbHpK_N37bE,9822
|
|
151
154
|
biopipen/scripts/tcgamaf/Maf2Vcf.py,sha256=Cxh7fiSNCxWDTfIJqZDOOnaSrw-85S_fH2U-PWY03hc,704
|
|
152
155
|
biopipen/scripts/tcgamaf/MafAddChr.py,sha256=V10HMisl12O3ZfXuRmFNdy5p-3mr43WCvy0GHxSpwfA,494
|
|
153
156
|
biopipen/scripts/tcgamaf/maf2vcf.pl,sha256=hJKcH-NbgWK6fmK7f3qex7ozJJl-PqCNPXqpwfcHwJg,22707
|
|
154
157
|
biopipen/scripts/tcr/Attach2Seurat.R,sha256=C91TAh1cLSxWkdFPf84pbxlpTYMuWq_rduG4eiIkXZI,1345
|
|
155
|
-
biopipen/scripts/tcr/CDR3AAPhyschem.R,sha256
|
|
156
|
-
biopipen/scripts/tcr/CloneResidency.R,sha256=
|
|
158
|
+
biopipen/scripts/tcr/CDR3AAPhyschem.R,sha256=-0BS6cdt5GfQJphA3HlDgGjWr4XFF-7INLJyMBHQNAc,16628
|
|
159
|
+
biopipen/scripts/tcr/CloneResidency.R,sha256=yE1Why0spX557D9aIQummoxXIdXBC6jt3YB5kIL1jt0,21647
|
|
157
160
|
biopipen/scripts/tcr/CloneSizeQQPlot.R,sha256=5FPfWQjxTsv59KSDQaDWj3C95zPQMngKG7qOf95NEzI,4527
|
|
158
161
|
biopipen/scripts/tcr/GIANA/GIANA.py,sha256=0qLhgCWxT8K-4JvORA03CzBPTT5pd4Di5B_DgrHXbFA,47198
|
|
159
162
|
biopipen/scripts/tcr/GIANA/GIANA4.py,sha256=Z7Q3cUr1Pvmy4CFADN0P7i9g1-HbzWROMqk5HvL_F1Q,45762
|
|
@@ -161,20 +164,20 @@ biopipen/scripts/tcr/GIANA/Imgt_Human_TRBV.fasta,sha256=XUwDPXJxVH5O9Q0gCL6EILKX
|
|
|
161
164
|
biopipen/scripts/tcr/GIANA/query.py,sha256=5NWSEDNrJomMt48tzLGpRwJTZB0zQxvMVTilyG8osX8,7298
|
|
162
165
|
biopipen/scripts/tcr/Immunarch-basic.R,sha256=g64RXmiPw73vbnwrKoRaNs1d3O6mRV9uhcAFkBV0g3U,3121
|
|
163
166
|
biopipen/scripts/tcr/Immunarch-clonality.R,sha256=48rbPCWka4eNEy-fjM0BlKDkMYdG2zlB8Sly1B4xdUI,3858
|
|
164
|
-
biopipen/scripts/tcr/Immunarch-diversity.R,sha256=
|
|
167
|
+
biopipen/scripts/tcr/Immunarch-diversity.R,sha256=C1qx50K2eIZ2c590jumGe1BpMmgohlaP-wVkmwzHa2E,28296
|
|
165
168
|
biopipen/scripts/tcr/Immunarch-geneusage.R,sha256=c0C8-KtKI2q6O9xZ9f5COefQbPlshT2hz1f36qpnW34,6817
|
|
166
|
-
biopipen/scripts/tcr/Immunarch-kmer.R,sha256=
|
|
169
|
+
biopipen/scripts/tcr/Immunarch-kmer.R,sha256=ttDKwPTde_DN2xekRF2LBrc_o8wQjxXa49VAzmUzQl8,6212
|
|
167
170
|
biopipen/scripts/tcr/Immunarch-overlap.R,sha256=GVt-qJPtd6NEe5njAqNStf2AP6pLkv7Ittw0YT_qdNY,7465
|
|
168
|
-
biopipen/scripts/tcr/Immunarch-spectratyping.R,sha256=
|
|
171
|
+
biopipen/scripts/tcr/Immunarch-spectratyping.R,sha256=jm8qI_A6HBgr1RT6-kq13z46_3aXHwz_LbQk4Ggeq9Y,2882
|
|
169
172
|
biopipen/scripts/tcr/Immunarch-tracking.R,sha256=0tiywpGhd3H0REp4xrhOlkWzJM4ntrQjrVesHbEWT40,4374
|
|
170
|
-
biopipen/scripts/tcr/Immunarch-vjjunc.R,sha256=
|
|
171
|
-
biopipen/scripts/tcr/Immunarch.R,sha256=
|
|
173
|
+
biopipen/scripts/tcr/Immunarch-vjjunc.R,sha256=vSVPdRPSlpAfuX4ynA2UjfUC0_61yMAaPieJM-5J4sw,4434
|
|
174
|
+
biopipen/scripts/tcr/Immunarch.R,sha256=FVPK5qu6twSSJJNDCAZO4wNned6uIOBZHgBNeIgLmKw,3037
|
|
172
175
|
biopipen/scripts/tcr/Immunarch2VDJtools.R,sha256=QB9ILGbnsfoWaRANK6ceb14wpSWy8F1V1EdEmfIqiks,706
|
|
173
176
|
biopipen/scripts/tcr/ImmunarchFilter.R,sha256=o25O36FwH_0w6F8DFQ0SfpcwDzlzaGefXqr9ESrvb4k,3974
|
|
174
177
|
biopipen/scripts/tcr/ImmunarchLoading.R,sha256=l_l-gojiCKI_MWgIUe2zG5boVtNipBv4rACRJEcrnFE,5734
|
|
175
178
|
biopipen/scripts/tcr/ImmunarchSplitIdents.R,sha256=FGCeGV0uSmFU91lKkldUAeV4A2m3hHw5X4GNi8ffGzI,1873
|
|
176
179
|
biopipen/scripts/tcr/SampleDiversity.R,sha256=jQ1OU3b8vswD8tZhLt3fkcqJKrl2bhQX0giHM2rXz3Y,2643
|
|
177
|
-
biopipen/scripts/tcr/TCRClusterStats.R,sha256=
|
|
180
|
+
biopipen/scripts/tcr/TCRClusterStats.R,sha256=D7q1svXQxl1uOya8bePvR9e6NJXjCjXbPsXnEPTWdlE,12004
|
|
178
181
|
biopipen/scripts/tcr/TCRClustering.R,sha256=-BWbDqvDBEpfVaxrVvzVHK5bm6FCOFmGHydg1c3EgAM,8747
|
|
179
182
|
biopipen/scripts/tcr/TESSA.R,sha256=bfOixWLZy8yi0MzXncP67KjtCukwXEzsK5fCdMzB5VM,6822
|
|
180
183
|
biopipen/scripts/tcr/TESSA_source/Atchley_factors.csv,sha256=SumqDOqP67P54uM7Cuc5_O_rySTWcGo7eX3psMSPX9s,763
|
|
@@ -210,9 +213,9 @@ biopipen/utils/caching.R,sha256=qANQqH8p-VpvD8V4VSoqSfp0TFr4esujC7x3OFZsJMw,1687
|
|
|
210
213
|
biopipen/utils/common_docstrs.py,sha256=ro9dUXeHMXBaqb-hTafwrG6xW5IOBEeiUM2_REjFoCo,5842
|
|
211
214
|
biopipen/utils/gene.R,sha256=BzAwlLA8hO12vF-3t6IwEuTEeLa_jBll4zm_5qe3qoE,1243
|
|
212
215
|
biopipen/utils/gene.py,sha256=qE_BqTayrJWxRdniffhcz6OhZcw9GUoOrj2EtFWH9Gw,2246
|
|
213
|
-
biopipen/utils/gsea.R,sha256=
|
|
216
|
+
biopipen/utils/gsea.R,sha256=UMQOlWGstQTOBScvy1wIzrB7I3CE28Xo2v1sy4lmJ-M,7549
|
|
214
217
|
biopipen/utils/io.R,sha256=jIYdqdn0iRWfQYAZa5CjXi3fikqmYvPPLIXhobRe8sw,537
|
|
215
|
-
biopipen/utils/misc.R,sha256=
|
|
218
|
+
biopipen/utils/misc.R,sha256=sB2cM-sJn9H90FAZD89uNUYPU5k_6BT8d_nG33fI7d4,5520
|
|
216
219
|
biopipen/utils/misc.py,sha256=Pmh3CBiKJ3vC_RqorfOfRAvTVKXrGDJT8DMLfYbTivs,3055
|
|
217
220
|
biopipen/utils/mutate_helpers.R,sha256=Bqy6Oi4rrPEPJw0Jq32bVAwwBfZv7JJL9jFcK5x-cek,17649
|
|
218
221
|
biopipen/utils/plot.R,sha256=pzl37PomNeUZPxohHZ2w93j3Fc4T0Qrc62FF-9MTKdw,4417
|
|
@@ -220,7 +223,7 @@ biopipen/utils/reference.py,sha256=6bPSwQa-GiDfr7xLR9a5T64Ey40y24yn3QfQ5wDFZkU,4
|
|
|
220
223
|
biopipen/utils/rnaseq.R,sha256=Ro2B2dG-Z2oVaT5tkwp9RHBz4dp_RF-JcizlM5GYXFs,1298
|
|
221
224
|
biopipen/utils/single_cell.R,sha256=bKduqOQjSC8BtZJuwfUShR49omoEMbB57n3Gi6dYlqA,4147
|
|
222
225
|
biopipen/utils/vcf.py,sha256=ajXs0M_QghEctlvUlSRjWQIABVF02wPdYd-0LP4mIsU,9377
|
|
223
|
-
biopipen-0.24.
|
|
224
|
-
biopipen-0.24.
|
|
225
|
-
biopipen-0.24.
|
|
226
|
-
biopipen-0.24.
|
|
226
|
+
biopipen-0.24.2.dist-info/METADATA,sha256=it_bxwfsavzwDtAkIWf2RxQIcmbr0810VrAEonBE9DQ,932
|
|
227
|
+
biopipen-0.24.2.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
228
|
+
biopipen-0.24.2.dist-info/entry_points.txt,sha256=O7K7PHoJi-4tERYpqmryuTvrFNEsptMpqliZzB2oBQQ,577
|
|
229
|
+
biopipen-0.24.2.dist-info/RECORD,,
|
|
File without changes
|