biopipen 0.24.1__tar.gz → 0.24.2__tar.gz
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-0.24.1 → biopipen-0.24.2}/PKG-INFO +1 -1
- biopipen-0.24.2/biopipen/__init__.py +1 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/ns/cellranger.py +31 -0
- biopipen-0.24.2/biopipen/ns/cellranger_pipeline.py +95 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/cellranger/CellRangerCount.svelte +5 -2
- biopipen-0.24.2/biopipen/reports/cellranger/CellRangerSummary.svelte +16 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/cellranger/CellRangerVdj.svelte +5 -2
- biopipen-0.24.2/biopipen/scripts/cellranger/CellRangerSummary.R +189 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/CellsDistribution.R +4 -5
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/MarkersFinder.R +2 -3
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/MetaMarkers.R +3 -4
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/RadarPlots.R +2 -3
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/ScFGSEA.R +2 -3
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/SeuratClusterStats-hists.R +1 -1
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/SeuratClusterStats.R +0 -1
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/SeuratPreparing.R +13 -10
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/TopExpressingGenes.R +2 -3
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna_metabolic_landscape/MetabolicFeatures.R +2 -3
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna_metabolic_landscape/MetabolicFeaturesIntraSubset.R +1 -2
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna_metabolic_landscape/MetabolicPathwayHeterogeneity.R +1 -2
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/CDR3AAPhyschem.R +0 -1
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/CloneResidency.R +5 -6
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/Immunarch-diversity.R +2 -2
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/Immunarch-kmer.R +1 -1
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/Immunarch-spectratyping.R +2 -2
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/Immunarch-vjjunc.R +1 -1
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/Immunarch.R +0 -1
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/TCRClusterStats.R +4 -5
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/utils/gsea.R +7 -2
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/utils/misc.R +11 -8
- {biopipen-0.24.1 → biopipen-0.24.2}/pyproject.toml +2 -1
- {biopipen-0.24.1 → biopipen-0.24.2}/setup.py +2 -1
- biopipen-0.24.1/biopipen/__init__.py +0 -1
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/core/__init__.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/core/config.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/core/config.toml +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/core/defaults.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/core/filters.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/core/proc.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/core/testing.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/ns/__init__.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/ns/bam.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/ns/bcftools.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/ns/bed.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/ns/cnv.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/ns/cnvkit.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/ns/cnvkit_pipeline.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/ns/delim.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/ns/gene.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/ns/gsea.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/ns/misc.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/ns/plot.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/ns/rnaseq.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/ns/scrna.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/ns/scrna_metabolic_landscape.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/ns/tcgamaf.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/ns/tcr.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/ns/vcf.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/ns/web.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/bam/CNAClinic.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/bam/CNVpytor.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/bam/ControlFREEC.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/cnv/AneuploidyScore.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/cnv/AneuploidyScoreSummary.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/cnv/TMADScoreSummary.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/cnvkit/CNVkitDiagram.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/cnvkit/CNVkitHeatmap.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/cnvkit/CNVkitScatter.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/delim/SampleInfo.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/gsea/FGSEA.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/gsea/GSEA.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/scrna/CellsDistribution.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/scrna/DimPlots.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/scrna/MarkersFinder.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/scrna/MetaMarkers.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/scrna/RadarPlots.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/scrna/ScFGSEA.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/scrna/SeuratClusterStats.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/scrna/SeuratMap2Ref.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/scrna/SeuratPreparing.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/scrna/TopExpressingGenes.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/scrna_metabolic_landscape/MetabolicFeatures.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/scrna_metabolic_landscape/MetabolicFeaturesIntraSubset.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/scrna_metabolic_landscape/MetabolicPathwayActivity.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/scrna_metabolic_landscape/MetabolicPathwayHeterogeneity.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/tcr/CDR3AAPhyschem.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/tcr/CloneResidency.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/tcr/Immunarch.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/tcr/SampleDiversity.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/tcr/TCRClusterStats.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/tcr/TESSA.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/tcr/VJUsage.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/utils/gsea.liq +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/utils/misc.liq +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/vcf/TruvariBenchSummary.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/reports/vcf/TruvariConsistency.svelte +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/bam/BamMerge.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/bam/BamSplitChroms.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/bam/CNAClinic.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/bam/CNVpytor.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/bam/ControlFREEC.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/bcftools/BcftoolsAnnotate.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/bcftools/BcftoolsFilter.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/bcftools/BcftoolsSort.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/bed/Bed2Vcf.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/bed/BedConsensus.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/bed/BedLiftOver.sh +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/bed/BedtoolsMerge.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/cellranger/CellRangerCount.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/cellranger/CellRangerVdj.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/cnv/AneuploidyScore.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/cnv/AneuploidyScoreSummary.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/cnv/TMADScore.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/cnv/TMADScoreSummary.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/cnvkit/CNVkitAccess.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/cnvkit/CNVkitAutobin.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/cnvkit/CNVkitBatch.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/cnvkit/CNVkitCall.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/cnvkit/CNVkitCoverage.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/cnvkit/CNVkitDiagram.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/cnvkit/CNVkitFix.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/cnvkit/CNVkitGuessBaits.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/cnvkit/CNVkitHeatmap.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/cnvkit/CNVkitReference.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/cnvkit/CNVkitScatter.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/cnvkit/CNVkitSegment.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/cnvkit/guess_baits.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/delim/RowsBinder.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/delim/SampleInfo.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/gene/GeneNameConversion.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/gsea/Enrichr.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/gsea/FGSEA.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/gsea/GSEA.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/gsea/PreRank.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/misc/Config2File.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/misc/Str2File.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/plot/Heatmap.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/plot/VennDiagram.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/rnaseq/UnitConversion.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/CellTypeAnnotation-direct.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/CellTypeAnnotation-hitype.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/CellTypeAnnotation-sccatch.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/CellTypeAnnotation-sctype.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/CellTypeAnnotation.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/DimPlots.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/ExprImpution-alra.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/ExprImpution-rmagic.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/ExprImpution-scimpute.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/ExprImpution.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/ModuleScoreCalculator.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/SCImpute.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/SeuratClusterStats-dimplots.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/SeuratClusterStats-features.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/SeuratClusterStats-ngenes.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/SeuratClusterStats-stats.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/SeuratClustering.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/SeuratFilter.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/SeuratLoading.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/SeuratMap2Ref.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/SeuratMetadataMutater.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/SeuratSplit.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/SeuratSubClustering.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/SeuratSubset.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/SeuratTo10X.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/Write10X.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna/sctype.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/scrna_metabolic_landscape/MetabolicPathwayActivity.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcgamaf/Maf2Vcf.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcgamaf/MafAddChr.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcgamaf/maf2vcf.pl +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/Attach2Seurat.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/CloneSizeQQPlot.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/GIANA/GIANA.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/GIANA/GIANA4.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/GIANA/Imgt_Human_TRBV.fasta +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/GIANA/query.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/Immunarch-basic.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/Immunarch-clonality.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/Immunarch-geneusage.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/Immunarch-overlap.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/Immunarch-tracking.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/Immunarch2VDJtools.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/ImmunarchFilter.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/ImmunarchLoading.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/ImmunarchSplitIdents.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/SampleDiversity.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/TCRClustering.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/TESSA.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/TESSA_source/Atchley_factors.csv +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/TESSA_source/BriseisEncoder.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/TESSA_source/MCMC_control.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/TESSA_source/TrainedEncoder.h5 +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/TESSA_source/fixed_b.csv +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/TESSA_source/initialization.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/TESSA_source/post_analysis.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/TESSA_source/real_data.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/TESSA_source/update.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/TESSA_source/utility.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/VJUsage.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/immunarch-patched.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/tcr/vdjtools-patch.sh +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/vcf/TruvariBench.sh +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/vcf/TruvariBenchSummary.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/vcf/TruvariConsistency.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/vcf/Vcf2Bed.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/vcf/VcfAnno.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/vcf/VcfDownSample.sh +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/vcf/VcfFilter.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/vcf/VcfFix.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/vcf/VcfFix_utils.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/vcf/VcfIndex.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/vcf/VcfIntersect.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/vcf/VcfLiftOver.sh +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/vcf/VcfSplitSamples.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/web/Download.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/scripts/web/DownloadList.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/utils/__init__.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/utils/caching.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/utils/common_docstrs.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/utils/gene.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/utils/gene.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/utils/io.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/utils/misc.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/utils/mutate_helpers.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/utils/plot.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/utils/reference.py +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/utils/rnaseq.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/utils/single_cell.R +0 -0
- {biopipen-0.24.1 → biopipen-0.24.2}/biopipen/utils/vcf.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.24.2"
|
|
@@ -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) {
|
|
@@ -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) {
|