本文整理汇总了Python中elastic.query.Query.terms方法的典型用法代码示例。如果您正苦于以下问题:Python Query.terms方法的具体用法?Python Query.terms怎么用?Python Query.terms使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类elastic.query.Query
的用法示例。
在下文中一共展示了Query.terms方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: get_criteria
# 需要导入模块: from elastic.query import Query [as 别名]
# 或者: from elastic.query.Query import terms [as 别名]
def get_criteria(docs, doc_type, doc_attr, idx_type_key):
""" Return a dictionary of gene name:criteria. """
genes = [getattr(doc, doc_attr).lower() for doc in docs if doc.type() == doc_type]
query = Query.terms("Name", genes)
sources = {"exclude": ["Primary id", "Object class", "Total score"]}
if ElasticSettings.idx("CRITERIA", idx_type_key) is None:
return {}
res = Search(
ElasticQuery(query, sources=sources), idx=ElasticSettings.idx("CRITERIA", idx_type_key), size=len(genes)
).search()
criteria = {}
for doc in res.docs:
od = collections.OrderedDict(sorted(doc.__dict__.items(), key=lambda t: t[0]))
gene_name = getattr(doc, "Name")
criteria[gene_name] = [
{attr.replace("_Hs", ""): value.split(":")}
for attr, value in od.items()
if attr != "Name" and attr != "_meta" and attr != "OD_Hs" and not value.startswith("0")
]
if hasattr(doc, "OD_Hs") and not getattr(doc, "OD_Hs").startswith("0"):
if gene_name not in criteria:
criteria[gene_name] = []
criteria[gene_name].append({"OD": getattr(doc, "OD_Hs").split(":")})
return criteria
示例2: _auth_arr
# 需要导入模块: from elastic.query import Query [as 别名]
# 或者: from elastic.query.Query import terms [as 别名]
def _auth_arr(user):
''' Get authentication array for BoolQuery for retrieving public and
authenticated documents. '''
auth_arr = [Query.missing_terms("field", "group_name")] # all public documents
try:
auth_arr.append(Query.terms("group_name", # all documents in the user group
[gp.lower() for gp in get_user_groups(user)]).query_wrap())
except Http404:
# not logged in
pass
return auth_arr
示例3: hits_to_regions
# 需要导入模块: from elastic.query import Query [as 别名]
# 或者: from elastic.query.Query import terms [as 别名]
def hits_to_regions(cls, docs):
''' Returns the region docs for given hit docs '''
hits_idx = ElasticSettings.idx('REGION', 'REGION')
# TODO: fix to check for disease_locus attribute
disease_loci = [getattr(doc, "disease_locus").lower() for doc in docs]
if len(disease_loci) == 0:
logger.warning("no disease_locus attribute found on hits")
return
resultObj = Search(search_query=ElasticQuery(Query.terms("disease_loci", disease_loci)), idx=hits_idx).search()
return resultObj.docs
示例4: _build_frags_query
# 需要导入模块: from elastic.query import Query [as 别名]
# 或者: from elastic.query.Query import terms [as 别名]
def _build_frags_query(frags_idx, chrom, segmin, segmax):
query = ElasticQuery.filtered(Query.terms("seqid", [chrom, str("chr"+chrom)]),
Filter(RangeQuery("end", gte=segmin, lte=segmax)),
utils.bedFields)
fragsQuery = Search(search_query=query, search_from=0, size=2000000, idx=frags_idx)
fragsResult = fragsQuery.get_result()
frags = fragsResult['data']
frags = utils.makeRelative(int(segmin), int(segmax), ['start', 'end'], frags)
return frags
示例5: _build_frags_query
# 需要导入模块: from elastic.query import Query [as 别名]
# 或者: from elastic.query.Query import terms [as 别名]
def _build_frags_query(frags_idx, chrom, segmin, segmax):
query = ElasticQuery.filtered(Query.terms("seqid", [chrom, str("chr"+chrom)]),
Filter(RangeQuery("end", gte=segmin, lte=segmax)),
utils.bedFields)
fragsQuery = Search(search_query=query, search_from=0, size=10000, idx=frags_idx)
# fragsResult = fragsQuery.get_result()
# frags = fragsResult['data']
fragsResult = fragsQuery.get_json_response()
frags = []
for hit in fragsResult['hits']['hits']:
frags.append(hit['_source'])
frags = utils.makeRelative(int(segmin), int(segmax), ['start', 'end'], frags)
return frags
示例6: pad_region_doc
# 需要导入模块: from elastic.query import Query [as 别名]
# 或者: from elastic.query.Query import terms [as 别名]
def pad_region_doc(cls, region):
'''Adds details of disease_loci & hits for a given region doc'''
hits_idx = ElasticSettings.idx('REGION', 'STUDY_HITS')
disease_loci = getattr(region, "disease_loci")
locus_start = Agg('region_start', 'min', {'field': 'build_info.start'})
locus_end = Agg('region_end', 'max', {'field': 'build_info.end'})
match_agg = Agg('filtered_result', 'filter', Query.match("build_info.build", 38).query_wrap(),
sub_agg=[locus_start, locus_end])
build_info_agg = Agg('build_info', 'nested', {"path": 'build_info'}, sub_agg=[match_agg])
query = ElasticQuery(FilteredQuery(Query.terms("disease_locus", disease_loci),
Filter(BoolQuery(should_arr=[Query.missing_terms("field", "group_name")]
))))
resultObj = Search(search_query=query, idx=hits_idx, aggs=Aggs(build_info_agg)).search()
hit_ids = []
markers = []
genes = []
studies = []
pmids = []
for doc in resultObj.docs:
hit_ids.append(doc.doc_id())
markers.append(getattr(doc, "marker"))
if hasattr(doc, "genes") and getattr(doc, "genes") != None:
genes.extend([g for g in getattr(doc, "genes")])
studies.append(getattr(doc, "dil_study_id"))
pmids.append(getattr(doc, "pmid"))
build_info = getattr(resultObj.aggs['build_info'], 'filtered_result')
region_start = int(build_info['region_start']['value'])
region_end = int(build_info['region_end']['value'])
build_info = {
'build': 38,
'seqid': getattr(region, "seqid"),
'start': region_start,
'end': region_end
}
setattr(region, "build_info", build_info)
setattr(region, "hits", hit_ids)
setattr(region, "markers", list(set(markers)))
setattr(region, "genes", list(set(genes)))
setattr(region, "studies", list(set(studies)))
setattr(region, "pmids", list(set(pmids)))
return region
示例7: disease_page
# 需要导入模块: from elastic.query import Query [as 别名]
# 或者: from elastic.query.Query import terms [as 别名]
def disease_page(request, disease):
''' Renders a disease page. '''
disease = disease.lower()
if disease is None:
messages.error(request, 'No disease given.')
raise Http404()
query = ElasticQuery(Query.terms("code", [disease.split(',')]))
elastic = Search(query, idx=ElasticSettings.idx('DISEASE', 'DISEASE'), size=5)
res = elastic.search()
if res.hits_total == 0:
messages.error(request, 'Disease(s) '+disease+' not found.')
elif res.hits_total < 9:
names = ', '.join([getattr(doc, 'name') for doc in res.docs])
context = {'features': res.docs, 'title': names}
return render(request, 'disease/index.html', context, content_type='text/html')
raise Http404()
示例8: _get_query_filters
# 需要导入模块: from elastic.query import Query [as 别名]
# 或者: from elastic.query.Query import terms [as 别名]
def _get_query_filters(q_dict, user):
''' Build query bool filter. If biotypes are specified add them to the filter and
allow for other non-gene types.
@type q_dict: dict
@param q_dict: request dictionary.
'''
if not q_dict.getlist("biotypes"):
return None
query_bool = BoolQuery()
if q_dict.getlist("biotypes"):
query_bool.should(Query.terms("biotype", q_dict.getlist("biotypes")))
type_filter = [Query.query_type_for_filter(ElasticSettings.search_props(c.upper(), user)['idx_type'])
for c in q_dict.getlist("categories") if c != "gene"]
if len(type_filter) > 0:
query_bool.should(type_filter)
return Filter(query_bool)
示例9: gene_info
# 需要导入模块: from elastic.query import Query [as 别名]
# 或者: from elastic.query.Query import terms [as 别名]
def gene_info(marker_doc):
''' Retrieve gene(s) information from the INFO column. '''
if hasattr(marker_doc, 'info'):
info = getattr(marker_doc, 'info')
info_parts = dict(item.split("=", 1) for item in info.split(";") if '=' in item)
if 'GENEINFO' not in info_parts:
return None
try:
sym = [g.split(':')[0].lower() for g in info_parts['GENEINFO'].split('|')]
equery = BoolQuery(b_filter=Filter(Query.terms('symbol', sym)))
search_query = ElasticQuery(equery, sources=['symbol'])
(idx, idx_type) = ElasticSettings.idx('GENE', 'GENE').split('/')
docs = Search(search_query=search_query, size=len(sym), idx=idx, idx_type=idx_type).search().docs
return {getattr(doc, 'symbol'): doc.doc_id() for doc in docs}
except Exception as e:
logger.error(e.message)
return None
示例10: _build_snp_query
# 需要导入模块: from elastic.query import Query [as 别名]
# 或者: from elastic.query.Query import terms [as 别名]
def _build_snp_query(snp_track, chrom, segmin, segmax):
snps = []
snpMeta = {}
maxScore = -1
if snp_track and snp_track != 'None':
# get SNPs based on this segment
mo = re.match(r"(.*)-(.*)", snp_track)
(group, track) = mo.group(1, 2)
snp_track_idx = getattr(chicp_settings, 'CHICP_IDX').get(group).get('INDEX')
snp_track_type = ''
if getattr(chicp_settings, 'CHICP_IDX').get(group).get('TRACKS').get(snp_track):
snp_track_type = getattr(chicp_settings, 'CHICP_IDX').get(group).get('TRACKS') \
.get(snp_track).get('TYPE')
else:
snp_track_type = track
query = ElasticQuery.filtered(Query.terms("seqid", [chrom, str("chr"+chrom)]),
Filter(RangeQuery("end", gte=segmin, lte=segmax)),
utils.snpFields)
snpQuery = Search(search_query=query, search_from=0, size=2000000, idx=snp_track_idx+'/'+snp_track_type)
snpResult = snpQuery.get_result()
snps = snpResult['data']
snps = utils.makeRelative(int(segmin), int(segmax), ['start', 'end'], snps)
data_type = getattr(chicp_settings, 'CHICP_IDX').get(group).get('DATA_TYPE')
snpSettings = getattr(chicp_settings, 'STUDY_DEFAULTS').get(data_type)
# if 'max' in snpSettings:
# maxScore = float(snpSettings['max'])
# else:
for s in snps:
if float(s['score']) > maxScore:
maxScore = float(s['score'])
snpSettings['max'] = maxScore
snpMeta = snpSettings
return snps, snpMeta
示例11: _build_snp_query
# 需要导入模块: from elastic.query import Query [as 别名]
# 或者: from elastic.query.Query import terms [as 别名]
def _build_snp_query(snp_track, chrom, segmin, segmax):
snps = []
snpMeta = {}
maxScore = -1
if snp_track and snp_track != 'None':
# get SNPs based on this segment
mo = re.match(r"(.*)-(.*)", snp_track)
(group, track) = mo.group(1, 2)
try:
snp_track_idx = ElasticSettings.idx('CP_STATS_'+group.upper(), snp_track.upper())
except SettingsError:
snp_track_idx = ElasticSettings.idx('CP_STATS_'+group.upper())+"/"+track
query = ElasticQuery.filtered(Query.terms("seqid", [chrom, str("chr"+chrom)]),
Filter(RangeQuery("end", gte=segmin, lte=segmax)),
utils.snpFields)
snpQuery = Search(search_query=query, search_from=0, size=10000, idx=snp_track_idx)
# snpResult = snpQuery.get_result()
# snps = snpResult['data']
snpResult = snpQuery.get_json_response()
snps = []
for hit in snpResult['hits']['hits']:
snps.append(hit['_source'])
snps = utils.makeRelative(int(segmin), int(segmax), ['start', 'end'], snps)
data_type = ElasticSettings.get_label('CP_STATS_'+group.upper(), None, "data_type")
snpSettings = getattr(chicp_settings, 'STUDY_DEFAULTS').get(data_type)
for s in snps:
if float(s['score']) > maxScore:
maxScore = float(s['score'])
snpSettings['max'] = maxScore
snpMeta = snpSettings
return snps, snpMeta
示例12: get_all_criteria_disease_tags
# 需要导入模块: from elastic.query import Query [as 别名]
# 或者: from elastic.query.Query import terms [as 别名]
def get_all_criteria_disease_tags(cls, qids, idx, idx_type):
if qids is None:
query = ElasticQuery(Query.match_all(), sources=['disease_tags', 'qid'])
# search = Search(query, idx=idx, idx_type=idx_type, size=30000)
else:
query = ElasticQuery(Query.terms("qid", qids), sources=['disease_tags', 'qid'])
# search = Search(query, idx=idx, idx_type=idx_type)
search = Search(query, idx=idx, idx_type=idx_type)
criteria_hits = search.get_json_response()['hits']
hits = criteria_hits['hits']
meta_info = {}
criteria_disease_tags = {}
for hit in hits:
if idx == hit['_index']:
qid = hit['_source']['qid']
meta_desc = cls.get_meta_desc(idx, [hit['_type']])
meta_info[hit['_type']] = meta_desc[idx][hit['_type']]
criteria_desc = hit['_type']
if qid not in criteria_disease_tags:
criteria_disease_tags[qid] = {}
criteria_disease_tags[qid][criteria_desc] = hit['_source']['disease_tags']
disease_tags_all = []
for fid, fvalue in criteria_disease_tags.items():
disease_tags_all = cls.get_all_criteria_disease_tags_aggregated(qid, fvalue)
criteria_disease_tags[fid]['all'] = disease_tags_all
criteria_disease_tags[fid]['meta_info'] = meta_info
return(criteria_disease_tags)
示例13: filter_queryset
# 需要导入模块: from elastic.query import Query [as 别名]
# 或者: from elastic.query.Query import terms [as 别名]
def filter_queryset(self, request, queryset, view):
''' Get disease regions. '''
try:
filterable = getattr(view, 'filter_fields', [])
filters = dict([(k, v) for k, v in request.GET.items() if k in filterable])
dis = filters.get('disease', 'T1D')
show_genes = filters.get('genes', False)
show_markers = filters.get('markers', False)
show_regions = filters.get('regions', True)
build = self._get_build(filters.get('build', settings.DEFAULT_BUILD))
docs = DiseaseLocusDocument.get_disease_loci_docs(dis)
if len(docs) == 0:
messages.error(request, 'No regions found for '+dis+'.')
visible_hits = DiseaseLocusDocument.get_hits([h for r in docs for h in getattr(r, 'hits')])
regions = []
all_markers = []
all_genes = []
ens_all_cand_genes = []
for r in docs:
region = r.get_disease_region(visible_hits, build=build)
if region is not None:
ens_all_cand_genes.extend(region['ens_cand_genes'])
all_markers.extend(region['markers'])
region['hits'] = [self._study_hit_obj(s, region) for s in
StudyHitDocument.process_hits(r.hit_docs, region['all_diseases'])]
(all_coding, all_non_coding) = views.get_genes_for_region(getattr(r, "seqid"),
region['rstart']-500000,
region['rstop']+500000)
(region_coding, coding_up, coding_down) = views._region_up_down(all_coding, region['rstart'],
region['rstop'])
(region_non_coding, non_coding_up, non_coding_down) = \
views._region_up_down(all_non_coding, region['rstart'], region['rstop'])
region['genes'] = {
'upstream': {'coding': [g.doc_id() for g in coding_up],
'non_coding': [g.doc_id() for g in non_coding_up]},
'region': {'coding': [g.doc_id() for g in region_coding],
'non_coding': [g.doc_id() for g in region_non_coding]},
'downstream': {'coding': [g.doc_id() for g in coding_down],
'non_coding': [g.doc_id() for g in non_coding_down]},
}
all_genes.extend(region['genes']['region']['coding'])
all_genes.extend(region['genes']['region']['non_coding'])
regions.append(region)
# look for pleiotropy by looking for diseases for the markers in IC_STATS and other study hits
stats_query = ElasticQuery.filtered(Query.terms("marker", all_markers),
Filter(RangeQuery("p_value", lte=5E-08)))
stats_docs = Search(stats_query, idx=ElasticSettings.idx("IC_STATS"), size=len(all_markers)).search().docs
meta_response = Search.elastic_request(ElasticSettings.url(), ElasticSettings.idx("IC_STATS") + '/_mapping',
is_post=False)
# get ensembl to gene symbol mapping for all candidate genes
extra_markers = []
for region in regions:
# add diseases from IC/GWAS stats
(study_ids, region['marker_stats']) = views._process_stats(stats_docs, region['markers'], meta_response)
region['all_diseases'].extend([getattr(mstat, 'disease') for mstat in region['marker_stats']])
other_hits_query = ElasticQuery(
BoolQuery(must_arr=[RangeQuery("tier", lte=2), Query.terms("marker", region['markers'])],
must_not_arr=[Query.terms("dil_study_id", study_ids)]))
other_hits = Search(other_hits_query, idx=ElasticSettings.idx('REGION', 'STUDY_HITS'),
size=100).search()
region['extra_markers'] = [self._study_hit_obj(s, region) for s in
StudyHitDocument.process_hits(other_hits.docs, region['all_diseases'])]
region['all_diseases'] = list(set(region['all_diseases']))
extra_markers.extend([m['marker_id'] for m in region['extra_markers']])
# get markers
marker_objs = []
if show_markers:
query = ElasticQuery(Query.terms("id", all_markers), sources=['id', 'start'])
marker_docs = Search(search_query=query, idx=ElasticSettings.idx('MARKER', 'MARKER'),
size=len(all_markers)).search().docs
mids = {getattr(m, 'id'): getattr(m, 'start') for m in marker_docs}
marker_objs = [h for r in regions for h in r['hits']]
marker_objs.extend([h for r in regions for h in r['extra_markers']])
for m in marker_objs:
m['start'] = mids[m['marker_id']]
# get genes
gene_objs = []
if show_genes:
all_genes.extend(ens_all_cand_genes)
gene_docs = GeneDocument.get_genes(all_genes, sources=['start', 'stop', 'chromosome',
'symbol', 'biotype'])
for doc in Document.sorted_alphanum(gene_docs, 'chromosome'):
ensembl_id = doc.doc_id()
region_name = ''
candidate_gene = 0
for region in regions:
if ('genes' in region and
(ensembl_id in region['genes']['region']['coding'] or
ensembl_id in region['genes']['region']['non_coding'] or
ensembl_id in region['ens_cand_genes'])):
region_name = region['region_name']
candidate_gene = 1 if ensembl_id in region['ens_cand_genes'] else 0
break
#.........这里部分代码省略.........
示例14: test_elastic_group_name
# 需要导入模块: from elastic.query import Query [as 别名]
# 或者: from elastic.query.Query import terms [as 别名]
def test_elastic_group_name(self):
'''
Testing the workflow defined in: https://killin.cimr.cam.ac.uk/nextgensite/2015/08/05/region-authorization/
Testing various elastic queries
idx doc:
"_source":{"attr": {"region_id": "803", "group_name": "[\"DIL\"]", "Name": "4q27"},
"seqid": "chr4", "source": "immunobase", "type": "region",
"score": ".", "strand": ".", "phase": ".", "start": 122061159, "end": 122684373}
idx_query:
Private(in given group) OR Public
-d '{"query":{"filtered":{"filter":{"bool": {
"should": [
{"terms": {"group_name":["dil"]}},
{ "missing": { "field": "group_name" }}
]
}}}}}'
Private(in given group):
-d '{"query":{"filtered":{"filter":{"terms":{"group_name":["dil"]}}}}}'
Public:
-d {'query': {'filtered': {'filter': {'missing': {'field': 'group_name'}},
- 'query': {'term': {'match_all': '{}'}}}}}
'''
# get the groups for the given user
response = self.client.post('/accounts/login/', {'username': 'test_user', 'password': 'test_pass'})
self.assertTrue(response.status_code, "200")
logged_in_user = User.objects.get(id=self.client.session['_auth_user_id'])
if logged_in_user and logged_in_user.is_authenticated():
user_groups = get_user_groups(logged_in_user)
self.assertTrue('READ' in user_groups, "user present in READ group")
# make sure the user is not yet in DIL group
self.assertFalse('DIL' in user_groups, "user not present in DIL group")
group_names = get_user_groups(logged_in_user)
if 'READ' in group_names : group_names.remove('READ') # @IgnorePep8
group_names = [x.lower() for x in group_names]
self.assertTrue(len(group_names) == 0, "No group present")
# Match all query, as there is no group we do a match all
query = ElasticQuery(Query.match_all())
expected_query_string = {"query": {"match_all": {}}}
self.assertJSONEqual(json.dumps(query.query), json.dumps(expected_query_string), "Query string matched")
Search.index_refresh(self.index_name)
elastic = Search(query, idx=self.index_name)
docs = elastic.search().docs
self.assertTrue(len(docs) == 12, "Elastic string query retrieved all public regions")
# Filtered query for group names, add the user to DIL group and get the query string
self.dil_group = Group.objects.create(name='DIL')
logged_in_user.groups.add(self.dil_group)
group_names = get_user_groups(logged_in_user)
if 'READ' in group_names : group_names.remove('READ') # @IgnorePep8
group_names = [x.lower() for x in group_names]
self.assertTrue(len(group_names) > 0, "More than 1 group present")
self.assertTrue("dil" in group_names, "DIL group present")
# retrieves all docs with missing field group_name - 11 docs
terms_filter = TermsFilter.get_missing_terms_filter("field", "attr.group_name")
query = ElasticQuery.filtered(Query.match_all(), terms_filter)
elastic = Search(query, idx=self.index_name)
docs = elastic.search().docs
self.assertTrue(len(docs) == 11, "Elastic string query retrieved all public regions")
# build filtered boolean query to bring all public docs + private docs 11+1 = 12 docs
query_bool = BoolQuery()
query_bool.should(Query.missing_terms("field", "group_name")) \
.should(Query.terms("group_name", group_names).query_wrap())
query = ElasticQuery.filtered_bool(Query.match_all(), query_bool)
elastic = Search(query, idx=self.index_name)
docs = elastic.search().docs
self.assertTrue(len(docs) == 12, "Elastic string query retrieved both public + private regions")
terms_filter = TermsFilter.get_terms_filter("attr.group_name", group_names)
query = ElasticQuery.filtered(Query.match_all(), terms_filter)
elastic = Search(query, idx=self.index_name)
docs = elastic.search().docs
self.assertTrue(len(docs) == 1, "Elastic string query retrieved one private regions")
self.assertEqual(docs[0].attr['Name'], "4q27", "type matched region")
self.assertEqual(docs[0].attr['region_id'], "803", "type matched region")
self.assertEqual(docs[0].attr['group_name'], "[\"DIL\"]", "type matched region")
示例15: get_regions
# 需要导入模块: from elastic.query import Query [as 别名]
# 或者: from elastic.query.Query import terms [as 别名]
def get_regions(cls, request, dis, context):
# is_authenticated = False
elastic_url = ElasticSettings.url()
(core, other) = Disease.get_site_diseases(dis_list=dis.upper().split(','))
if len(core) == 0 and len(other) == 0:
messages.error(request, 'Disease '+dis+' not found.')
raise Http404()
disease = core[0] if len(core) > 0 else other[0]
context['title'] = getattr(disease, "name")+" Regions"
docs = DiseaseLocusDocument.get_disease_loci_docs(dis)
if len(docs) == 0:
messages.error(request, 'No regions found for '+dis+'.')
raise Http404()
visible_hits = DiseaseLocusDocument.get_hits([h for r in docs for h in getattr(r, 'hits')])
meta_response = Search.elastic_request(elastic_url, ElasticSettings.idx("IC_STATS") + '/_mapping',
is_post=False)
regions = []
ens_all_cand_genes = []
all_markers = []
for r in docs:
region = r.get_disease_region(visible_hits)
if region is not None:
ens_all_cand_genes.extend(region['ens_cand_genes'])
all_markers.extend(region['markers'])
region['hits'] = StudyHitDocument.process_hits(r.hit_docs, region['all_diseases'])
(all_coding, all_non_coding) = get_genes_for_region(getattr(r, "seqid"),
region['rstart']-500000, region['rstop']+500000)
(region_coding, coding_up, coding_down) = _region_up_down(all_coding, region['rstart'], region['rstop'])
(region_non_coding, non_coding_up, non_coding_down) = \
_region_up_down(all_non_coding, region['rstart'], region['rstop'])
region['genes'] = {
'upstream': {'coding': coding_up, 'non_coding': non_coding_up},
'region': {'coding': region_coding, 'non_coding': region_non_coding},
'downstream': {'coding': coding_down, 'non_coding': non_coding_down},
}
regions.append(region)
# look for pleiotropy by looking for diseases for the markers in IC_STATS and other study hits
stats_query = ElasticQuery.filtered(Query.terms("marker", all_markers),
Filter(RangeQuery("p_value", lte=5E-08)))
stats_docs = Search(stats_query, idx=ElasticSettings.idx("IC_STATS"), size=len(all_markers)).search().docs
# get ensembl to gene symbol mapping for all candidate genes
all_cand_genes = gene.utils.get_gene_docs_by_ensembl_id(ens_all_cand_genes)
for region in regions:
region['cand_genes'] = {cg: all_cand_genes[cg] for cg in region.pop("ens_cand_genes", None)}
(study_ids, region['marker_stats']) = _process_stats(stats_docs, region['markers'], meta_response)
# add diseases from IC/GWAS stats
region['all_diseases'].extend([getattr(mstat, 'disease') for mstat in region['marker_stats']])
other_hits_query = ElasticQuery(
BoolQuery(must_arr=[RangeQuery("tier", lte=2), Query.terms("marker", region['markers'])],
must_not_arr=[Query.terms("dil_study_id", study_ids)]))
other_hits = Search(other_hits_query, idx=ElasticSettings.idx('REGION', 'STUDY_HITS'), size=100).search()
region['extra_markers'] = StudyHitDocument.process_hits(other_hits.docs, region['all_diseases'])
context['regions'] = regions
context['disease_code'] = [dis]
context['disease'] = getattr(disease, "name")
return context