From 0bfcf573578ecd33156350247104f03e7bc633ec Mon Sep 17 00:00:00 2001 From: Shifa Zhang Date: Thu, 20 Jul 2023 16:43:13 -0400 Subject: [PATCH 1/3] Fix SV localtion interval filter bug. --- seqr/utils/search/elasticsearch/es_search.py | 3 ++- seqr/utils/search/elasticsearch/es_utils_tests.py | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/seqr/utils/search/elasticsearch/es_search.py b/seqr/utils/search/elasticsearch/es_search.py index 8b0d9e705c..cc28b38ef1 100644 --- a/seqr/utils/search/elasticsearch/es_search.py +++ b/seqr/utils/search/elasticsearch/es_search.py @@ -1413,7 +1413,8 @@ def _location_filter(genes, intervals, exclude_locations): } } for key in ['xpos', 'xstop']] interval_q = _build_or_filter('range', range_filters) - interval_q |= Q('range', xpos={'lte': xstart}) & Q('range', xstop={'gte': xstop}) + interval_q |= Q('range', xpos={'lte': xstart}) & Q('range', xstop={'gte': xstop}) &\ + Q('script', script="doc['xpos'].value / 1000000000 == doc['xstop'].value / 1000000000") if q: q |= interval_q diff --git a/seqr/utils/search/elasticsearch/es_utils_tests.py b/seqr/utils/search/elasticsearch/es_utils_tests.py index d20a390887..f9495c6727 100644 --- a/seqr/utils/search/elasticsearch/es_utils_tests.py +++ b/seqr/utils/search/elasticsearch/es_utils_tests.py @@ -1613,7 +1613,9 @@ def test_filtered_get_es_variants(self): {'range': {'xstop': {'gte': 2000001234, 'lte': 2000005678}}}, {'bool': {'must': [ {'range': {'xpos': {'lte': 2000001234}}}, - {'range': {'xstop': {'gte': 2000005678}}}]}}, + {'range': {'xstop': {'gte': 2000005678}}}, + {'script': {'script': "doc['xpos'].value / 1000000000 == doc['xstop'].value / 1000000000"}}, + ]}}, {'terms': {'geneIds': ['ENSG00000223972']}}, {'bool': {'must': [ {'range': {'xpos': {'gte': 7000000001, 'lte': 7000001100}}}, From 506506ff228a953f6b2850f512cbb89d3341a5f2 Mon Sep 17 00:00:00 2001 From: ShifaSZ <33550059+ShifaSZ@users.noreply.github.com> Date: Fri, 21 Jul 2023 11:59:13 -0400 Subject: [PATCH 2/3] Update seqr/utils/search/elasticsearch/es_search.py Update same chrom check Co-authored-by: hanars --- seqr/utils/search/elasticsearch/es_search.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/seqr/utils/search/elasticsearch/es_search.py b/seqr/utils/search/elasticsearch/es_search.py index cc28b38ef1..3c9df277ce 100644 --- a/seqr/utils/search/elasticsearch/es_search.py +++ b/seqr/utils/search/elasticsearch/es_search.py @@ -1413,8 +1413,8 @@ def _location_filter(genes, intervals, exclude_locations): } } for key in ['xpos', 'xstop']] interval_q = _build_or_filter('range', range_filters) - interval_q |= Q('range', xpos={'lte': xstart}) & Q('range', xstop={'gte': xstop}) &\ - Q('script', script="doc['xpos'].value / 1000000000 == doc['xstop'].value / 1000000000") + interval_q |= Q('range', xpos={'lte': xstart}) & Q('range', xstop={'gte': xstop}) & + Q('range', xpos={'gte': get_xpos(interval['chrom'], 0)}) & Q('range', xstop={'lte': get_xpos(interval['chrom'], MAX_POS)}) if q: q |= interval_q From 929dde62e1cd2c8f666978bb293eaa1bcd5afce4 Mon Sep 17 00:00:00 2001 From: Shifa Zhang Date: Fri, 21 Jul 2023 12:35:08 -0400 Subject: [PATCH 3/3] fix tests. --- seqr/utils/search/elasticsearch/es_search.py | 5 +++-- seqr/utils/search/elasticsearch/es_utils_tests.py | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/seqr/utils/search/elasticsearch/es_search.py b/seqr/utils/search/elasticsearch/es_search.py index 3c9df277ce..b372d223e2 100644 --- a/seqr/utils/search/elasticsearch/es_search.py +++ b/seqr/utils/search/elasticsearch/es_search.py @@ -1413,8 +1413,9 @@ def _location_filter(genes, intervals, exclude_locations): } } for key in ['xpos', 'xstop']] interval_q = _build_or_filter('range', range_filters) - interval_q |= Q('range', xpos={'lte': xstart}) & Q('range', xstop={'gte': xstop}) & - Q('range', xpos={'gte': get_xpos(interval['chrom'], 0)}) & Q('range', xstop={'lte': get_xpos(interval['chrom'], MAX_POS)}) + interval_q |= Q('range', xpos={'lte': xstart}) & Q('range', xstop={'gte': xstop}) & \ + Q('range', xpos={'gte': get_xpos(interval['chrom'], MIN_POS)}) & \ + Q('range', xstop={'lte': get_xpos(interval['chrom'], MAX_POS)}) if q: q |= interval_q diff --git a/seqr/utils/search/elasticsearch/es_utils_tests.py b/seqr/utils/search/elasticsearch/es_utils_tests.py index f9495c6727..910ca8e7c7 100644 --- a/seqr/utils/search/elasticsearch/es_utils_tests.py +++ b/seqr/utils/search/elasticsearch/es_utils_tests.py @@ -1614,7 +1614,8 @@ def test_filtered_get_es_variants(self): {'bool': {'must': [ {'range': {'xpos': {'lte': 2000001234}}}, {'range': {'xstop': {'gte': 2000005678}}}, - {'script': {'script': "doc['xpos'].value / 1000000000 == doc['xstop'].value / 1000000000"}}, + {'range': {'xpos': {'gte': 2000000001}}}, + {'range': {'xstop': {'lte': 2300000000}}}, ]}}, {'terms': {'geneIds': ['ENSG00000223972']}}, {'bool': {'must': [