scout-browser 4.87.1__py3-none-any.whl → 4.88__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 (27) hide show
  1. scout/__version__.py +1 -1
  2. scout/adapter/mongo/case.py +2 -0
  3. scout/adapter/mongo/omics_variant.py +50 -10
  4. scout/build/individual.py +4 -0
  5. scout/build/variant/gene.py +2 -1
  6. scout/commands/update/individual.py +1 -0
  7. scout/demo/643594.clinical.vcf.gz +0 -0
  8. scout/demo/643594.clinical.vcf.gz.tbi +0 -0
  9. scout/demo/643594.config.yaml +3 -0
  10. scout/demo/drop/fraser_top_hits_clinical.tsv +5 -5
  11. scout/demo/drop/outrider_top_hits_clinical.tsv +10 -10
  12. scout/load/setup.py +3 -2
  13. scout/models/case/case.py +1 -0
  14. scout/models/case/case_loading_models.py +1 -0
  15. scout/models/omics_variant.py +39 -22
  16. scout/server/blueprints/omics_variants/templates/omics_variants/outliers.html +6 -1
  17. scout/server/blueprints/variant/templates/variant/sv-variant.html +2 -5
  18. scout/server/blueprints/variant/templates/variant/utils.html +49 -0
  19. scout/server/blueprints/variant/templates/variant/variant.html +2 -25
  20. scout/server/blueprints/variant/utils.py +11 -4
  21. scout/server/blueprints/variants/templates/variants/components.html +4 -0
  22. {scout_browser-4.87.1.dist-info → scout_browser-4.88.dist-info}/METADATA +1 -1
  23. {scout_browser-4.87.1.dist-info → scout_browser-4.88.dist-info}/RECORD +27 -27
  24. {scout_browser-4.87.1.dist-info → scout_browser-4.88.dist-info}/LICENSE +0 -0
  25. {scout_browser-4.87.1.dist-info → scout_browser-4.88.dist-info}/WHEEL +0 -0
  26. {scout_browser-4.87.1.dist-info → scout_browser-4.88.dist-info}/entry_points.txt +0 -0
  27. {scout_browser-4.87.1.dist-info → scout_browser-4.88.dist-info}/top_level.txt +0 -0
scout/__version__.py CHANGED
@@ -1 +1 @@
1
- __version__ = "4.87.1"
1
+ __version__ = "4.88"
@@ -534,6 +534,8 @@ class CaseHandler(object):
534
534
  {"RNAfusion_report_research": EXISTS_NOT_NULL},
535
535
  {"RNAfusion_inspector": EXISTS_NOT_NULL},
536
536
  {"RNAfusion_inspector_research": EXISTS_NOT_NULL},
537
+ {"omics_files.fraser": EXISTS_NOT_NULL},
538
+ {"omics_files.outrider": EXISTS_NOT_NULL},
537
539
  ],
538
540
  }
539
541
  return [case["_id"] for case in self.case_collection.find(query)]
@@ -33,20 +33,60 @@ class OmicsVariantHandler:
33
33
 
34
34
  LOG.info("%s variants deleted", result.deleted_count)
35
35
 
36
+ def get_matching_omics_sample_id(self, case_obj: dict, omics_model: dict) -> dict:
37
+ """Select individual that matches omics model sample on omics_sample_id if these are provided."""
38
+ for ind in case_obj.get("individuals"):
39
+ if omics_model["sample_id"] == ind.get("omics_sample_id"):
40
+ return ind
41
+
42
+ def get_matching_sample_id(self, case_obj: dict, omics_model: dict) -> dict:
43
+ """
44
+ Select individual that matches omics model on sample id (as when we are loading a pure RNA case eg).
45
+ """
46
+ for ind in case_obj.get("individuals"):
47
+ if omics_model["sample_id"] == ind.get("individual_id"):
48
+ return ind
49
+
50
+ def _get_affected_individual(self, case_obj: dict) -> dict:
51
+ """
52
+ Fall back to assigning the variants to an individual with affected status to have them display
53
+ on variantS queries.
54
+ """
55
+ for ind in case_obj.get("individuals"):
56
+ if ind.get("phenotype") in [2, "affected"]:
57
+ return ind
58
+
59
+ def _get_first_individual(self, case_obj: dict) -> dict:
60
+ """
61
+ Fall back to assigning the variants to any one individual to have them display
62
+ on variantS queries.
63
+ """
64
+ return case_obj.get("individuals")[0]
65
+
36
66
  def set_samples(self, case_obj: dict, omics_model: dict):
37
- """Internal member function to connect individuals.
38
- OMICS variants do not have a genotype as such."""
67
+ """Internal member function to connect individuals for a single OMICS variant.
68
+ OMICS variants do not have a genotype as such.
69
+ Select individuals that match on omics_sample_id if these are provided.
70
+ For a fallback, match on sample id (as when we are loading a pure RNA case eg),
71
+ or fall back to assigning the variants to an individual with affected status to have them display
72
+ on variantS queries.
73
+ ."""
39
74
 
40
75
  samples = []
41
76
 
42
- for ind in case_obj.get("individuals"):
43
- if omics_model["sampleID"] == ind.get("individual_id"):
44
- sample = {
45
- "sample_id": ind["individual_id"],
46
- "display_name": ind["display_name"],
47
- "genotype_call": "./1",
48
- }
49
- samples.append(sample)
77
+ match = (
78
+ self.get_matching_omics_sample_id(case_obj, omics_model)
79
+ or self.get_matching_sample_id(case_obj, omics_model)
80
+ or self._get_affected_individual(case_obj)
81
+ or self._get_first_individual(case_obj)
82
+ )
83
+
84
+ sample = {
85
+ "sample_id": match["individual_id"],
86
+ "display_name": match["display_name"],
87
+ "genotype_call": "./1",
88
+ }
89
+ samples.append(sample)
50
90
 
51
91
  omics_model["samples"] = samples
52
92
 
scout/build/individual.py CHANGED
@@ -142,4 +142,8 @@ def build_individual(ind: dict) -> dict:
142
142
  ind_obj["bionano_access"] = ind.get("bionano_access", None)
143
143
  ind_obj["fshd_loci"] = ind.get("fshd_loci", None)
144
144
 
145
+ # omics variants
146
+ if "omics_sample_id" in ind:
147
+ ind_obj["omics_sample_id"] = ind["omics_sample_id"]
148
+
145
149
  return ind_obj
@@ -54,7 +54,8 @@ def build_gene(gene, hgncid_to_gene=None):
54
54
  if hgnc_gene:
55
55
  # Set the hgnc symbol etc to the one internally in Scout
56
56
  gene_obj["hgnc_symbol"] = hgnc_gene["hgnc_symbol"]
57
- gene_obj["ensembl_id"] = hgnc_gene["ensembl_id"]
57
+ if "ensembl_id" in hgnc_gene:
58
+ gene_obj["ensembl_id"] = hgnc_gene["ensembl_id"]
58
59
  gene_obj["description"] = hgnc_gene["description"]
59
60
 
60
61
  if hgnc_gene.get("inheritance_models"):
@@ -25,6 +25,7 @@ UPDATE_DICT = {
25
25
  "rhocall_wig": "path",
26
26
  "rna_alignment_path": "path",
27
27
  "rna_coverage_bigwig": "path", # Coverage islands generated from bam or cram files (RNA-seq analysis)
28
+ "omics_sample_id": "str", # RNA sample id for connected wts outliers
28
29
  "splice_junctions_bed": "path", # An indexed junctions .bed.gz file obtained from STAR v2 aligner *.SJ.out.tab file.
29
30
  "subject_id": "str", # Individual subject_id (for matching multiomics data and statistics)
30
31
  "tiddit_coverage_wig": "path",
Binary file
Binary file
@@ -40,6 +40,7 @@ samples:
40
40
  'alignment_index': 'scout/demo/REViewer_test_data/justhusky_exphun_hugelymodelbat_realigned.bam.bai'
41
41
  'vcf': 'scout/demo/REViewer_test_data/justhusky_exphun_hugelymodelbat.vcf'
42
42
  'catalog': 'scout/demo/REViewer_test_data/catalog_test.json'
43
+ omics_sample_id: RNA1059A2
43
44
  rna_alignment_path: scout/demo/reduced_mt.bam
44
45
  rna_coverage_bigwig: scout/demo/ACC5963A1_lanes_1234_star_sorted_sj_filtered.bigWig
45
46
  splice_junctions_bed: scout/demo/ACC5963A1_lanes_1234_star_sorted_sj_filtered_sorted.bed.gz
@@ -62,6 +63,7 @@ samples:
62
63
  mitodel_file: scout/demo/mitodel_test_files/slowlycivilbuck_lanes_1_sorted_md_mitodel.txt
63
64
  mt_bam: scout/demo/reduced_mt.bam
64
65
  vcf2cytosure: scout/demo/ADM1059A1.test.cgh
66
+ omics_sample_id: RNA1059A1
65
67
  rna_alignment_path: scout/demo/reduced_mt.bam
66
68
  rna_coverage_bigwig: scout/demo/ACC5963A1_lanes_1234_star_sorted_sj_filtered.bigWig
67
69
  splice_junctions_bed: scout/demo/ACC5963A1_lanes_1234_star_sorted_sj_filtered_sorted.bed.gz
@@ -80,6 +82,7 @@ samples:
80
82
  mitodel_file: scout/demo/mitodel_test_files/earlycasualcaiman_lanes_1_sorted_md_mitodel.txt
81
83
  mt_bam: scout/demo/reduced_mt.bam
82
84
  vcf2cytosure: scout/demo/ADM1059A3.test.cgh
85
+ omics_sample_id: RNA1059A3
83
86
  rna_alignment_path: scout/demo/reduced_mt.bam
84
87
  rna_coverage_bigwig: scout/demo/ACC5963A1_lanes_1234_star_sorted_sj_filtered.bigWig
85
88
  splice_junctions_bed: scout/demo/ACC5963A1_lanes_1234_star_sorted_sj_filtered_sorted.bed.gz
@@ -1,5 +1,5 @@
1
- hgnc_id geneID hgncSymbol gene_type gene_name_orig sampleID seqnames start end width strand type pValue psiValue deltaPsi counts totalCounts meanCounts meanTotalCounts nonsplitCounts nonsplitProportion nonsplitProportion_99quantile annotatedJunction pValueGene padjustGene PAIRED_END DNA_ID DROP_GROUP SPLICE_COUNTS_DIR HPO_TERMS GENE_COUNTS_FILE GENE_ANNOTATION GENOME isExternal potentialImpact causesFrameshift UTR_overlap blacklist
2
- 2439 ENSG00000119535.18 CSF3R protein_coding CSF3R ADM1059A2 chr1 36479517 Imp 1961 - jaccard 1.6652e-06 0.49 -0.39 127 258 4237.77 4570.55 3 0.01 0.02 both 9.9912e-06 0.013423 True outrider,fraser False annotatedIntron_reducedUsage unlikely 5'-UTR False
3
- 4831 ENSG00000213934.9 HBG1 protein_coding HBG1 ADM1059A2 chr11 5248488 5254291 5804 - jaccard 1.918e-12 0.36 0.35 35 96 22.84 6902.91 0 0.0 0.0 end 5.7541e-12 1.2885e-08 True outrider,fraser False exonSkipping inconclusive 3'-UTR False
4
- 4832 ENSG00000196565.15 HBG2 protein_coding HBG2 ADM1059A2 chr11 5248488 5254291 5804 - jaccard 1.918e-12 0.36 0.35 35 96 22.84 6902.91 0 0.0 0.0 end 3.836e-12 1.2885e-08 True outrider,fraser False exonSkipping inconclusive 3'-UTR False
5
- 17284 ENSG00000213934.9 POT1 protein_coding POT1 ADM1059A2 chr7 124532319 124532434 115 - jaccard 1.918e-12 0.36 0.35 35 96 22.84 6902.91 0 0.0 0.0 end 5.7541e-12 1.2885e-08 True outrider,fraser False exonSkipping inconclusive 3'-UTR False
1
+ hgncId geneID hgncSymbol geneType geneNameOrig sampleID seqnames start end width strand type pValue psiValue deltaPsi counts totalCounts meanCounts meanTotalCounts nonsplitCounts nonsplitProportion nonsplitproportion99quantile annotatedJunction pValueGene padjustGene pairedEnd dnaId dropGroup spliceCountsDir hpoTerms geneCountsFile geneAnnotation genome isExternal potentialImpact causesFrameshift utrOverlap blacklist
2
+ 2439 ENSG00000119535.18 CSF3R protein_coding CSF3R RNA1059A2 chr1 36479517 Imp 1961 - jaccard 1.6652e-06 0.49 -0.39 127 258 4237.77 4570.55 3 0.01 0.02 both 9.9912e-06 True outrider,fraser False annotatedIntron_reducedUsage unlikely 5'-UTR False
3
+ 4831 ENSG00000213934.9 HBG1 protein_coding HBG1 RNA1059A2 chr11 5248488 5254291 5804 - jaccard 1.918e-12 0.36 0.35 35 96 22.84 6902.91 0 0.0 0.0 end 5.7541e-12 1.2885e-08 True outrider,fraser False exonSkipping inconclusive 3'-UTR False
4
+ 4832 ENSG00000196565.15 HBG2 protein_coding HBG2 RNA1059A2 chr11 5248488 5254291 5804 - jaccard 1.918e-12 0.36 0.35 35 96 22.84 6902.91 0 0.0 0.0 end 3.836e-12 1.2885e-08 True outrider,fraser False exonSkipping inconclusive 3'-UTR False
5
+ 17284 ENSG00000213934.9 POT1 protein_coding POT1 RNA1059A2 chr7 124532319 124532434 115 - jaccard 1.918e-12 0.36 0.35 35 96 22.84 6902.91 0 0.0 0.0 end 5.7541e-12 1.2885e-08 True outrider,fraser False exonSkipping inconclusive 3'-UTR False
@@ -1,10 +1,10 @@
1
- hgnc_id seqnames start end strand geneID hgncSymbol gene_type gene_name_orig sampleID pValue padjust zScore l2fc rawcounts normcounts meanCorrected theta aberrant AberrantBySample AberrantByGene padj_rank FDR_set foldChange
2
- 25415 chr4 88257620 88284769 - ENSG00000163644.15 PPM1K protein_coding PPM1K ADM1059A2 0.0016124374690447165 1.0 -5.92 -0.9 27 317.46 601.46 139.77 False 4.0 0.0 6110.0 transcriptome-wide 0.54
3
- 10019 chr6 3063824 3115187 + ENSG00000137275.16 RIPK1 protein_coding RIPK1 ADM1059A2 0.0009997468998232232 1.0 6.33 0.53 104 1891.09 1308.4 547.35 False 4.0 0.0 6110.0 transcriptome-wide 1.44
4
- 4827 chr11 5225464 5229395 - ENSG00000244734.4 HBB protein_coding HBB ADM1059A2 3.417496739472308e-25 4.169327890311004e-20 -12.61 -10.14 61 2625.42 3016434.64 9.21 True 4.0 1.0 1.0 transcriptome-wide 0.0
5
- 4831 chr11 5248269 5249857 - ENSG00000213934.9 HBG1 protein_coding HBG1 ADM1059A3 0.0016205310428587193 1.0 2.23 2.86 73 151.01 19.19 0.91 False 4.0 0.0 6110.0 transcriptome-wide 7.26
6
- 16860 chr12 108522214 108561400 - ENSG00000075856.12 SART3 protein_coding SART3 ADM1059A2 0.0014636643867152977 1.0 7.02 0.51 97 1412.71 989.2 1000.0 False 4.0 0.0 6110.0 transcriptome-wide 1.42
7
- 4824 chr16 172876 173710 + ENSG00000188536.13 HBA2 protein_coding HBA2 ADM1059A2 2.15484140654196e-24 1.2729742965811128e-19 -12.53 -10.01 262 6781.29 7019330.9 8.97 True 4.0 1.0 2.5 transcriptome-wide 0.0
8
- 4823 chr16 176680 177522 + ENSG00000206172.8 HBA1 protein_coding HBA1 ADM1059A2 3.1302782768232926e-24 1.2729742965811128e-19 -12.5 -9.97 246 6497.61 6540277.08 8.95 True 4.0 1.0 2.5 transcriptome-wide 0.0
9
- 9543 chr17 4796144 4798502 + ENSG00000142507.10 PSMB6 protein_coding PSMB6 ADM1059A2 0.0010771639306525651 1.0 -10.54 -1.14 13 342.89 783.82 1000.0 False 4.0 0.0 6110.0 transcriptome-wide 0.45
10
- 17284 chr7 124532319 124532434 - ENSG00000213934.9 POT1 protein_coding POT1 ADM1059A2 0.0016205310428587193 1.0 2.23 2.86 73 151.01 19.19 0.91 False 4.0 0.0 6110.0 transcriptome-wide 7.26
1
+ hgncId seqnames start end strand geneID hgncSymbol geneType geneNameOrig sampleID pValue padjust zScore l2fc rawcounts normcounts meanCorrected theta aberrant aberrantbysample aberrantbygene padjRank FDRset foldChange
2
+ 25415 chr4 88257620 88284769 - ENSG00000163644.15 PPM1K protein_coding PPM1K RNA1059A2 0.0016124374690447165 1.0 -5.92 -0.9 27 317.46 601.46 139.77 False 4.0 0.0 6110.0 transcriptome-wide 0.54
3
+ 10019 chr6 3063824 3115187 + ENSG00000137275.16 RIPK1 protein_coding RIPK1 RNA1059A2 0.0009997468998232232 1.0 6.33 0.53 104 1891.09 1308.4 547.35 False 4.0 0.0 6110.0 transcriptome-wide 1.44
4
+ 4827 chr11 5225464 5229395 - ENSG00000244734.4 HBB protein_coding HBB RNA1059A2 3.417496739472308e-25 4.169327890311004e-20 -12.61 -10.14 61 2625.42 3016434.64 9.21 True 4.0 1.0 1.0 transcriptome-wide 0.0
5
+ 4831 chr11 5248269 5249857 - ENSG00000213934.9 HBG1 protein_coding HBG1 RNA1059A3 0.0016205310428587193 1.0 2.23 2.86 73 151.01 19.19 0.91 False 4.0 0.0 6110.0 transcriptome-wide 7.26
6
+ 16860 chr12 108522214 108561400 - ENSG00000075856.12 SART3 protein_coding SART3 RNA1059A2 0.0014636643867152977 1.0 7.02 0.51 97 1412.71 989.2 1000.0 False 4.0 0.0 6110.0 transcriptome-wide 1.42
7
+ 4824 chr16 172876 173710 + ENSG00000188536.13 HBA2 protein_coding HBA2 RNA1059A2 2.15484140654196e-24 1.2729742965811128e-19 -12.53 -10.01 262 6781.29 7019330.9 8.97 True 4.0 1.0 2.5 transcriptome-wide 0.0
8
+ 4823 chr16 176680 177522 + ENSG00000206172.8 HBA1 protein_coding HBA1 RNA1059A2 3.1302782768232926e-24 1.2729742965811128e-19 -12.5 -9.97 246 6497.61 6540277.08 8.95 True 4.0 1.0 2.5 transcriptome-wide 0.0
9
+ 9543 chr17 4796144 4798502 + ENSG00000142507.10 PSMB6 protein_coding PSMB6 RNA1059A2 0.0010771639306525651 1.0 -10.54 -1.14 13 342.89 783.82 1000.0 False 4.0 0.0 6110.0 transcriptome-wide 0.45
10
+ 17284 chr7 124532319 124532434 - ENSG00000213934.9 POT1 protein_coding POT1 RNA1059A2 0.0016205310428587193 1.0 2.23 2.86 73 151.01 19.19 0.91 False 4.0 0.0 6110.0 transcriptome-wide 7.26
scout/load/setup.py CHANGED
@@ -158,8 +158,9 @@ def setup_scout(
158
158
  # Create a map from ensembl ids to gene objects
159
159
  ensembl_genes = {}
160
160
  for gene_obj in hgnc_genes:
161
- ensembl_id = gene_obj["ensembl_id"]
162
- ensembl_genes[ensembl_id] = gene_obj
161
+ ensembl_id = gene_obj.get("ensembl_id")
162
+ if ensembl_id:
163
+ ensembl_genes[ensembl_id] = gene_obj
163
164
 
164
165
  # Load transcripts
165
166
  tx_path = "transcripts{}_path".format(build)
scout/models/case/case.py CHANGED
@@ -31,6 +31,7 @@ individual = dict(
31
31
  smn_27134_cn=int, # CopyNumber
32
32
  rna_alignment_path=str, # Path to bam file
33
33
  rna_coverage_bigwig=str, # Coverage islands generated from bam or cram files (RNA-seq analysis)
34
+ omics_sample_id=str, # RNA sample id for connected wts outliers
34
35
  splice_junctions_bed=str, # An indexed junctions .bed.gz file obtained from STAR v2 aligner *.SJ.out.tab file.
35
36
  predicted_ancestry=str, # one of AFR AMR EAS EUR SAS UNKNOWN
36
37
  tumor_type=str,
@@ -221,6 +221,7 @@ class SampleLoader(BaseModel):
221
221
  rhocall_wig: Optional[str] = None
222
222
  rna_alignment_path: Optional[str] = None
223
223
  rna_coverage_bigwig: Optional[str] = None
224
+ omics_sample_id: Optional[str] = None
224
225
  sample_name: Optional[str] = None
225
226
  sex: Literal["unknown", "female", "male"]
226
227
  smn1_cn: Optional[int] = None
@@ -9,7 +9,7 @@ import logging
9
9
  from datetime import datetime
10
10
  from typing import List, Optional
11
11
 
12
- from pydantic import BaseModel, Field, field_validator, model_validator
12
+ from pydantic import AliasChoices, BaseModel, Field, field_validator, model_validator
13
13
 
14
14
  LOG = logging.getLogger(__name__)
15
15
 
@@ -38,18 +38,28 @@ class OmicsVariantLoader(BaseModel):
38
38
 
39
39
  # sample id is mandatory: each row pertains to one outlier event in one individual as compared to others
40
40
  # In the db object, this will be replaced with a "samples" array of individual dict.
41
- sampleID: str
41
+ sample_id: str = Field(
42
+ alias=AliasChoices("sample_id", "sampleID"), serialization_alias="sample_id"
43
+ )
42
44
 
43
45
  # outlier variants must identify the gene they pertain to, primarily with an hgnc_id
44
- hgnc_ids: Optional[List[int]] = Field(alias="hgnc_id", serialization_alias="hgnc_ids")
45
- geneID: Optional[str]
46
+ hgnc_ids: Optional[List[int]] = Field(alias="hgncId", serialization_alias="hgnc_ids")
47
+ ensembl_gene_id: Optional[str] = Field(
48
+ alias="geneID", serialization_alias="ensembl_gene_id", default=None
49
+ )
46
50
 
47
51
  hgnc_symbols: Optional[List[str]] = Field(
48
52
  alias="hgncSymbol", serialization_alias="hgnc_symbols"
49
53
  )
50
- gene_name_orig: Optional[str]
54
+ gene_name_orig: Optional[str] = Field(
55
+ alias=AliasChoices("geneNameOrig", "gene_name_orig"),
56
+ serialization_alias="gene_name_orig",
57
+ default=None,
58
+ )
51
59
 
52
- gene_type: Optional[str]
60
+ gene_type: Optional[str] = Field(
61
+ alias=AliasChoices("gene_type", "geneType"), serialization_alias="gene_type", default=None
62
+ )
53
63
 
54
64
  # coordinates if applicable
55
65
  chromosome: Optional[str] = Field(alias="seqnames", serialization_alias="chromosome")
@@ -85,7 +95,7 @@ class OmicsVariantLoader(BaseModel):
85
95
  alias="nonsplitProportion", serialization_alias="nonsplit_proportion", default=None
86
96
  )
87
97
  nonsplit_proportion_99quantile: Optional[float] = Field(
88
- alias="nonsplitProportion_99quantile",
98
+ alias="nonsplitproportion99quantile",
89
99
  serialization_alias="nonsplit_proportion_99quantile",
90
100
  default=None,
91
101
  )
@@ -99,7 +109,7 @@ class OmicsVariantLoader(BaseModel):
99
109
  alias="padjustGene", serialization_alias="p_adjust_gene", default=None
100
110
  )
101
111
  paired_end: Optional[str] = Field(
102
- alias="PAIRED_END", serialization_alias="paired_end", default=None
112
+ alias="pairedEnd", serialization_alias="paired_end", default=None
103
113
  )
104
114
  is_external: Optional[bool] = Field(
105
115
  alias="isExternal", serialization_alias="is_external", default=None
@@ -111,16 +121,22 @@ class OmicsVariantLoader(BaseModel):
111
121
  alias="causesFrameshift", serialization_alias="causes_frameshift", default=None
112
122
  )
113
123
  utr_overlap: Optional[str] = Field(
114
- alias="UTR_overlap", serialization_alias="utr_overlap", default=None
124
+ alias="utrOverlap", serialization_alias="utr_overlap", default=None
115
125
  )
116
126
 
117
127
  # Outrider specific
118
128
  padjust: Optional[float] = None
119
129
  zscore: Optional[float] = Field(alias="zScore", serialization_alias="zscore", default=None)
120
130
  l2fc: Optional[float] = None
121
- rawcounts: Optional[int] = None
122
- normcounts: Optional[float] = None
123
- meanCorrected: Optional[float] = None
131
+ raw_counts: Optional[int] = Field(
132
+ alias="rawcounts", serialization_alias="raw_counts", default=None
133
+ )
134
+ norm_counts: Optional[float] = Field(
135
+ alias="normcounts", serialization_alias="norm_counts", default=None
136
+ )
137
+ mean_corrected: Optional[float] = Field(
138
+ alias="meanCorrected", serialization_alias="mean_corrected", default=None
139
+ )
124
140
  theta: Optional[float] = None
125
141
  aberrant: Optional[bool] = None
126
142
  aberrant_by_sample: Optional[float] = Field(
@@ -135,6 +151,13 @@ class OmicsVariantLoader(BaseModel):
135
151
  alias="foldChange", serialization_alias="fold_change", default=None
136
152
  )
137
153
 
154
+ @model_validator(mode="before")
155
+ @classmethod
156
+ def empty_str_to_none(cls, values):
157
+ if isinstance(values, dict):
158
+ return {k: (None if v == "" else v) for k, v in values.items()}
159
+ return values
160
+
138
161
  @field_validator("chromosome")
139
162
  def strip_chr(cls, chrom: str) -> str:
140
163
  """We store chromosome names without a chr prefix internally."""
@@ -162,8 +185,10 @@ class OmicsVariantLoader(BaseModel):
162
185
  """HGNC ids and gene symbols are found one on each line in DROP tsvs.
163
186
  Convert to a list with a single member in omics_variants for storage."""
164
187
 
165
- if "hgnc_id" in values:
166
- values["hgnc_id"] = [int(values.get("hgnc_id"))]
188
+ if "hgncId" in values:
189
+ values["hgncId"] = [int(values.get("hgncId"))]
190
+ elif "hgnc_id" in values:
191
+ values["hgncId"] = [int(values.get("hgnc_id"))]
167
192
 
168
193
  if "hgncSymbol" in values:
169
194
  values["hgncSymbol"] = [str(values.get("hgncSymbol"))]
@@ -206,14 +231,6 @@ class OmicsVariantLoader(BaseModel):
206
231
  )
207
232
  return values
208
233
 
209
- @model_validator(mode="before")
210
- def set_sample_display_name(cls, values) -> "OmicsVariantLoader":
211
- """Set a display name."""
212
- values["display_name"] = values.get(
213
- "display_name", values.get("sample_name", values.get("individual_id"))
214
- )
215
- return values
216
-
217
234
 
218
235
  def get_qualification(values: dict) -> str:
219
236
  """Get qualification string for ID and display name.
@@ -109,7 +109,12 @@
109
109
  {% endif %}
110
110
  </td>
111
111
  <td class="text-end">{{ '%.3e' % variant.p_value }}</td>
112
- <td>{{ case.individuals.0.display_name }}</td>
112
+ <td>{% for sample in variant.samples %}
113
+ {% if sample.genotype_call != "./." %}
114
+ <div>{{ sample.display_name }}</div>
115
+ {% endif %}
116
+ {% endfor %}
117
+ </td>
113
118
  <td class="text-end">{{ variant.chromosome }}</td>
114
119
  <td class="text-end"><span style="white-space: nowrap;">{{ variant.position|human_longint|safe }}</span>-<span style="white-space: nowrap;">{{ variant.end|human_longint|safe }}</span>
115
120
  {% if case.has_rna_tracks %}
@@ -2,7 +2,7 @@
2
2
  {% from "utils.html" import activity_panel, comments_panel, pedigree_panel %}
3
3
  {% from "variant/variant_details.html" import old_observations %}
4
4
  {% from "variant/components.html" import external_scripts, external_stylesheets, matching_variants, variant_scripts %}
5
- {% from "variant/utils.html" import causative_button, genes_panel, igv_track_selection, modal_causative, overlapping_panel, sv_alignments, pin_button, transcripts_panel, custom_annotations %}
5
+ {% from "variant/utils.html" import causative_button, genes_panel, igv_track_selection, modal_causative, overlapping_panel, sv_alignments, pin_button, transcripts_panel, custom_annotations, gene_panels %}
6
6
  {% from "variant/rank_score_results.html" import rankscore_panel %}
7
7
  {% from "variant/gene_disease_relations.html" import orpha_omim_phenotypes %}
8
8
  {% from "variant/variant_details.html" import frequencies, gtcall_panel, observations_panel %}
@@ -189,10 +189,7 @@
189
189
  {% endif %}
190
190
 
191
191
  <div class="list-group-item">
192
- <strong>Gene panels:</strong><br>
193
- {% for panel_id in variant.panels|sort(case_sensitive=False) %}
194
- <a href="{{ url_for('panels.panel', panel_id=panel_id) }}">{{ panel_id }}</a>&nbsp;&nbsp;
195
- {% endfor %}
192
+ {{ gene_panels(variant) }}
196
193
  </div>
197
194
  <div class="list-group mt-3">
198
195
  <div>
@@ -443,3 +443,52 @@
443
443
  </tbody>
444
444
  </table>
445
445
  {% endmacro %}
446
+
447
+
448
+ {% macro gene_panels(variant) %}
449
+ <strong>Gene panels:</strong><br>
450
+ {% for panel in variant.case_panels|sort(attribute='panel_name', case_sensitive=False)|rejectattr('removed') %}
451
+ {% set symbol_genes_counter = namespace(value=0) %}
452
+ {% set nosymbol_genes_counter = namespace(value=0) %}
453
+ <a
454
+ href="{{ url_for('panels.panel', panel_id=panel.panel_id) }}"
455
+ {#
456
+ Add hovertip listing occurence of each gene on selected panels, in the case
457
+ where variant covers multiple genes.
458
+ #}
459
+ {% if (variant.genes | length) > 1 %}
460
+ class="badge bg-secondary text-white"
461
+ data-bs-original-title="Genes on gene panel"
462
+ data-bs-toggle="popover"
463
+ data-bs-html="true"
464
+ data-bs-trigger="hover click"
465
+ data-bs-content="
466
+
467
+ {% for gene in variant.genes %}
468
+ {% if panel['panel_name'] in gene['associated_gene_panels'] %}
469
+ {% if symbol_genes_counter.value <= 30 %}
470
+ {% if gene.common %}
471
+ {{ gene.common.hgnc_symbol }}
472
+ {% else %}
473
+ {% for panel_gene in panel.genes %}
474
+ {% if gene.hgnc_id == panel_gene.hgnc_id %}
475
+ {{ panel_gene.symbol + "&nbsp;" }}
476
+ {% endif %}
477
+ {% endfor %}
478
+ {% endif %}
479
+ {% set symbol_genes_counter.value = symbol_genes_counter.value +1 %}
480
+ {% else %}
481
+ {% set nosymbol_genes_counter.value = nosymbol_genes_counter.value +1 %}
482
+ {% endif %}
483
+ {% endif %}
484
+ {% endfor %}
485
+
486
+ {% if nosymbol_genes_counter.value %}
487
+ + {{nosymbol_genes_counter.value}} other genes
488
+ {% endif %}
489
+
490
+ "
491
+ {% endif %}
492
+ >{{ panel.panel_name }}</a>&nbsp;&nbsp;
493
+ {% endfor %}
494
+ {% endmacro %}
@@ -2,7 +2,7 @@
2
2
  {% from "variant/buttons.html" import database_buttons %}
3
3
  {% from "utils.html" import activity_panel, comments_panel, pedigree_panel %}
4
4
  {% from "variants/utils.html" import compounds_table %}
5
- {% from "variant/utils.html" import causative_button, genes_panel, modal_causative, overlapping_panel, pin_button, proteins_panel, transcripts_panel, custom_annotations %}
5
+ {% from "variant/utils.html" import causative_button, genes_panel, modal_causative, overlapping_panel, pin_button, proteins_panel, transcripts_panel, custom_annotations, gene_panels %}
6
6
  {% from "variant/tx_overview.html" import disease_associated, transcripts_overview %}
7
7
  {% from "variant/gene_disease_relations.html" import autozygosity_panel, genemodels_panel, inheritance_panel, orpha_omim_phenotypes %}
8
8
  {% from "variant/variant_details.html" import conservations, frequencies, gtcall_panel, mappability, observations_panel, old_observations, severity_list, str_db_card %}
@@ -373,30 +373,7 @@
373
373
  </table>
374
374
  <ul class="list-group">
375
375
  <div class="list-group-item">
376
- <strong>Gene panels:</strong><br>
377
- {% for panel in variant.case_panels|sort(attribute='panel_name', case_sensitive=False)|rejectattr('removed') %}
378
- <a
379
- href="{{ url_for('panels.panel', panel_id=panel.panel_id) }}"
380
- {#
381
- Add hovertip listing occurence of each gene on selected panels, in the case
382
- where variant covers multiple genes.
383
- #}
384
- {% if (variant.genes | length) > 1 %}
385
- class="badge bg-secondary text-white"
386
- data-bs-original-title="Genes on gene panel"
387
- data-bs-toggle="popover"
388
- data-bs-html="true"
389
- data-bs-trigger="hover click"
390
- data-bs-content="
391
- {% for gene in variant.genes %}
392
- {% if panel['panel_name'] in gene['associated_gene_panels'] %}
393
- {{ gene.common.hgnc_symbol if gene.common else gene.hgnc_id }}
394
- {% endif%}
395
- {%endfor%}
396
- "
397
- {% endif %}
398
- >{{ panel.panel_name }}</a>&nbsp;&nbsp;
399
- {% endfor %}
376
+ {{ gene_panels(variant) }}
400
377
  </div>
401
378
  </ul>
402
379
  {% if variant.category != "str" %}
@@ -612,12 +612,19 @@ def callers(variant_obj):
612
612
  def associate_variant_genes_with_case_panels(case_obj: Dict, variant_obj: Dict) -> None:
613
613
  """Add associated gene panels to each gene in variant object"""
614
614
 
615
- genes = variant_obj.get("genes", [])
615
+ geneid_gene: Dict[int, dict] = {
616
+ gene["hgnc_id"]: gene for gene in variant_obj.get("genes", [])
617
+ } # This has max 30 elements for SVs
618
+ geneids: List[int] = variant_obj.get("hgnc_ids", []) # This can be a long list, n > 30 for SVs
616
619
 
617
- for gene in genes:
618
- hgnc_id = gene["hgnc_id"]
620
+ for hgnc_id in geneids:
619
621
  matching_panels = []
620
622
  for panel in case_obj.get("latest_panels", []):
621
623
  if hgnc_id in panel["hgnc_ids"]:
622
624
  matching_panels.append(panel["panel_name"])
623
- gene["associated_gene_panels"] = matching_panels
625
+ if hgnc_id not in geneid_gene:
626
+ geneid_gene[hgnc_id] = {"hgnc_id": hgnc_id, "associated_gene_panels": matching_panels}
627
+ else:
628
+ geneid_gene[hgnc_id]["associated_gene_panels"] = matching_panels
629
+
630
+ variant_obj["genes"] = list(geneid_gene.values())
@@ -367,6 +367,10 @@
367
367
  {{ variant.max_exac_frequency|human_decimal if variant.max_exac_frequency }}
368
368
  </div>
369
369
  {% endif %}
370
+ {% if 'colorsdb_af' in variant %}
371
+ <strong>CoLoRSdb</strong>:
372
+ {{ variant.colorsdb_af|human_decimal if variant.colorsdb_af }}
373
+ {% endif %}
370
374
  </div>
371
375
  ">
372
376
  <div>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: scout-browser
3
- Version: 4.87.1
3
+ Version: 4.88
4
4
  Summary: Clinical DNA variant visualizer and browser.
5
5
  Home-page: https://github.com/Clinical-Genomics/scout
6
6
  Author: Måns Magnusson
@@ -1,11 +1,11 @@
1
1
  scout/__init__.py,sha256=Z4liXvmEcLkC67ElsWvYHfemPKdWgWI5O6MB6XlDM8M,232
2
- scout/__version__.py,sha256=MxHqxpgLxeUC52jVG4Mguf7K9WGCBPbPaPSGhP8EEXE,23
2
+ scout/__version__.py,sha256=S_OcuSdVnX0Ttyr8B4f0ZjvymKdWNJRBY3w6OlW0NKo,21
3
3
  scout/adapter/__init__.py,sha256=-iX_hx2NI1EMAqX0pMd5_90Nnd9uvIMxv9EbefYBzsc,86
4
4
  scout/adapter/client.py,sha256=IuajRsEwTG41ZP14X09Q1Cj94zIgmIvUtlXfcAFn0EA,1513
5
5
  scout/adapter/mongo/__init__.py,sha256=NdHYCUXWUAuX5cUS3-6HCws2hW9uoGep8i0SC-oJd3k,31
6
6
  scout/adapter/mongo/acmg.py,sha256=v2Zuw-6APVmcnBnNXa18WJEu2vj5GUhZNiKMkruJsBI,4170
7
7
  scout/adapter/mongo/base.py,sha256=1vX2QYqbVRLrFijpmAb1ENe6jaF2Bs5owwYa7MhY0vM,4341
8
- scout/adapter/mongo/case.py,sha256=a_ptUdoHScwCpf8uSQhkYWUB4mFDtHVeHmAa9-ig9gQ,60191
8
+ scout/adapter/mongo/case.py,sha256=jaPcGd6s9SWFux0Tv6DX608J1tV2VIU2fGtoNE8undw,60307
9
9
  scout/adapter/mongo/case_events.py,sha256=slHR4XJF9vRuEbuInJKMMAImLF8m7tHWVfGP42fbXr0,26859
10
10
  scout/adapter/mongo/case_group.py,sha256=tG8DuO0rNYepV4k0yCGPqssODErc0HMsAypg3mfhcV0,1575
11
11
  scout/adapter/mongo/clinvar.py,sha256=tczC39O3DFDkYgjt2RDgkkG-x1Mvx_99Hw7dAbIQ5gk,19838
@@ -19,7 +19,7 @@ scout/adapter/mongo/index.py,sha256=TZPVv6xBWsEtZpBUWp5uhjuPjQMfVss4lZZju49g1Lw,
19
19
  scout/adapter/mongo/institute.py,sha256=GQmMKb_VzsvWwadp6gXHlSSpcG5ovF1ozdTzvpTFLpA,7025
20
20
  scout/adapter/mongo/managed_variant.py,sha256=YFdnIhNVIawVhmlOxHOpe6sJyso0FCGdlXOXyhSWol8,8373
21
21
  scout/adapter/mongo/matchmaker.py,sha256=amTvFOlUbrt1RmecY_8hPY6bO3j79lc2UbmzlCQcRuk,6378
22
- scout/adapter/mongo/omics_variant.py,sha256=0sdy4HTzYrULM_lAyrnUTx71YXtGRRDIxkqWq0G0-yg,5188
22
+ scout/adapter/mongo/omics_variant.py,sha256=6VZOrq3VwNQnpXIcGs0zOvkhzHYwGJkzG1vFxwcnJu4,6938
23
23
  scout/adapter/mongo/panel.py,sha256=KRerlJzlm-NZRihDMJzOiD9ECYqqsEkXxkbcLADL0mI,20921
24
24
  scout/adapter/mongo/phenomodel.py,sha256=cypSS8YRzu98Bf1kC0orfrLNn_ZQSYCK8e4mNR5PaPY,2572
25
25
  scout/adapter/mongo/query.py,sha256=bifYuJ5oGYY17No2K8SvbnwCC__R585NaVRJ1oQIVsg,32964
@@ -34,7 +34,7 @@ scout/build/acmg.py,sha256=M21MrrP_dtEyOuu6t-jBDdaqYcHPMLcwJlt9fHG2ycE,1523
34
34
  scout/build/case.py,sha256=wJR3d1n3GMhfQudhSRJM0tust84MuOpOvRcGfx7H6sI,11329
35
35
  scout/build/disease.py,sha256=Zew9AF_z1NbbKcO3uJZ2wgni501SkfnYRgnaCZ4m8FY,2020
36
36
  scout/build/hpo.py,sha256=LJBCTq-x09D0CSKcUHB8a6ynuUrVh_7Ia0ooA1BxMys,1207
37
- scout/build/individual.py,sha256=tWK8iKVujuCoZz-rhBVj-RCnlkU19vCSyJtXhlENwS4,5117
37
+ scout/build/individual.py,sha256=a2L1NJF11oGaOU9LilWN5gftSyIRfk7H231mF2Y67WU,5232
38
38
  scout/build/institute.py,sha256=CZKn-cFbh0cWO2ySoRV_P1nYFizlyvu50LKrtAz-PLo,1330
39
39
  scout/build/managed_variant.py,sha256=krcQBc4LLxlnUQwXuV2FxNLiSkMoIkLxQueYFl04Vyo,1666
40
40
  scout/build/panel.py,sha256=IrTPFPgqXnbE92vvHpa8NqnTRO7GqWcpPBCtMcdzV84,5348
@@ -46,7 +46,7 @@ scout/build/genes/transcript.py,sha256=qXdS7bU1d-ikgN8UOSyW7u34y-qpgcpVuCccP2tKR
46
46
  scout/build/variant/__init__.py,sha256=Y70EK_8TS69seYSyIvL1Mek1FMo3XPeXcOnYVIOWggA,173
47
47
  scout/build/variant/clnsig.py,sha256=uAfrf4RSUGliIp13fW9XqJshodNWxjuAwUbBbNHgmCc,719
48
48
  scout/build/variant/compound.py,sha256=tYikQ4PmgAH1_yrE9uYaUX4_EoAs_XEiT8JWAjrZuDg,816
49
- scout/build/variant/gene.py,sha256=9mS6sEBksBNKDoyo-yo-_5IdSRwYrpF1jIzfNAg6-Ek,3815
49
+ scout/build/variant/gene.py,sha256=Fj_ouJtNAZOvxYVo9oVXaYJE5_zx-mJqL-uOARD4ku8,3857
50
50
  scout/build/variant/genotype.py,sha256=QDTZWFB8ix9Zd1m9UPWgT008i6rC7gT-uFzRr9GniDU,1009
51
51
  scout/build/variant/transcript.py,sha256=hf_led1kdT3hVEwtHdORhBSk6a6o_zEDJ0z4ZF8IlFA,1205
52
52
  scout/build/variant/variant.py,sha256=1BcGarXmLm8mUVmhwBWRBx9tt7C4Rwb8qBJ7STnsAqE,18509
@@ -102,7 +102,7 @@ scout/commands/update/compounds.py,sha256=vwCtb6045tGovKWHqY_uL8w1l9rZ_Hxlt0gUU0
102
102
  scout/commands/update/disease.py,sha256=AajPLoEtd9YeU3jf7S7ZQRs3_o1H3GSxHsST_sVaIZQ,3846
103
103
  scout/commands/update/genes.py,sha256=GhYIn2zWrAZMhdJjzzrpo8AquFqr7XOvosOk8lg4Zwk,6989
104
104
  scout/commands/update/hpo.py,sha256=eyCuUlUwPmyP0oLh1olXhdqInlUXDdLe8ylgTlHWi-g,1339
105
- scout/commands/update/individual.py,sha256=lwVQcKCZj5VxUSO8CcBUsvVRl3ZHgJVe4AE9pcJS7ys,4007
105
+ scout/commands/update/individual.py,sha256=z2NY4f97GuYPRX7UCwSqbUMi-l-W0bRqN2xF6ilmKNU,4081
106
106
  scout/commands/update/institute.py,sha256=ms8mmTGfCXqxeh_vSB1cdNDGrdHoSSgh9ryhB5GrJQc,1727
107
107
  scout/commands/update/omim.py,sha256=s39qterBGhtBfW7Uc-IJabni93PIhT8shqVbkmQBb9k,2309
108
108
  scout/commands/update/panel.py,sha256=990shZ15k5pwHUkd767o8oQ5iqVIpgRA7N_9yv1_eqc,2912
@@ -152,9 +152,9 @@ scout/demo/643594.clinical.str.stranger.vcf.gz,sha256=DpE8RC4T9WBWlIeqjFTqTy27-_
152
152
  scout/demo/643594.clinical.str.stranger.vcf.gz.tbi,sha256=iK9m4kT4eZWcQxl_ajDB43Er8WD92Q0nxEe1jwYSZ_8,2809
153
153
  scout/demo/643594.clinical.str.vcf.gz,sha256=ElvicUseKkN-DiZOQrFXstxy2jo9lhVMn58P_gvX-Zs,1631
154
154
  scout/demo/643594.clinical.str.vcf.gz.tbi,sha256=pyWRI8-DlfGw08S66nYqLOthbaRaNMpAhUACm48iM5A,1695
155
- scout/demo/643594.clinical.vcf.gz,sha256=ukJjOeF1VuIej02garL_U6aq4Ef8WuO6qOknzK46HPg,408818
156
- scout/demo/643594.clinical.vcf.gz.tbi,sha256=G4RJMk1GYIDS1IVfXPVkGFtmPN_m0jwwqltdWWuk1A8,7721
157
- scout/demo/643594.config.yaml,sha256=mxuX82stt0EyTITI18earZyVagdgEP3OHjqd-o-1r9Q,5373
155
+ scout/demo/643594.clinical.vcf.gz,sha256=KpGBJPNfqOEE0uOkdldAeFRxdmPMPIlksiypXRhtOoE,409450
156
+ scout/demo/643594.clinical.vcf.gz.tbi,sha256=Pr1XyC4gonboAlTasdT-a7w7T8bNQXjV_G5hVdC9dy8,7732
157
+ scout/demo/643594.config.yaml,sha256=-6V9905gPYwFxNkxBKqqanTMrG1tbpMOH82udBz2HA0,5466
158
158
  scout/demo/643594.ped,sha256=P-k5eZY78ZRtajMDQ_rr7Xv5oFhBO-vDc7whg36Jnw4,154
159
159
  scout/demo/643594.ped_check.csv,sha256=36HoP13haqQerTEHuJF4R2r6Vh2AQilS1NTr7X6aoZs,444
160
160
  scout/demo/643594.peddy.ped,sha256=msfhM3u_5hK_zjHhMas5Ns_KREllRyHN3kdTIVl5J-c,421
@@ -220,8 +220,8 @@ scout/demo/REViewer_test_data/catalog_test.json,sha256=PRW2kEHewbKSCDmeCroD_xr02
220
220
  scout/demo/REViewer_test_data/justhusky_exphun_hugelymodelbat.vcf,sha256=vDxE9g39qagsLRP3NMQFTyk5LCQ0vB9VOpRQEsyCugg,16806
221
221
  scout/demo/REViewer_test_data/justhusky_exphun_hugelymodelbat_realigned.bam,sha256=qfAKBgWxd3kgFeCRtobEpsblZ7MzujjGjxUhhMyXPUU,645353
222
222
  scout/demo/REViewer_test_data/justhusky_exphun_hugelymodelbat_realigned.bam.bai,sha256=pLTfqUBXWwy7toazRJpwZjLvYFUQzyEe90XIK7aC20g,2928
223
- scout/demo/drop/fraser_top_hits_clinical.tsv,sha256=kI6XILOrkA7B8yi4M8-hnMiU2w5KKEMlxSZIXMgXvXc,1429
224
- scout/demo/drop/outrider_top_hits_clinical.tsv,sha256=dluEbEOUgGl0c46TqulypKkASE4Okqbcpj1fN0iN83Y,1986
223
+ scout/demo/drop/fraser_top_hits_clinical.tsv,sha256=muALwMo9jyF5c23tEHkg2K1mLtbvjiyeFcY6FM3AWqc,1406
224
+ scout/demo/drop/outrider_top_hits_clinical.tsv,sha256=A7umnUiyLcYDAyMNbauasaGjVcR-4UR6c2VFFe_LNwM,1980
225
225
  scout/demo/images/chromograph_demo/autozygous_regions1.png,sha256=s38TohYneAt6BTdSpw6XS8nbI5gu8gIDMQlXAsnlWwM,1982
226
226
  scout/demo/images/chromograph_demo/autozygous_regions10.png,sha256=0678vvwryBPQKmonC3HQ_KFDG120nHviVJlLhkR74QY,1782
227
227
  scout/demo/images/chromograph_demo/autozygous_regions11.png,sha256=ZFGPlqMwgXx2M7myU1uViXSA333z0-gOFp134RrHl-E,1796
@@ -372,7 +372,7 @@ scout/load/hpo.py,sha256=ZWYjV9j6OfpI-ZZuhTQVEs_xgLa7ST2KuvYLW6ku0PY,2474
372
372
  scout/load/institute.py,sha256=etmZ0CZRHOVi3f9R-wn5BK1pZPhtZwq2QYbh2RXXxDc,625
373
373
  scout/load/panel.py,sha256=Zxv-ZlRyk7ZWKy1p0Cod-ATh7TzKqeMbiLu5I6-VEzs,10246
374
374
  scout/load/report.py,sha256=TJvblks6Dp5-UDflWRTa8b3fe-A4bT4QnWT2yZLhfLA,820
375
- scout/load/setup.py,sha256=0qQgfCr53oHL626hG5y0o5vwRnJ4X0IMaTFvMBMRNQE,8183
375
+ scout/load/setup.py,sha256=Xu-m59rJW5bF6Agf6XdiEo_Ik4ZAFfN0tF2FjLIMYAY,8218
376
376
  scout/load/transcript.py,sha256=mk0Da7GWwqLVRp2xRD9mlzqaomH9R-TL2aKCJx4fEA8,4632
377
377
  scout/log/__init__.py,sha256=ezc9URKnFoELUif9ZNqG6vNzXPOccGuDyzqoBngSIZo,63
378
378
  scout/log/handlers.py,sha256=nwcSeqwtcesiIiEnpVOm7vTugDTOBodP6apm9Z1LIqk,1350
@@ -385,14 +385,14 @@ scout/models/event.py,sha256=2v9K7hbSa6bgadolGnGL7OymSibNGRyTZXlnL_SrFTM,1863
385
385
  scout/models/hgnc_map.py,sha256=U2v7ie4BxQUVMXvyQoiAcXitNSrEAm_3F7DUkn10ivw,3975
386
386
  scout/models/institute.py,sha256=jADVsDmPl2q6GfzoHkfAyyXa3J4E6ghrJl5m1DI6FiI,1854
387
387
  scout/models/managed_variant.py,sha256=H6ak7su6n2fRB5o21JdAUNkxsNBeeQjRIgmUAqLB--w,2526
388
- scout/models/omics_variant.py,sha256=WkZLE-O91p85l5vjBwufl5F9B7in2ttM0v6R89iHScQ,8562
388
+ scout/models/omics_variant.py,sha256=GFe1IULUmW-ttZTefusruv5CoVNJOmo4AkovoThEZGg,9310
389
389
  scout/models/panel.py,sha256=d5IhLcWqB9XiXCKZNzjaxz9f_bogqQ71wbVhAEqmujk,786
390
390
  scout/models/phenomodel.py,sha256=UitSXqy41X4R7K6MT6EeLqZsKNKRhlEfnvXa-Brt2NA,1298
391
391
  scout/models/phenotype_term.py,sha256=jY7dbfPzgE14M1gWqifm5YKkwMlrtfFa_WBHMT1_ogs,927
392
392
  scout/models/user.py,sha256=oercrjpf9fLomqAcN0Fv1BL_XPjOrS_vchURo0RP7es,1134
393
393
  scout/models/case/__init__.py,sha256=Sqczn7Wm9KYZtPGAHCvwX_6j9vlaK-0myJtSDlS-448,121
394
- scout/models/case/case.py,sha256=7r-lR5jr3hNyM0jo-KxQDY7CLjtgtzu26PHOalx1s68,5213
395
- scout/models/case/case_loading_models.py,sha256=mIJ8saxKuskNoXhwlVdlHu90p4CPBvRWtk-l6iK3YLk,21399
394
+ scout/models/case/case.py,sha256=Wu2D6IZKkFXLeF7emcBr7n1HQ7Mj9rO-cN-8T9rhkSU,5282
395
+ scout/models/case/case_loading_models.py,sha256=Xd7K5zgFOVLTK7NZboYK8JBvYJ6xUG-yLcWEgwGEnFY,21441
396
396
  scout/models/variant/__init__.py,sha256=H-IZ2hSTSVS28S8FZzA8j2Cyu1PHQFXyMWJFtCucPAk,40
397
397
  scout/models/variant/gene.py,sha256=98CG_JcAklGGFIrUulf1_olQalV65kXQO-gOf7VQZ0A,1095
398
398
  scout/models/variant/transcript.py,sha256=rfflEbTs7Bn4HDENqrxtGopQ_0HKnrVLLyBcrj4NpwM,1720
@@ -538,7 +538,7 @@ scout/server/blueprints/managed_variants/templates/managed_variants/managed_vari
538
538
  scout/server/blueprints/omics_variants/__init__.py,sha256=8UVXrChArhIvMxtgUcG-udvmlTn56q41iy-naOZw5us,37
539
539
  scout/server/blueprints/omics_variants/controllers.py,sha256=AnM70stvLniJIU3pFUX-InNjuT-7K0RpuAEYa7vM-jw,3912
540
540
  scout/server/blueprints/omics_variants/views.py,sha256=4_wOqAhu_Zl6heqm7ilE8y8xOfy3PU532rkp_H0KZFg,3724
541
- scout/server/blueprints/omics_variants/templates/omics_variants/outliers.html,sha256=lVDXMcY-ukF6GYtJrHvXtw9rISNhkUfrX4nfgPyU_dw,13088
541
+ scout/server/blueprints/omics_variants/templates/omics_variants/outliers.html,sha256=E9FhdrYQuLYbB9sk9ct89cWVmbetZFJDCQTqVxWdVrM,13274
542
542
  scout/server/blueprints/panels/__init__.py,sha256=usxBF0O7zNX1d9jt-8DRoFZwcfHHS96Gv87LDr1AgG4,53
543
543
  scout/server/blueprints/panels/controllers.py,sha256=apNwdE8gphRTViChoL_yfBJP-H1BfpyAyrIJMv88d9c,12659
544
544
  scout/server/blueprints/panels/forms.py,sha256=DYlhYpnpv7ehf9JlY3HRFwy-TZ5QDHB0RIRaNTAW1jQ,696
@@ -597,7 +597,7 @@ scout/server/blueprints/public/static/ideograms/chromosome-Y.png,sha256=KlOsBLZY
597
597
  scout/server/blueprints/public/templates/public/index.html,sha256=kl_-1s4HXRGw_PWacRFHG3cHALBBMN54GJVBnAAZ7LE,3626
598
598
  scout/server/blueprints/variant/__init__.py,sha256=SlD8-Aoj9Jq9aVTJjtFfsu-0sUVfkzpiEXcH8z9q6dI,54
599
599
  scout/server/blueprints/variant/controllers.py,sha256=2XEBrvq4kXNA2Mj1G6GMfWHphEfgafDewoqFW32Q0PQ,25160
600
- scout/server/blueprints/variant/utils.py,sha256=PpIWFiMgtEUIS8A8wD9-5yf_SB42tb1UGBpzYYdIOtw,22638
600
+ scout/server/blueprints/variant/utils.py,sha256=MCz_CPH10eOS-WYvEmJaNXxsJMzav822zTvfiQnBx8U,23045
601
601
  scout/server/blueprints/variant/verification_controllers.py,sha256=eKzP222e7xuFOaQaI9MLOrD9RWtI8uGB1cJYbcXLzF0,10972
602
602
  scout/server/blueprints/variant/views.py,sha256=jz5kFRCLhEVRQKFJtKmG0Nq4TX6ofEeyA9zPHE7b1FQ,14768
603
603
  scout/server/blueprints/variant/templates/variant/acmg.html,sha256=ubitRnQoADLLOptwMgsPLb1AXhwZgV1YlN504VaC2lY,7754
@@ -608,10 +608,10 @@ scout/server/blueprints/variant/templates/variant/gene_disease_relations.html,sh
608
608
  scout/server/blueprints/variant/templates/variant/rank_score_results.html,sha256=32RfBrpZ_J-1WYE01Bdd5IC9i1MAzXT7GF27OlElk94,2040
609
609
  scout/server/blueprints/variant/templates/variant/sanger.html,sha256=0kVnscTw3KUwjR4QOEuNJMOK9eADGEn9qGNtGx2ST7Y,4507
610
610
  scout/server/blueprints/variant/templates/variant/str-variant-reviewer.html,sha256=QETzTkzXhFBd7-20OrLMCd1QSgzOxeE7Lv_Iged5BB0,2220
611
- scout/server/blueprints/variant/templates/variant/sv-variant.html,sha256=Ss1MaXyJngWNry9-eb3EwbUzzsC0RBv0EVvOoS77d1M,17171
611
+ scout/server/blueprints/variant/templates/variant/sv-variant.html,sha256=8199JLlkuNOLI88hSwgtPxKjk9SDyhNS-WJR1S7mnFs,16978
612
612
  scout/server/blueprints/variant/templates/variant/tx_overview.html,sha256=turyCoOCCd_N80FakxXfIl7q_WViysz1fwx3j312_Lg,6737
613
- scout/server/blueprints/variant/templates/variant/utils.html,sha256=wstxdK36MtW81MqsQtxbDQFDR7gmPba-kqVNFTVYfpo,21588
614
- scout/server/blueprints/variant/templates/variant/variant.html,sha256=bgO3kb4u45IrgCPUJrHT4paNDOQzcKx5dw0ZYbBmCsc,18914
613
+ scout/server/blueprints/variant/templates/variant/utils.html,sha256=4FGPa1B1lKwtqi3BTi9noerkMp7cAkWX4pvfjvINIs8,23345
614
+ scout/server/blueprints/variant/templates/variant/variant.html,sha256=I7zb4Yqwq0UsUV9UoefPlsfVQpSnqlBkxWoIdFPtn04,17845
615
615
  scout/server/blueprints/variant/templates/variant/variant_details.html,sha256=J-pF8LRXFnCxIbNfL7klTLj172rlpWF8PznO4ie9Igc,19921
616
616
  scout/server/blueprints/variants/__init__.py,sha256=W1KCz9kEbVlNO0o3NvLitYLQoP_3JSJ5KSjhpcjlUBQ,55
617
617
  scout/server/blueprints/variants/controllers.py,sha256=DQeqtQtVX4p__AanxChWxWxdQ65_p5etSFQZEj_leDQ,72616
@@ -621,7 +621,7 @@ scout/server/blueprints/variants/views.py,sha256=r2T3eLAG_qrZ2vl3Ar2k6K1KRB7J6z5
621
621
  scout/server/blueprints/variants/static/form_scripts.js,sha256=o3GCboaesA9Sm1HgejS_yQwt0I-NTkvcl56jiBdLqZs,8319
622
622
  scout/server/blueprints/variants/templates/variants/cancer-sv-variants.html,sha256=Y7XQZjjrU_cJGU8EEGEF3QzTVvDfEVudFdygYExVxwI,7429
623
623
  scout/server/blueprints/variants/templates/variants/cancer-variants.html,sha256=bX9FLoufo72PBDoWp95DVLltxUrbLeuFmZQObP1oAlw,10132
624
- scout/server/blueprints/variants/templates/variants/components.html,sha256=oNeLagTLdOy1SRoDCY2tc7mCK26SD9BlLO8vbSpNEvY,16690
624
+ scout/server/blueprints/variants/templates/variants/components.html,sha256=1fpE1CFCAqmCLmLg1KlD1emcIwJItuOL0JiLKdw-j94,16854
625
625
  scout/server/blueprints/variants/templates/variants/fusion-variants.html,sha256=XGaLgWobzeFHwyQLXr_Yq9THssf8tGU91VbFKdGOFBg,4801
626
626
  scout/server/blueprints/variants/templates/variants/indicators.html,sha256=BX6Wg8OpsALCGGozR1eXT57D0Ixrf-OFXVg6G20Wjr0,4400
627
627
  scout/server/blueprints/variants/templates/variants/mei-variants.html,sha256=0-wYjaiUByDduWMgmRS4AMg3IppPNtjZL1vvAdFuIPI,5994
@@ -671,9 +671,9 @@ scout/utils/md5.py,sha256=KkgdxOf7xbF9AF40ZjQKCgWaxFWJ9tp9RKjd8SU6IoA,649
671
671
  scout/utils/scout_requests.py,sha256=JjHOJW1XmenG05mNQ33kvOKq_IicveIfQMcPZeRcQdo,12856
672
672
  scout/utils/sort.py,sha256=1AcbeZ6vdt_UXM3BLDBa3aQmN4qxrqtskxwD19oBhvw,756
673
673
  scout/utils/track_resources.py,sha256=eUjSEe-Ff8BIb4BHPC_COkJocQO2PaWueiPz1GAuiwY,2614
674
- scout_browser-4.87.1.dist-info/LICENSE,sha256=TM1Y9Cqbwk55JVfxD-_bpGLtZQAeN9RovQlqHK6eOTY,1485
675
- scout_browser-4.87.1.dist-info/METADATA,sha256=Ygf0lrKBYutSNTzqoDPQ2Lg-5r7435UjpcxeGIv1gYI,14262
676
- scout_browser-4.87.1.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
677
- scout_browser-4.87.1.dist-info/entry_points.txt,sha256=q_mxFwbMFTwXRDDIRVcqKram2ubMVmvs3CSNvZri1nY,45
678
- scout_browser-4.87.1.dist-info/top_level.txt,sha256=qM75h71bztMaLYsxn1up4c_n2rjc_ZnyaW6Q0K5uOXc,6
679
- scout_browser-4.87.1.dist-info/RECORD,,
674
+ scout_browser-4.88.dist-info/LICENSE,sha256=TM1Y9Cqbwk55JVfxD-_bpGLtZQAeN9RovQlqHK6eOTY,1485
675
+ scout_browser-4.88.dist-info/METADATA,sha256=BjcwhCYLPRAApIAEFM5xImwK7VtYpfKusrs6E9u73nw,14260
676
+ scout_browser-4.88.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
677
+ scout_browser-4.88.dist-info/entry_points.txt,sha256=q_mxFwbMFTwXRDDIRVcqKram2ubMVmvs3CSNvZri1nY,45
678
+ scout_browser-4.88.dist-info/top_level.txt,sha256=qM75h71bztMaLYsxn1up4c_n2rjc_ZnyaW6Q0K5uOXc,6
679
+ scout_browser-4.88.dist-info/RECORD,,