biopipen 0.21.0__py3-none-any.whl → 0.34.26__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.
Files changed (290) hide show
  1. biopipen/__init__.py +1 -1
  2. biopipen/core/config.toml +28 -0
  3. biopipen/core/filters.py +79 -4
  4. biopipen/core/proc.py +12 -3
  5. biopipen/core/testing.py +75 -3
  6. biopipen/ns/bam.py +148 -6
  7. biopipen/ns/bed.py +75 -0
  8. biopipen/ns/cellranger.py +186 -0
  9. biopipen/ns/cellranger_pipeline.py +126 -0
  10. biopipen/ns/cnv.py +19 -3
  11. biopipen/ns/cnvkit.py +1 -1
  12. biopipen/ns/cnvkit_pipeline.py +20 -12
  13. biopipen/ns/delim.py +34 -35
  14. biopipen/ns/gene.py +68 -23
  15. biopipen/ns/gsea.py +63 -37
  16. biopipen/ns/misc.py +39 -14
  17. biopipen/ns/plot.py +304 -1
  18. biopipen/ns/protein.py +183 -0
  19. biopipen/ns/regulatory.py +290 -0
  20. biopipen/ns/rnaseq.py +142 -5
  21. biopipen/ns/scrna.py +2053 -473
  22. biopipen/ns/scrna_metabolic_landscape.py +228 -382
  23. biopipen/ns/snp.py +659 -0
  24. biopipen/ns/stats.py +484 -0
  25. biopipen/ns/tcr.py +683 -98
  26. biopipen/ns/vcf.py +236 -2
  27. biopipen/ns/web.py +97 -6
  28. biopipen/reports/bam/CNVpytor.svelte +4 -9
  29. biopipen/reports/cellranger/CellRangerCount.svelte +18 -0
  30. biopipen/reports/cellranger/CellRangerSummary.svelte +16 -0
  31. biopipen/reports/cellranger/CellRangerVdj.svelte +18 -0
  32. biopipen/reports/cnvkit/CNVkitDiagram.svelte +1 -1
  33. biopipen/reports/cnvkit/CNVkitHeatmap.svelte +1 -1
  34. biopipen/reports/cnvkit/CNVkitScatter.svelte +1 -1
  35. biopipen/reports/common.svelte +15 -0
  36. biopipen/reports/protein/ProdigySummary.svelte +16 -0
  37. biopipen/reports/scrna/CellsDistribution.svelte +4 -39
  38. biopipen/reports/scrna/DimPlots.svelte +1 -1
  39. biopipen/reports/scrna/MarkersFinder.svelte +6 -126
  40. biopipen/reports/scrna/MetaMarkers.svelte +3 -75
  41. biopipen/reports/scrna/RadarPlots.svelte +4 -20
  42. biopipen/reports/scrna_metabolic_landscape/MetabolicFeatures.svelte +61 -22
  43. biopipen/reports/scrna_metabolic_landscape/MetabolicPathwayActivity.svelte +88 -82
  44. biopipen/reports/scrna_metabolic_landscape/MetabolicPathwayHeterogeneity.svelte +70 -10
  45. biopipen/reports/snp/PlinkCallRate.svelte +24 -0
  46. biopipen/reports/snp/PlinkFreq.svelte +18 -0
  47. biopipen/reports/snp/PlinkHWE.svelte +18 -0
  48. biopipen/reports/snp/PlinkHet.svelte +18 -0
  49. biopipen/reports/snp/PlinkIBD.svelte +18 -0
  50. biopipen/reports/tcr/CDR3AAPhyschem.svelte +19 -66
  51. biopipen/reports/tcr/ClonalStats.svelte +16 -0
  52. biopipen/reports/tcr/CloneResidency.svelte +3 -93
  53. biopipen/reports/tcr/Immunarch.svelte +4 -155
  54. biopipen/reports/tcr/TCRClusterStats.svelte +3 -45
  55. biopipen/reports/tcr/TESSA.svelte +11 -28
  56. biopipen/reports/utils/misc.liq +22 -7
  57. biopipen/scripts/bam/BamMerge.py +11 -15
  58. biopipen/scripts/bam/BamSampling.py +90 -0
  59. biopipen/scripts/bam/BamSort.py +141 -0
  60. biopipen/scripts/bam/BamSplitChroms.py +10 -10
  61. biopipen/scripts/bam/BamSubsetByBed.py +38 -0
  62. biopipen/scripts/bam/CNAClinic.R +41 -5
  63. biopipen/scripts/bam/CNVpytor.py +153 -54
  64. biopipen/scripts/bam/ControlFREEC.py +13 -14
  65. biopipen/scripts/bam/SamtoolsView.py +33 -0
  66. biopipen/scripts/bed/Bed2Vcf.py +5 -5
  67. biopipen/scripts/bed/BedConsensus.py +5 -5
  68. biopipen/scripts/bed/BedLiftOver.sh +6 -4
  69. biopipen/scripts/bed/BedtoolsIntersect.py +54 -0
  70. biopipen/scripts/bed/BedtoolsMakeWindows.py +47 -0
  71. biopipen/scripts/bed/BedtoolsMerge.py +4 -4
  72. biopipen/scripts/cellranger/CellRangerCount.py +138 -0
  73. biopipen/scripts/cellranger/CellRangerSummary.R +181 -0
  74. biopipen/scripts/cellranger/CellRangerVdj.py +112 -0
  75. biopipen/scripts/cnv/AneuploidyScore.R +55 -20
  76. biopipen/scripts/cnv/AneuploidyScoreSummary.R +221 -163
  77. biopipen/scripts/cnv/TMADScore.R +25 -9
  78. biopipen/scripts/cnv/TMADScoreSummary.R +57 -86
  79. biopipen/scripts/cnvkit/CNVkitAccess.py +7 -6
  80. biopipen/scripts/cnvkit/CNVkitAutobin.py +26 -18
  81. biopipen/scripts/cnvkit/CNVkitBatch.py +6 -6
  82. biopipen/scripts/cnvkit/CNVkitCall.py +3 -3
  83. biopipen/scripts/cnvkit/CNVkitCoverage.py +4 -3
  84. biopipen/scripts/cnvkit/CNVkitDiagram.py +5 -5
  85. biopipen/scripts/cnvkit/CNVkitFix.py +3 -3
  86. biopipen/scripts/cnvkit/CNVkitGuessBaits.py +12 -8
  87. biopipen/scripts/cnvkit/CNVkitHeatmap.py +5 -5
  88. biopipen/scripts/cnvkit/CNVkitReference.py +6 -5
  89. biopipen/scripts/cnvkit/CNVkitScatter.py +5 -5
  90. biopipen/scripts/cnvkit/CNVkitSegment.py +5 -5
  91. biopipen/scripts/cnvkit/guess_baits.py +166 -93
  92. biopipen/scripts/delim/RowsBinder.R +1 -1
  93. biopipen/scripts/delim/SampleInfo.R +116 -118
  94. biopipen/scripts/gene/GeneNameConversion.R +67 -0
  95. biopipen/scripts/gene/GenePromoters.R +61 -0
  96. biopipen/scripts/gsea/Enrichr.R +5 -5
  97. biopipen/scripts/gsea/FGSEA.R +184 -50
  98. biopipen/scripts/gsea/GSEA.R +2 -2
  99. biopipen/scripts/gsea/PreRank.R +5 -5
  100. biopipen/scripts/misc/Config2File.py +2 -2
  101. biopipen/scripts/misc/Plot.R +80 -0
  102. biopipen/scripts/misc/Shell.sh +15 -0
  103. biopipen/scripts/misc/Str2File.py +2 -2
  104. biopipen/scripts/plot/Heatmap.R +3 -3
  105. biopipen/scripts/plot/Manhattan.R +147 -0
  106. biopipen/scripts/plot/QQPlot.R +146 -0
  107. biopipen/scripts/plot/ROC.R +88 -0
  108. biopipen/scripts/plot/Scatter.R +112 -0
  109. biopipen/scripts/plot/VennDiagram.R +5 -9
  110. biopipen/scripts/protein/MMCIF2PDB.py +33 -0
  111. biopipen/scripts/protein/PDB2Fasta.py +60 -0
  112. biopipen/scripts/protein/Prodigy.py +119 -0
  113. biopipen/scripts/protein/ProdigySummary.R +140 -0
  114. biopipen/scripts/protein/RMSD.py +178 -0
  115. biopipen/scripts/regulatory/MotifAffinityTest.R +102 -0
  116. biopipen/scripts/regulatory/MotifAffinityTest_AtSNP.R +127 -0
  117. biopipen/scripts/regulatory/MotifAffinityTest_MotifBreakR.R +104 -0
  118. biopipen/scripts/regulatory/MotifScan.py +159 -0
  119. biopipen/scripts/regulatory/VariantMotifPlot.R +78 -0
  120. biopipen/scripts/regulatory/motifs-common.R +324 -0
  121. biopipen/scripts/rnaseq/Simulation-ESCO.R +180 -0
  122. biopipen/scripts/rnaseq/Simulation-RUVcorr.R +45 -0
  123. biopipen/scripts/rnaseq/Simulation.R +21 -0
  124. biopipen/scripts/rnaseq/UnitConversion.R +325 -54
  125. biopipen/scripts/scrna/AnnData2Seurat.R +40 -0
  126. biopipen/scripts/scrna/CCPlotR-patch.R +161 -0
  127. biopipen/scripts/scrna/CellCellCommunication.py +150 -0
  128. biopipen/scripts/scrna/CellCellCommunicationPlots.R +93 -0
  129. biopipen/scripts/scrna/CellSNPLite.py +30 -0
  130. biopipen/scripts/scrna/CellTypeAnnotation-celltypist.R +185 -0
  131. biopipen/scripts/scrna/CellTypeAnnotation-direct.R +68 -31
  132. biopipen/scripts/scrna/CellTypeAnnotation-hitype.R +27 -22
  133. biopipen/scripts/scrna/CellTypeAnnotation-sccatch.R +28 -20
  134. biopipen/scripts/scrna/CellTypeAnnotation-sctype.R +48 -25
  135. biopipen/scripts/scrna/CellTypeAnnotation.R +37 -1
  136. biopipen/scripts/scrna/CellsDistribution.R +456 -167
  137. biopipen/scripts/scrna/DimPlots.R +1 -1
  138. biopipen/scripts/scrna/ExprImputation-alra.R +109 -0
  139. biopipen/scripts/scrna/ExprImputation-rmagic.R +256 -0
  140. biopipen/scripts/scrna/{ExprImpution-scimpute.R → ExprImputation-scimpute.R} +8 -5
  141. biopipen/scripts/scrna/ExprImputation.R +7 -0
  142. biopipen/scripts/scrna/LoomTo10X.R +51 -0
  143. biopipen/scripts/scrna/MQuad.py +25 -0
  144. biopipen/scripts/scrna/MarkersFinder.R +679 -400
  145. biopipen/scripts/scrna/MetaMarkers.R +265 -161
  146. biopipen/scripts/scrna/ModuleScoreCalculator.R +66 -11
  147. biopipen/scripts/scrna/PseudoBulkDEG.R +678 -0
  148. biopipen/scripts/scrna/RadarPlots.R +355 -134
  149. biopipen/scripts/scrna/ScFGSEA.R +298 -100
  150. biopipen/scripts/scrna/ScSimulation.R +65 -0
  151. biopipen/scripts/scrna/ScVelo.py +617 -0
  152. biopipen/scripts/scrna/Seurat2AnnData.R +7 -0
  153. biopipen/scripts/scrna/SeuratClusterStats-clustree.R +87 -0
  154. biopipen/scripts/scrna/SeuratClusterStats-dimplots.R +36 -30
  155. biopipen/scripts/scrna/SeuratClusterStats-features.R +138 -187
  156. biopipen/scripts/scrna/SeuratClusterStats-ngenes.R +81 -0
  157. biopipen/scripts/scrna/SeuratClusterStats-stats.R +78 -89
  158. biopipen/scripts/scrna/SeuratClusterStats.R +47 -10
  159. biopipen/scripts/scrna/SeuratClustering.R +36 -233
  160. biopipen/scripts/scrna/SeuratLoading.R +2 -2
  161. biopipen/scripts/scrna/SeuratMap2Ref.R +84 -113
  162. biopipen/scripts/scrna/SeuratMetadataMutater.R +16 -6
  163. biopipen/scripts/scrna/SeuratPreparing.R +223 -173
  164. biopipen/scripts/scrna/SeuratSubClustering.R +64 -0
  165. biopipen/scripts/scrna/SeuratTo10X.R +27 -0
  166. biopipen/scripts/scrna/Slingshot.R +65 -0
  167. biopipen/scripts/scrna/Subset10X.R +2 -2
  168. biopipen/scripts/scrna/TopExpressingGenes.R +169 -135
  169. biopipen/scripts/scrna/celltypist-wrapper.py +195 -0
  170. biopipen/scripts/scrna/scvelo_paga.py +313 -0
  171. biopipen/scripts/scrna/seurat_anndata_conversion.py +98 -0
  172. biopipen/scripts/scrna_metabolic_landscape/MetabolicFeatures.R +447 -82
  173. biopipen/scripts/scrna_metabolic_landscape/MetabolicPathwayActivity.R +348 -241
  174. biopipen/scripts/scrna_metabolic_landscape/MetabolicPathwayHeterogeneity.R +188 -166
  175. biopipen/scripts/snp/MatrixEQTL.R +217 -0
  176. biopipen/scripts/snp/Plink2GTMat.py +148 -0
  177. biopipen/scripts/snp/PlinkCallRate.R +199 -0
  178. biopipen/scripts/snp/PlinkFilter.py +100 -0
  179. biopipen/scripts/snp/PlinkFreq.R +291 -0
  180. biopipen/scripts/snp/PlinkFromVcf.py +81 -0
  181. biopipen/scripts/snp/PlinkHWE.R +85 -0
  182. biopipen/scripts/snp/PlinkHet.R +96 -0
  183. biopipen/scripts/snp/PlinkIBD.R +196 -0
  184. biopipen/scripts/snp/PlinkSimulation.py +124 -0
  185. biopipen/scripts/snp/PlinkUpdateName.py +124 -0
  186. biopipen/scripts/stats/ChowTest.R +146 -0
  187. biopipen/scripts/stats/DiffCoexpr.R +152 -0
  188. biopipen/scripts/stats/LiquidAssoc.R +135 -0
  189. biopipen/scripts/stats/Mediation.R +108 -0
  190. biopipen/scripts/stats/MetaPvalue.R +130 -0
  191. biopipen/scripts/stats/MetaPvalue1.R +74 -0
  192. biopipen/scripts/tcgamaf/Maf2Vcf.py +2 -2
  193. biopipen/scripts/tcgamaf/MafAddChr.py +2 -2
  194. biopipen/scripts/tcr/Attach2Seurat.R +3 -2
  195. biopipen/scripts/tcr/CDR3AAPhyschem.R +211 -143
  196. biopipen/scripts/tcr/CDR3Clustering.R +343 -0
  197. biopipen/scripts/tcr/ClonalStats.R +526 -0
  198. biopipen/scripts/tcr/CloneResidency.R +255 -131
  199. biopipen/scripts/tcr/CloneSizeQQPlot.R +4 -4
  200. biopipen/scripts/tcr/GIANA/GIANA.py +1356 -797
  201. biopipen/scripts/tcr/GIANA/GIANA4.py +1362 -789
  202. biopipen/scripts/tcr/GIANA/query.py +164 -162
  203. biopipen/scripts/tcr/Immunarch-basic.R +31 -9
  204. biopipen/scripts/tcr/Immunarch-clonality.R +25 -5
  205. biopipen/scripts/tcr/Immunarch-diversity.R +352 -134
  206. biopipen/scripts/tcr/Immunarch-geneusage.R +45 -5
  207. biopipen/scripts/tcr/Immunarch-kmer.R +68 -8
  208. biopipen/scripts/tcr/Immunarch-overlap.R +84 -4
  209. biopipen/scripts/tcr/Immunarch-spectratyping.R +35 -6
  210. biopipen/scripts/tcr/Immunarch-tracking.R +38 -6
  211. biopipen/scripts/tcr/Immunarch-vjjunc.R +165 -0
  212. biopipen/scripts/tcr/Immunarch.R +63 -11
  213. biopipen/scripts/tcr/Immunarch2VDJtools.R +2 -2
  214. biopipen/scripts/tcr/ImmunarchFilter.R +4 -4
  215. biopipen/scripts/tcr/ImmunarchLoading.R +38 -29
  216. biopipen/scripts/tcr/SampleDiversity.R +1 -1
  217. biopipen/scripts/tcr/ScRepCombiningExpression.R +40 -0
  218. biopipen/scripts/tcr/ScRepLoading.R +166 -0
  219. biopipen/scripts/tcr/TCRClusterStats.R +176 -22
  220. biopipen/scripts/tcr/TCRDock.py +110 -0
  221. biopipen/scripts/tcr/TESSA.R +102 -118
  222. biopipen/scripts/tcr/VJUsage.R +5 -5
  223. biopipen/scripts/tcr/immunarch-patched.R +142 -0
  224. biopipen/scripts/tcr/vdjtools-patch.sh +1 -1
  225. biopipen/scripts/vcf/BcftoolsAnnotate.py +91 -0
  226. biopipen/scripts/vcf/BcftoolsFilter.py +90 -0
  227. biopipen/scripts/vcf/BcftoolsMerge.py +31 -0
  228. biopipen/scripts/vcf/BcftoolsSort.py +113 -0
  229. biopipen/scripts/vcf/BcftoolsView.py +73 -0
  230. biopipen/scripts/vcf/TruvariBench.sh +14 -7
  231. biopipen/scripts/vcf/TruvariBenchSummary.R +16 -13
  232. biopipen/scripts/vcf/TruvariConsistency.R +1 -1
  233. biopipen/scripts/vcf/Vcf2Bed.py +2 -2
  234. biopipen/scripts/vcf/VcfAnno.py +11 -11
  235. biopipen/scripts/vcf/VcfDownSample.sh +22 -10
  236. biopipen/scripts/vcf/VcfFilter.py +5 -5
  237. biopipen/scripts/vcf/VcfFix.py +7 -7
  238. biopipen/scripts/vcf/VcfFix_utils.py +13 -4
  239. biopipen/scripts/vcf/VcfIndex.py +3 -3
  240. biopipen/scripts/vcf/VcfIntersect.py +3 -3
  241. biopipen/scripts/vcf/VcfLiftOver.sh +5 -0
  242. biopipen/scripts/vcf/VcfSplitSamples.py +4 -4
  243. biopipen/scripts/vcf/bcftools_utils.py +52 -0
  244. biopipen/scripts/web/Download.py +8 -4
  245. biopipen/scripts/web/DownloadList.py +5 -5
  246. biopipen/scripts/web/GCloudStorageDownloadBucket.py +82 -0
  247. biopipen/scripts/web/GCloudStorageDownloadFile.py +23 -0
  248. biopipen/scripts/web/gcloud_common.py +49 -0
  249. biopipen/utils/gene.py +108 -60
  250. biopipen/utils/misc.py +146 -20
  251. biopipen/utils/reference.py +64 -20
  252. biopipen/utils/reporter.py +177 -0
  253. biopipen/utils/vcf.py +1 -1
  254. biopipen-0.34.26.dist-info/METADATA +27 -0
  255. biopipen-0.34.26.dist-info/RECORD +292 -0
  256. {biopipen-0.21.0.dist-info → biopipen-0.34.26.dist-info}/WHEEL +1 -1
  257. {biopipen-0.21.0.dist-info → biopipen-0.34.26.dist-info}/entry_points.txt +6 -2
  258. biopipen/ns/bcftools.py +0 -111
  259. biopipen/ns/scrna_basic.py +0 -255
  260. biopipen/reports/delim/SampleInfo.svelte +0 -36
  261. biopipen/reports/scrna/GeneExpressionInvistigation.svelte +0 -32
  262. biopipen/reports/scrna/ScFGSEA.svelte +0 -35
  263. biopipen/reports/scrna/SeuratClusterStats.svelte +0 -82
  264. biopipen/reports/scrna/SeuratMap2Ref.svelte +0 -20
  265. biopipen/reports/scrna/SeuratPreparing.svelte +0 -38
  266. biopipen/reports/scrna/TopExpressingGenes.svelte +0 -55
  267. biopipen/reports/scrna_metabolic_landscape/MetabolicFeaturesIntraSubset.svelte +0 -31
  268. biopipen/reports/utils/gsea.liq +0 -110
  269. biopipen/scripts/bcftools/BcftoolsAnnotate.py +0 -42
  270. biopipen/scripts/bcftools/BcftoolsFilter.py +0 -79
  271. biopipen/scripts/bcftools/BcftoolsSort.py +0 -19
  272. biopipen/scripts/gene/GeneNameConversion.py +0 -66
  273. biopipen/scripts/scrna/ExprImpution-alra.R +0 -32
  274. biopipen/scripts/scrna/ExprImpution-rmagic.R +0 -29
  275. biopipen/scripts/scrna/ExprImpution.R +0 -7
  276. biopipen/scripts/scrna/GeneExpressionInvistigation.R +0 -132
  277. biopipen/scripts/scrna/Write10X.R +0 -11
  278. biopipen/scripts/scrna_metabolic_landscape/MetabolicFeaturesIntraSubset.R +0 -150
  279. biopipen/scripts/tcr/TCRClustering.R +0 -280
  280. biopipen/utils/common_docstrs.py +0 -61
  281. biopipen/utils/gene.R +0 -49
  282. biopipen/utils/gsea.R +0 -193
  283. biopipen/utils/io.R +0 -20
  284. biopipen/utils/misc.R +0 -114
  285. biopipen/utils/mutate_helpers.R +0 -433
  286. biopipen/utils/plot.R +0 -173
  287. biopipen/utils/rnaseq.R +0 -48
  288. biopipen/utils/single_cell.R +0 -115
  289. biopipen-0.21.0.dist-info/METADATA +0 -22
  290. biopipen-0.21.0.dist-info/RECORD +0 -218
@@ -0,0 +1,24 @@
1
+ {% from "utils/misc.liq" import report_jobs -%}
2
+ <script>
3
+ import { Image, Descr } from "$libs";
4
+ </script>
5
+
6
+ {%- macro report_job(job, h=1) -%}
7
+ <h{{h+1}}>Sample Call Rate</h{{h+1}}>
8
+ {%- for pngfile in job.out.outdir | glob: '*.samplecr.png' -%}
9
+ <Descr>Cutoff: {{envs.samplecr}}</Descr>
10
+ <Image src="{{pngfile}}" />
11
+ {%- endfor -%}
12
+
13
+ <h{{h+1}}>Variant Call Rate</h{{h+1}}>
14
+ {%- for pngfile in job.out.outdir | glob: '*.varcr.png' -%}
15
+ <Descr>Cutoff: {{envs.varcr}}</Descr>
16
+ <Image src="{{pngfile}}" />
17
+ {%- endfor -%}
18
+ {%- endmacro -%}
19
+
20
+ {%- macro head_job(job) -%}
21
+ <h1>Sample: {{job.in.cnrfile | stem0 }}</h1>
22
+ {%- endmacro -%}
23
+
24
+ {{ report_jobs(jobs, head_job, report_job) }}
@@ -0,0 +1,18 @@
1
+ {% from "utils/misc.liq" import report_jobs -%}
2
+ <script>
3
+ import { Image, Descr } from "$libs";
4
+ </script>
5
+
6
+ {%- macro report_job(job, h=1) -%}
7
+ {%- for pngfile in job.out.outdir | glob: '*.png' -%}
8
+ {% set metric_col = pngfile | stem | ext0 %}
9
+ <h{{h+1}}>{{metric_col}} distribution</h{{h+1}}>
10
+ <Image src="{{pngfile}}" />
11
+ {%- endfor -%}
12
+ {%- endmacro -%}
13
+
14
+ {%- macro head_job(job) -%}
15
+ <h1>Sample: {{job.in.cnrfile | stem0 }}</h1>
16
+ {%- endmacro -%}
17
+
18
+ {{ report_jobs(jobs, head_job, report_job) }}
@@ -0,0 +1,18 @@
1
+ {% from "utils/misc.liq" import report_jobs -%}
2
+ <script>
3
+ import { Image, Descr } from "$libs";
4
+ </script>
5
+
6
+ {%- macro report_job(job, h=1) -%}
7
+ {%- for pngfile in job.out.outdir | glob: '*.png' -%}
8
+ <h{{h+1}}>Distribution</h{{h+1}}>
9
+ <Descr>Cutoff: {{envs.cutoff}}</Descr>
10
+ <Image src="{{pngfile}}" />
11
+ {%- endfor -%}
12
+ {%- endmacro -%}
13
+
14
+ {%- macro head_job(job) -%}
15
+ <h1>Sample: {{job.in.cnrfile | stem0 }}</h1>
16
+ {%- endmacro -%}
17
+
18
+ {{ report_jobs(jobs, head_job, report_job) }}
@@ -0,0 +1,18 @@
1
+ {% from "utils/misc.liq" import report_jobs -%}
2
+ <script>
3
+ import { Image, Descr } from "$libs";
4
+ </script>
5
+
6
+ {%- macro report_job(job, h=1) -%}
7
+ {%- for pngfile in job.out.outdir | glob: '*.png' -%}
8
+ <h{{h+1}}>Distribution</h{{h+1}}>
9
+ <Descr>Cutoff: [mean - {{envs.cutoff}} x sd, mean + {{envs.cutoff}} x sd]</Descr>
10
+ <Image src="{{pngfile}}" />
11
+ {%- endfor -%}
12
+ {%- endmacro -%}
13
+
14
+ {%- macro head_job(job) -%}
15
+ <h1>Sample: {{job.in.cnrfile | stem0 }}</h1>
16
+ {%- endmacro -%}
17
+
18
+ {{ report_jobs(jobs, head_job, report_job) }}
@@ -0,0 +1,18 @@
1
+ {% from "utils/misc.liq" import report_jobs -%}
2
+ <script>
3
+ import { Image, Descr } from "$libs";
4
+ </script>
5
+
6
+ {%- macro report_job(job, h=1) -%}
7
+ {%- for pngfile in job.out.outdir | glob: '*.png' -%}
8
+ <h{{h+1}}>Heatmap</h{{h+1}}>
9
+ <Descr>PI_HAT threshold = {{envs.pihat}}</Descr>
10
+ <Image src="{{pngfile}}" />
11
+ {%- endfor -%}
12
+ {%- endmacro -%}
13
+
14
+ {%- macro head_job(job) -%}
15
+ <h1>Sample: {{job.in.cnrfile | stem0 }}</h1>
16
+ {%- endmacro -%}
17
+
18
+ {{ report_jobs(jobs, head_job, report_job) }}
@@ -1,79 +1,32 @@
1
1
  {% from "utils/misc.liq" import report_jobs -%}
2
2
  <script>
3
- import { Image, DataTable } from "$libs";
3
+ import { Image, DataTable, Descr } from "$libs";
4
4
  import { Tile, UnorderedList, ListItem, Link, Tabs, Tab, TabContent } from "$ccs";
5
5
  </script>
6
6
 
7
-
8
- {%- macro report_job(job, h=1) -%}
9
-
10
- <h{{h}}>Summary</h{{h}}>
11
- <Tile>
12
- The idea is to perform a regression between two groups of cells
13
- (e.g. Treg vs Tconv) at different length of CDR3 AA sequences.
14
- The regression will be performed for each physicochemical feature of the
15
- AA (hydrophobicity, volume and isolectric point).
16
- </Tile>
17
-
18
- <h{{h+1}}>Reference</h{{h+1}}>
19
- <UnorderedList style="padding-left: 1rem">
20
- <ListItem class="ccs-li"><Link href="https://www.nature.com/articles/ni.3491" target="_blank">https://www.nature.com/articles/ni.3491</Link></ListItem>
21
- <ListItem class="ccs-li"><Link href="https://www.nature.com/articles/s41590-022-01129-x" target="_blank">https://www.nature.com/articles/s41590-022-01129-x</Link></ListItem>
22
- <ListItem class="ccs-li">Wimley, W. C. &amp; White, S. H. Experimentally determined hydrophobicity scale for proteins at membrane - interfaces. Nat. Struct. Biol. 3, 842-848 (1996).</ListItem>
23
- <ListItem class="ccs-li">Hdbk of chemistry &amp; physics 72nd edition. (CRC Press, 1991).</ListItem>
24
- <ListItem class="ccs-li">Zamyatnin, A. A. Protein volume in solution. Prog. Biophys. Mol. Biol. 24, 107-123 (1972).</ListItem>
7
+ <h1>Summary</h1>
8
+ <Descr>
9
+ The idea is to perform a regression between two groups of cells
10
+ (e.g. Treg vs Tconv) at different length of CDR3 AA sequences.
11
+ The regression will be performed for each physicochemical feature of the
12
+ AA (hydrophobicity, volume and isolectric point).
13
+
14
+ <h2>Reference</h2>
15
+ <UnorderedList>
16
+ <ListItem><Link href="https://www.nature.com/articles/ni.3491" target="_blank">https://www.nature.com/articles/ni.3491</Link></ListItem>
17
+ <ListItem><Link href="https://www.nature.com/articles/s41590-022-01129-x" target="_blank">https://www.nature.com/articles/s41590-022-01129-x</Link></ListItem>
18
+ <ListItem>Wimley, W. C. &amp; White, S. H. Experimentally determined hydrophobicity scale for proteins at membrane - interfaces. Nat. Struct. Biol. 3, 842-848 (1996).</ListItem>
19
+ <ListItem>Hdbk of chemistry &amp; physics 72nd edition. (CRC Press, 1991).</ListItem>
20
+ <ListItem>Zamyatnin, A. A. Protein volume in solution. Prog. Biophys. Mol. Biol. 24, 107-123 (1972).</ListItem>
25
21
  </UnorderedList>
22
+ </Descr>
26
23
 
27
- <h{{h}}>Available Cells</h{{h}}>
28
- <DataTable
29
- src={{job.out.outdir | joinpaths: "stats.txt" | quote}}
30
- data={ {{job.out.outdir | joinpaths: "stats.txt" | datatable: sep="\t", index_col=None}} }
31
- />
32
-
33
- {% for subsetdir in job.out.outdir | glob: "*" %}
34
- {% if not subsetdir | isdir %}
35
- {% continue %}
36
- {% endif %}
37
- {% if basename(subsetdir) == "ALL" %}
38
- {% set h = h - 1 %}
39
- {% else %}
40
- <h{{h}}>Subset: {{subsetdir | stem}}</h{{h}}>
41
- {% endif %}
42
-
43
- <h{{h+1}}>Estimated OR (per s.d.) for each physicochemical feature</h{{h+1}}>
44
- <Tabs>
45
- <Tab label="Plot" />
46
- <Tab label="Table" />
47
- <svelte:fragment slot="content">
48
- <TabContent>
49
- <Image src={{subsetdir | joinpaths: "estimated_coefficients.png" | quote}} />
50
- </TabContent>
51
- <TabContent>
52
- <DataTable
53
- src={{subsetdir | joinpaths: "estimates.txt" | quote}}
54
- data={ {{subsetdir | joinpaths: "estimates.txt" | datatable: sep="\t", index_col=None}} }
55
- />
56
- </TabContent>
57
- </svelte:fragment>
58
- </Tabs>
59
-
60
- <h{{h+1}}>Hydrophobicity Distribution</h{{h+1}}>
61
- <Image src={{subsetdir | joinpaths: "distribution.png" | quote}} />
62
-
63
- {% endfor %}
64
-
24
+ {%- macro report_job(job, h=1) -%}
25
+ {{ job | render_job: h=h }}
65
26
  {%- endmacro -%}
66
27
 
67
28
  {%- macro head_job(job) -%}
68
- <h1>{{job.out.outdir | stem | replace: ".immunarch", ""}}</h1>
29
+ <h1>{{job.out.outdir | stem | replace: ".scRep", ""}}</h1>
69
30
  {%- endmacro -%}
70
31
 
71
32
  {{ report_jobs(jobs, head_job, report_job) }}
72
-
73
- <style>
74
- :global(.ccs-li) {
75
- /* default will have messy bullet points */
76
- list-style-type: square;
77
- position: unset !important;
78
- }
79
- </style>
@@ -0,0 +1,16 @@
1
+ {% from "utils/misc.liq" import report_jobs, table_of_images -%}
2
+
3
+ <script>
4
+ import { Image, DataTable, Descr } from "$libs";
5
+ import { Tabs, Tab, TabContent, UnorderedList, ListItem, InlineNotification } from "$ccs";
6
+ </script>
7
+
8
+ {%- macro report_job(job, h=1) -%}
9
+ {{ job | render_job: h=h }}
10
+ {%- endmacro -%}
11
+
12
+ {%- macro head_job(job) -%}
13
+ <h1>{{job.in.screpfile | stem | escape }}</h1>
14
+ {%- endmacro -%}
15
+
16
+ {{ report_jobs(jobs, head_job, report_job) }}
@@ -1,105 +1,15 @@
1
1
  {% from "utils/misc.liq" import report_jobs, table_of_images -%}
2
2
  <script>
3
- import { Image, DataTable } from "$libs";
4
- import { Dropdown } from "$ccs";
3
+ import { Image, DataTable, Descr } from "$libs";
4
+ import { Dropdown, UnorderedList, ListItem } from "$ccs";
5
5
 
6
6
  let count_subject;
7
7
 
8
8
  </script>
9
9
 
10
- {%- macro report_case(casename, h=2) -%}
11
- <h{{h}}>Count table</h{{h}}>
12
- <Dropdown
13
- selectedId="-1"
14
- items={[
15
- { id: "-1", text: "Select a subject" },
16
- {% for i, countfile in job.out.outdir | glob: casename, "counts", "*.txt" | enumerate -%}
17
- { id: "{{i}}", text: "{{countfile | stem}}" },
18
- {% endfor %}
19
- ]}
20
- on:select={({ detail }) => {
21
- count_subject = `{{casename}}-${detail.selectedItem.text}`;
22
- }}
23
- />
24
- {% for countfile in job.out.outdir | glob: casename, "counts", "*.txt" -%}
25
- {#if count_subject == {{ countfile | stem | prepend: casename + '-' | quote }} }
26
- <DataTable src={{
27
- job.out.outdir
28
- | joinpaths: casename, "counts", stem(countfile) + ".txt"
29
- | quote
30
- }} data={ {{
31
- job.out.outdir
32
- | joinpaths: casename, "counts", stem(countfile) + ".txt"
33
- | datatable: sep="\t", nrows=20, index_col=None
34
- }} } />
35
- {/if}
36
- {%- endfor %}
37
-
38
- <h{{h}}>Residency plots</h{{h}}>
39
-
40
- {% if job.out.outdir | joinpaths: casename, "section" | exists %}
41
- {% for groupfile in job.out.outdir | glob: casename, "section", "*.txt" %}
42
- {% set group = groupfile | stem %}
43
- <h{{h+1}}>{{group}}</h{{h+1}}>
44
- {% set scatter_pngs = [] %}
45
- {% for sample in groupfile | readlines %}
46
- {% set spngs = job.out.outdir | glob: casename, "scatter", "scatter_" + sample + "_*.png" %}
47
- {% set _ = scatter_pngs.extend(spngs) %}
48
- {% endfor %}
49
- {{ table_of_images(scatter_pngs, col=3, caps=false) }}
50
- {% endfor %}
51
- {% else %}
52
- {% assign scatter_pngs = job.out.outdir | joinpaths: casename, "scatter", "scatter_*.png" | glob %}
53
- {{ table_of_images(scatter_pngs, col=3, caps=false) }}
54
- {% endif %}
55
-
56
- <h{{h}}>Clonotype overlapping (Venn plots)</h{{h}}>
57
-
58
- {% if job.out.outdir | joinpaths: casename, "section" | exists %}
59
- {% for groupfile in job.out.outdir | glob: casename, "section", "*.txt" %}
60
- {% set group = groupfile | stem %}
61
- <h{{h+1}}>{{group}}</h{{h+1}}>
62
- {% set venn_pngs = [] %}
63
- {% for sample in groupfile | readlines %}
64
- {% set spng = job.out.outdir | glob0: casename, "venn", "venn_" + sample + ".png" %}
65
- {% set _ = venn_pngs.append(spng) %}
66
- {% endfor %}
67
- {{ table_of_images(venn_pngs, col=3) }}
68
- {% endfor %}
69
- {% else %}
70
- {% assign venn_pngs = job.out.outdir | joinpaths: casename, "venn", "*.png" | glob %}
71
- {{ table_of_images(venn_pngs, col=3) }}
72
- {% endif %}
73
-
74
- <h{{h}}>Clonotype overlapping (Upset plots)</h{{h}}>
75
-
76
- {% if job.out.outdir | joinpaths: casename, "section" | exists %}
77
- {% for groupfile in job.out.outdir | glob: casename, "section", "*.txt" %}
78
- {% set group = groupfile | stem %}
79
- <h{{h+1}}>{{group}}</h{{h+1}}>
80
- {% set venn_pngs = [] %}
81
- {% for sample in groupfile | readlines %}
82
- {% set spng = job.out.outdir | glob0: casename, "upset", "upset_" + sample + ".png" %}
83
- {% set _ = venn_pngs.append(spng) %}
84
- {% endfor %}
85
- {{ table_of_images(venn_pngs, col=3) }}
86
- {% endfor %}
87
- {% else %}
88
- {% assign venn_pngs = job.out.outdir | joinpaths: casename, "upset", "*.png" | glob %}
89
- {{ table_of_images(venn_pngs, col=3) }}
90
- {% endif %}
91
- {%- endmacro -%}
92
10
 
93
11
  {%- macro report_job(job, h=1) -%}
94
- {% set casedirs = job.out.outdir | glob: "*" %}
95
- {% if len(casedirs) == 1 %}
96
- {{ report_case(stem(casedirs[0]), h) }}
97
- {% else %}
98
- {% for casedir in casedirs %}
99
- <h{{h}}>{{casedir | stem}}</h{{h}}>
100
- {{ report_case(stem(casedir), h+1) }}
101
- {% endfor %}
102
- {% endif %}
12
+ {{ job | render_job: h=h }}
103
13
  {%- endmacro -%}
104
14
 
105
15
  {%- macro head_job(job) -%}
@@ -1,167 +1,16 @@
1
1
  {% from "utils/misc.liq" import report_jobs, table_of_images -%}
2
2
  <script>
3
- import { Image, DataTable } from "$libs";
4
- import { Tabs, Tab, TabContent, Accordion, AccordionItem } from "$ccs";
3
+ import { Image, DataTable, Descr } from "$libs";
4
+ import { Tabs, Tab, TabContent } from "$ccs";
5
5
  </script>
6
6
 
7
7
  {%- macro report_job(job, h=1) -%}
8
-
9
- <h{{h}}>Exploratory analysis</h{{h}}>
10
-
11
- <h{{h+1}}>CDR3 length distribution</h{{h+1}}>
12
-
13
- {% assign lenpngs = job.out.outdir | glob: "len", "*.png" %}
14
- {{ table_of_images(lenpngs) }}
15
-
16
- <h{{h+1}}>Clonotype volume (# clonotypes)</h{{h+1}}>
17
-
18
- {% assign volpngs = job.out.outdir | glob: "volume", "*.png" %}
19
- {{ table_of_images(volpngs) }}
20
-
21
- <h{{h+1}}>Clonotype abundances</h{{h+1}}>
22
-
23
- {% assign cntpngs = job.out.outdir | glob: "count", "*.png" %}
24
- {{ table_of_images(cntpngs) }}
25
-
26
- <h{{h}}>Clonality</h{{h}}>
27
-
28
- <h{{h+1}}>Top clones</h{{h+1}}>
29
-
30
- {% assign tcpngs = job.out.outdir | glob: "top_clones", "*.png" %}
31
- {{ table_of_images(tcpngs) }}
32
-
33
- <h{{h+1}}>Rare clones</h{{h+1}}>
34
-
35
- {% assign rcpngs = job.out.outdir | glob: "rare_clones", "*.png" %}
36
- {{ table_of_images(rcpngs) }}
37
-
38
- <h{{h+1}}>Clonal space homeostasis</h{{h+1}}>
39
-
40
- <p>The proportion of the repertoire occupied by the clones of a given size</p>
41
-
42
- {% assign hcpngs = job.out.outdir | glob: "homeo_clones", "*.png" %}
43
- {{ table_of_images(hcpngs) }}
44
-
45
- <h{{h}}>Repertoire overlaps</h{{h}}>
46
-
47
- {% if job.index == 0 %}
48
- <Accordion>
49
- <AccordionItem title="Overlapping methods">
50
- <p>
51
- Repertoire overlap is the most common approach to measure repertoire similarity.
52
- Immunarch provides several indices:
53
- </p>
54
- <p>
55
- - number of public clonotypes (.method = "public") - a classic measure of overlap similarity.
56
- </p>
57
- <p>
58
- - overlap coefficient (.method = "overlap") - a normalised measure of overlap
59
- similarity. It is defined as the size of the intersection divided by the smaller of the size of the two sets.
60
- </p>
61
- <p>
62
- - Jaccard index (.method = "jaccard") - it measures similarity between finite
63
- sample sets, and is defined as the size of the intersection divided by the size of the union of the sample sets.
64
- </p>
65
- <p>
66
- - Tversky index (.method = "tversky") - an asymmetric similarity measure on sets
67
- that compares a variant to a prototype. If using default arguments, it’s similar to Dice’s coefficient.
68
- </p>
69
- <p>
70
- - cosine similarity (.method = "cosine") - a measure of similarity between two non-zero vectors
71
- </p>
72
- <p>
73
- - Morisita’s overlap index (.method = "morisita") - a statistical measure of dispersion of individuals in a population.
74
- It is used to compare overlap among samples.
75
- </p>
76
- <p>
77
- - incremental overlap - overlaps of the N most abundant clonotypes with incrementally growing N
78
- (.method = "inc+METHOD", e.g., "inc+public" or "inc+morisita").
79
- </p>
80
- </AccordionItem>
81
- </Accordion>
82
- {% endif %}
83
-
84
- {% for ovdir in job.out.outdir | glob: "overlap", "*" | sort %}
85
- {% set ovname = ovdir | basename %}
86
- <h{{h+1}}>{{ovname}}</h{{h+1}}>
87
- {% assign ovpngs = ovdir | glob: "*.png" | sort %}
88
- {{ table_of_images(ovpngs) }}
89
- {% endfor %}
90
-
91
- <h{{h}}>Gene usage</h{{h}}>
92
- {% for gu_dir in job.out.outdir | glob: "gene_usage", "*" | sort %}
93
- {% set gu_name = gu_dir | basename %}
94
- {% if gu_name != "DEFAULT" %}
95
- <h{{h+1}}>{{gu_name}}</h{{h+1}}>
96
- {% endif %}
97
- {% assign gupngs = gu_dir | glob: "*.png" | sort %}
98
- {{ table_of_images(gupngs) }}
99
- {% endfor %}
100
-
101
- <h{{h}}>Spectratyping</h{{h}}>
102
- {% for spect_sam_dir in job.out.outdir | glob: "spectratyping", "*" | sort %}
103
- <h{{h+1}}>{{ spect_sam_dir | basename }}</h{{h+1}}>
104
- {% assign spectpngs = spect_sam_dir | glob: "*.png" | sort %}
105
- {{ table_of_images(spectpngs) }}
106
- {% endfor %}
107
-
108
- <h{{h}}>Diversity estimation</h{{h}}>
109
- {% assign div_met_dirs = job.out.outdir | glob: "diversity", "*" | sort %}
110
- {% for dm_dir in div_met_dirs %}
111
- <h{{h+1}}>{{dm_dir | basename}}</h{{h+1}}>
112
- {% if dm_dir | glob: "diversity.test.*.txt" %}
113
- {% assign dm_test_file = dm_dir | glob0: "diversity.test.*.txt" %}
114
- {% assign dm_test_method = dm_test_file | stem | replace: "diversity.test.", "" %}
115
- <Tabs>
116
- <Tab label="Plot" />
117
- <Tab label="Test: {{dm_test_method}}" />
118
- <div slot="content">
119
- <TabContent>
120
- <Image src={{ dm_dir | joinpaths: "diversity.png" | quote }} />
121
- </TabContent>
122
- <TabContent>
123
- <DataTable src={{ dm_test_file | quote }} data={ {{ dm_test_file | datatable: sep="\t" }} } />
124
- </TabContent>
125
- </div>
126
- </Tabs>
127
- {% else %}
128
- <Image src={{ dm_dir | joinpaths: "diversity.png" | quote }} />
129
- {% endif %}
130
- {% endfor %}
131
-
132
- {% if job.out.outdir | glob: "rarefraction", "*" %}
133
- <h{{h}}>Rarefaction analysis</h{{h}}>
134
- {% for rfdir in job.out.outdir | glob: "rarefraction", "*" | sort %}
135
- {% assign rfname = rfdir | basename %}
136
- {% if rfname != "DEFAULT" %}
137
- <h{{h+1}}>{{rfname}}</h{{h+1}}>
138
- {% endif %}
139
- {% assign rfpngs = rfdir | glob: "*.png" | sort %}
140
- {{ table_of_images(rfpngs) }}
141
- {% endfor %}
142
- {% endif %}
143
-
144
- {% if job.out.outdir | glob: "tracking", "*.png" %}
145
- <h{{h}}>Tracking of clonotypes</h{{h}}>
146
- {% assign trackpngs = job.out.outdir | glob: "tracking", "*.png" | sort %}
147
- {{ table_of_images(trackpngs) }}
148
- {% endif %}
149
-
150
- <h{{h}}>Kmer and sequence motif analysis</h{{h}}>
151
- {% for kmerdir in job.out.outdir | glob: "kmer", "*" | sort %}
152
- {% assign kmercase = kmerdir | basename %}
153
- {% if kmercase != "DEFAULT" %}
154
- <h{{h+1}}>{{kmercase}}</h{{h+1}}>
155
- {% endif %}
156
- {% assign kmerpngs = kmerdir | glob: "*.png" | sort %}
157
- {{ table_of_images(kmerpngs) }}
158
- {% endfor %}
159
-
8
+ {{ job | render_job: h=h }}
160
9
  {%- endmacro -%}
161
10
 
162
11
 
163
12
  {%- macro head_job(job) -%}
164
- <h1>{{job.out.outdir | stem | replace: ".immunarch", ""}}</h1>
13
+ <h1>{{job.out.outdir | stem | replace: ".immunarch", ""}}</h1>
165
14
  {%- endmacro -%}
166
15
 
167
16
  {{ report_jobs(jobs, head_job, report_job) }}
@@ -1,57 +1,15 @@
1
1
  {% from "utils/misc.liq" import report_jobs -%}
2
2
  <script>
3
- import { Image, DataTable } from "$libs";
3
+ import { Image, DataTable, Descr } from "$libs";
4
4
  import { Tabs, Tab, TabContent } from "$ccs";
5
5
  </script>
6
6
 
7
7
  {%- macro report_job(job, h=1) -%}
8
- <h{{h}}>TCR Cluster size distribution</h{{h}}>
9
-
10
- {% for casedir in job.out.outdir | glob: "ClusterSizeDistribution", "*" %}
11
- {% set casename = casedir | basename %}
12
- {% if casename != "DEFAULT" %}
13
- <h{{h+1}}>{{casename}}</h{{h+1}}>
14
- {% endif %}
15
- <Image src={{casedir | joinpaths: "cluster_size_distribution.png" | quote}} />
16
- {% endfor %}
17
-
18
- <h{{h}}>Shared TCR clusters among samples</h{{h}}>
19
-
20
- {% for casedir in job.out.outdir | glob: "SharedClusters", "*" %}
21
- {% set casename = casedir | basename %}
22
- {% if casename != "DEFAULT" %}
23
- <h{{h+1}}>{{casename}}</h{{h+1}}>
24
- {% endif %}
25
- <Image src={{casedir | joinpaths: "shared_clusters.png" | quote}} />
26
- {% endfor %}
27
-
28
-
29
- <h{{h}}>Sample diversity using TCR clusters</h{{h}}>
30
-
31
- {% for casedir in job.out.outdir | glob: "SampleDiversity", "*" %}
32
- {% set casename = casedir | basename %}
33
- {% if casename != "DEFAULT" %}
34
- <h{{h+1}}>{{casename}}</h{{h+1}}>
35
- {% endif %}
36
-
37
- <Tabs>
38
- <Tab label="Plot" />
39
- <Tab label="Table" />
40
- <svelte:fragment slot="content">
41
- <TabContent>
42
- <Image src={{casedir | joinpaths: "diversity.png" | quote}} />
43
- </TabContent>
44
- <TabContent>
45
- <DataTable src={{casedir | joinpaths: "diversity.txt" | quote}}
46
- data={ {{ casedir | joinpaths: "diversity.txt" | datatable: sep="\t", index_col=0 }} } />
47
- </TabContent>
48
- </svelte:fragment>
49
- </Tabs>
50
- {% endfor %}
8
+ {{ job | render_job: h=h }}
51
9
  {%- endmacro -%}
52
10
 
53
11
  {%- macro head_job(job) -%}
54
- <h1>{{job.in.immfile | stem | replace: ".immunarch", ""}}</h1>
12
+ <h1>{{job.in.immfile | stem | replace: ".immunarch", ""}}</h1>
55
13
  {%- endmacro -%}
56
14
 
57
15
  {{ report_jobs(jobs, head_job, report_job) }}
@@ -1,39 +1,22 @@
1
1
  {% from "utils/misc.liq" import report_jobs, table_of_images -%}
2
2
  <script>
3
- import { Image, DataTable } from "$libs";
4
- import { Tile } from "$ccs";
3
+ import { Image, DataTable, Descr } from "$libs";
4
+ import { UnorderedList, ListItem } from "$ccs";
5
5
  </script>
6
6
 
7
- <Tile>
7
+ <Descr>
8
+ <h1>Introduction</h1>
8
9
  <p><a href="https://github.com/jcao89757/TESSA" target="_blank">Tessa</a> is a Bayesian model to integrate T cell receptor (TCR) sequence profiling with transcriptomes of T cells. Enabled by the recently developed single cell sequencing techniques, which provide both TCR sequences and RNA sequences of each T cell concurrently, Tessa maps the functional landscape of the TCR repertoire, and generates insights into understanding human immune response to diseases. As the first part of tessa, BriseisEncoder is employed prior to the Bayesian algorithm to capture the TCR sequence features and create numerical embeddings. We showed that the reconstructed Atchley Factor matrices and CDR3 sequences, generated through the numerical embeddings, are highly similar to their original counterparts. The CDR3 peptide sequences are constructed via a RandomForest model applied on the reconstructed Atchley Factor matrices.</p>
9
-
10
+ <p></p>
10
11
  <p>For more information, please refer to the following papers:</p>
11
- <ul>
12
- <li>- <a href="https://www.nature.com/articles/s41592-020-01020-3" target="_blank">Mapping the Functional Landscape of TCR Repertoire</a>, Zhang, Z., Xiong, D., Wang, X. et al. 2021.</li>
13
- <li>- <a href="https://www.nature.com/articles/s42256-021-00383-2" target="_blank">Deep learning-based prediction of the T cell receptor–antigen binding specificity</a>, Lu, T., Zhang, Z., Zhu, J. et al. 2021.</li>
14
- </ul>
15
- </Tile>
16
- <p>&nbsp;</p>
12
+ <UnorderedList>
13
+ <ListItem><a href="https://www.nature.com/articles/s41592-020-01020-3" target="_blank">Mapping the Functional Landscape of TCR Repertoire</a>, Zhang, Z., Xiong, D., Wang, X. et al. 2021.</ListItem>
14
+ <ListItem><a href="https://www.nature.com/articles/s42256-021-00383-2" target="_blank">Deep learning-based prediction of the T cell receptor–antigen binding specificity</a>, Lu, T., Zhang, Z., Zhu, J. et al. 2021.</ListItem>
15
+ </UnorderedList>
16
+ </Descr>
17
17
 
18
18
  {%- macro report_job(job, h=1) -%}
19
- {{ table_of_images(
20
- [
21
- joinpaths(job.outdir, "result", "Cluster_size_dist.png"),
22
- joinpaths(job.outdir, "result", "clone_size.png"),
23
- joinpaths(job.outdir, "result", "exp_TCR_pair_plot.png"),
24
- joinpaths(job.outdir, "result", "TCR_dist_density.png"),
25
- joinpaths(job.outdir, "result", "TCR_explore.png"),
26
- joinpaths(job.outdir, "result", "TCR_explore_clusters.png"),
27
- ],
28
- [
29
- "TESSA cluster size distribution",
30
- "Cluster center size vs. non-center cluster size",
31
- "Expression-TCR distance plot",
32
- "Density of TCR distances",
33
- "Exploratory plot at the TCR level",
34
- "TESSA clusters",
35
- ],
36
- ) }}
19
+ {{ job | render_job: h=h }}
37
20
  {%- endmacro -%}
38
21
 
39
22
  {%- macro head_job(job) -%}
@@ -25,7 +25,14 @@ import { Image } from "$libs";
25
25
  {% for batch_srcs in srcs | batch: col, "" %}
26
26
  {% set outer_loop = loop %}
27
27
  <tr>
28
- {% for src in batch_srcs %}
28
+ {% for srcinfo in batch_srcs %}
29
+ {% if srcinfo | isinstance: str %}
30
+ {% set src = srcinfo %}
31
+ {% set download = None %}
32
+ {% else %}
33
+ {% set src = srcinfo['src'] %}
34
+ {% set download = srcinfo.get('download', None) %}
35
+ {% endif %}
29
36
  {% set i = col * outer_loop.index0 + loop.index0 %}
30
37
  {% if i >= len(srcs) %}
31
38
  <td style="width: {{table_width / col}}%"></td>
@@ -33,20 +40,28 @@ import { Image } from "$libs";
33
40
  <td style="width: {{table_width / col}}%; vertical-align:top;">
34
41
  {% if caps is none %}
35
42
  <div
36
- style="padding-left: 28px; font-weight: bold; padding-top: 10px; margin-bottom: -10px;">
43
+ style="padding-left: 28px; font-weight: bold; padding-top: 16px;">
37
44
  {{ src | stem }}
38
45
  </div>
39
46
  {% elif caps is false %}
40
47
  {% else %}
41
48
  <div
42
- style="padding-left: 28px; font-weight: bold; padding-top: 10px; margin-bottom: -10px;">
49
+ style="padding-left: 28px; font-weight: bold; padding-top: 16px;">
43
50
  {{ caps[i] }}
44
51
  </div>
45
52
  {% endif %}
46
- <Image
47
- style="max-width: 90%"
48
- src={{src | quote}}
49
- />
53
+ {% if download %}
54
+ <Image
55
+ style="max-width: 90%"
56
+ src={{src | quote}}
57
+ download={ {{download | json}} }
58
+ />
59
+ {% else %}
60
+ <Image
61
+ style="max-width: 90%"
62
+ src={{src | quote}}
63
+ />
64
+ {% endif %}
50
65
  </td>
51
66
  {% endif %}
52
67
  {% endfor %}