aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--wqflask/wqflask/do_search.py114
-rw-r--r--wqflask/wqflask/search_results.py19
2 files changed, 119 insertions, 14 deletions
diff --git a/wqflask/wqflask/do_search.py b/wqflask/wqflask/do_search.py
index 2641431c..4517d9f5 100644
--- a/wqflask/wqflask/do_search.py
+++ b/wqflask/wqflask/do_search.py
@@ -5,6 +5,8 @@ from __future__ import print_function, division
from pprint import pformat as pf
+from dbFunction import webqtlDatabaseFunction
+
class DoSearch(object):
"""Parent class containing parameters/functions used for all searches"""
@@ -45,6 +47,10 @@ class ProbeSetSearch(DoSearch):
DoSearch.search_types['ProbeSet'] = "ProbeSetSearch"
+ #Get group information for dataset and the species id
+ self.dataset.get_group()
+ self.species_id = webqtlDatabaseFunction.retrieveSpeciesId(self.cursor, self.dataset.group)
+
base_query = """SELECT ProbeSet.Name as TNAME,
0 as thistable,
ProbeSetXRef.Mean as TMEAN,
@@ -224,7 +230,9 @@ class WikiSearch(ProbeSetSearch):
where_clause = """%s.symbol = GeneRIF.symbol
and GeneRIF.versionId=0 and GeneRIF.display>0
and (GeneRIF.comment REGEXP '%s' or GeneRIF.initial = '%s')
- """ % (self.dataset.type, "[[:<:]]"+self.search_term+"[[:>:]]", self.search_term)
+ """ % (self.dataset.type,
+ "[[:<:]]"+self.search_term+"[[:>:]]",
+ self.search_term)
from_clause = ", GeneRIF "
query = self.compile_final_query(from_clause, where_clause)
@@ -255,6 +263,107 @@ class GoSearch(ProbeSetSearch):
return self.execute(query)
+class LrsSearch(ProbeSetSearch):
+ """Searches for genes with a QTL within the given LRS values
+
+ LRS searches can take 2 different forms:
+ - LRS=(min_LRS max_LRS)
+ - LRS=(mine_LRS max_LRS chromosome start_Mb end_Mb)
+ where min/max_LRS represent the range of LRS scores and start/end_Mb represent
+ the range in megabases on the given chromosome
+
+ """
+
+ DoSearch.search_types['LRS'] = 'LrsSearch'
+
+ self.species_id = webqtlDatabaseFunction.retrieveSpeciesId(self.cursor,
+ self.dataset.group)
+
+class CisLrsSearch(LrsSearch):
+ """Searches for genes on a particular chromosome with a cis-eQTL within the given LRS values
+
+ A cisLRS search can take 2 forms:
+ - cisLRS=(min_LRS max_LRS)
+ - cisLRS=(min_LRS max_LRS mb_buffer)
+ where min/max_LRS represent the range of LRS scores and the mb_buffer is the range around
+ a particular QTL where its eQTL would be considered "cis". If there is no third parameter,
+ mb_buffer will default to 5 megabases.
+
+ A QTL is a cis-eQTL if a gene's expression is regulated by a QTL in roughly the same area
+ (where the area is determined by the mb_buffer that the user can choose.
+ """
+ # This is tentatively a child of LrsSearch; I'll need to check what code, if any, overlaps
+ # between this and the LrsSearch code. In the original code, commands are divided by
+ # the number of inputs they take, so these commands are completely separate
+
+ DoSearch.search_types['CISLRS'] = "CisLrsSearch"
+
+ def run(self):
+ if len(self.search_term) == 3:
+ lower_limit, upper_limit, min_threshold = int(value) for value in self.search_term
+
+ where_clause = """ %sXRef.LRS > %s and
+ %sXRef.LRS < %s and
+ %sXRef.Locus = Geno.name and
+ Geno.SpeciesId = %s and
+ %s.Chr = Geno.Chr and
+ ABS(%s.Mb-Geno.Mb) < %s """ % (
+ self.dataset.type,
+ min(lower_limit, upper_limit)
+ self.dataset.type,
+ max(lower_limit, upper_limit,
+ self.dataset.type,
+
+ )
+
+ else:
+ NeedSomeErrorHere
+
+
+ return None
+
+
+#itemCmd = item[0]
+#lowerLimit = float(item[1])
+#upperLimit = float(item[2])
+#
+#if itemCmd.upper() in ("TRANSLRS", "CISLRS"):
+# if item[3]:
+# mthresh = float(item[3])
+# clauseItem = " %sXRef.LRS > %2.7f and %sXRef.LRS < %2.7f " % \
+# (self.dbType, min(lowerLimit, upperLimit), self.dbType, max(lowerLimit, upperLimit))
+# if itemCmd.upper() == "CISLRS":
+# clauseItem += """ and %sXRef.Locus = Geno.name and Geno.SpeciesId = %s and %s.Chr = Geno.Chr and ABS(%s.Mb-Geno.Mb) < %2.7f """ % (self.dbType, self.speciesId, self.dbType, self.dbType, mthresh)
+# DescriptionText.append(HT.Span(' with a ', HT.U('cis-QTL'), ' having an LRS between %g and %g using a %g Mb exclusion buffer' % (min(lowerLimit, upperLimit), max(lowerLimit, upperLimit), mthresh)))
+# else:
+# clauseItem += """ and %sXRef.Locus = Geno.name and Geno.SpeciesId = %s and (%s.Chr != Geno.Chr or (%s.Chr != Geno.Chr and ABS(%s.Mb-Geno.Mb) > %2.7f)) """ % (self.dbType, self.speciesId, self.dbType, self.dbType, self.dbType, mthresh)
+# DescriptionText.append(HT.Span(' with a ', HT.U('trans-QTL'), ' having an LRS between %g and %g using a %g Mb exclusion buffer' % (min(lowerLimit, upperLimit), max(lowerLimit, upperLimit), mthresh)))
+# query.append(" (%s) " % clauseItem)
+# self.orderByDefalut = "LRS"
+# else:
+# pass
+#elif itemCmd.upper() in ("RANGE"):
+# #XZ, 03/05/2009: Xiaodong changed Data to ProbeSetData
+# clauseItem = " (select Pow(2, max(value) -min(value)) from ProbeSetData where Id = ProbeSetXRef.dataId) > %2.7f and (select Pow(2, max(value) -min(value)) from ProbeSetData where Id = ProbeSetXRef.dataId) < %2.7f " % (min(lowerLimit, upperLimit), max(lowerLimit, upperLimit))
+# query.append(" (%s) " % clauseItem)
+# DescriptionText.append(HT.Span(' with a range of expression that varied between %g and %g' % (min(lowerLimit, upperLimit), max(lowerLimit, upperLimit)), " (fold difference)"))
+#else:
+# clauseItem = " %sXRef.%s > %2.7f and %sXRef.%s < %2.7f " % \
+# (self.dbType, itemCmd, min(lowerLimit, upperLimit), self.dbType, itemCmd, max(lowerLimit, upperLimit))
+# query.append(" (%s) " % clauseItem)
+# self.orderByDefalut = itemCmd
+# DescriptionText.append(HT.Span(' with ', HT.U(itemCmd), ' between %g and %g' % (min(lowerLimit, upperLimit), max(lowerLimit, upperLimit))))
+
+
+class MeanSearch(ProbeSetSearch):
+ """Searches for genes expressed within an interval (log2 units) determined by the user"""
+
+ DoSearch.search_types['MEAN'] = "MeanSearch"
+
+ def run(self):
+
+ return None
+
if __name__ == "__main__":
### Usually this will be used as a library, but call it from the command line for testing
@@ -283,7 +392,8 @@ if __name__ == "__main__":
#results = ProbeSetSearch("salt", dataset, cursor, db_conn).run()
#results = RifSearch("diabetes", dataset, cursor, db_conn).run()
- results = WikiSearch("nicotine", dataset, cursor, db_conn).run()
+ #results = WikiSearch("nicotine", dataset, cursor, db_conn).run()
+ results = CisLrsSearch(['9','99','10'], dataset, cursor, db_conn).run()
#results = PhenotypeSearch("brain", dataset, cursor, db_conn).run()
#results = GenotypeSearch("rs13475699", dataset, cursor, db_conn).run()
#results = GoSearch("0045202", dataset, cursor, db_conn).run()
diff --git a/wqflask/wqflask/search_results.py b/wqflask/wqflask/search_results.py
index a97ea8fd..6ba4d94a 100644
--- a/wqflask/wqflask/search_results.py
+++ b/wqflask/wqflask/search_results.py
@@ -259,7 +259,7 @@ class SearchResultPage(templatePage):
for a_search in self.search_terms:
print("[kodak] item is:", pf(a_search))
search_term = a_search['search_term']
- search_type = a_search['key']
+ search_type = string.upper(a_search['key'])
if not search_type:
# We fall back to the dataset type as the key to get the right object
search_type = self.dataset.type
@@ -543,7 +543,6 @@ class SearchResultPage(templatePage):
#XZ, 06/05/2009: It is neccessary to turn on nowrap
this_trait.mean = repr = "%2.3f" % mean
- tr.append(TDCell(HT.TD(repr, Class=className, align='right', nowrap='ON'),repr, mean))
#LRS and its location
LRS_score_repr = 'N/A'
@@ -581,17 +580,13 @@ class SearchResultPage(templatePage):
this_trait.LRS_location_repr = LRS_location_repr = 'Chr %s: %.4f Mb' % (LRS_Chr, float(LRS_Mb) )
LRS_flag = 0
- #tr.append(TDCell(HT.TD(HT.Href(text=LRS_score_repr,url="javascript:showIntervalMapping('%s', '%s : %s')" % (formName, this_trait.db.shortname, this_trait.name), Class="fs12 fwn"), Class=className, align='right', nowrap="on"),LRS_score_repr, LRS_score_value))
- tr.append(TDCell(HT.TD(LRS_score_repr, Class=className, align='right', nowrap="on"), LRS_score_repr, LRS_score_value))
- tr.append(TDCell(HT.TD(LRS_location_repr, Class=className, nowrap="on"), LRS_location_repr, LRS_location_value))
+ #if LRS_flag:
+ #tr.append(TDCell(HT.TD(LRS_score_repr, Class=className), LRS_score_repr, LRS_score_value))
+ #tr.append(TDCell(HT.TD(LRS_location_repr, Class=className), LRS_location_repr, LRS_location_value))
- if LRS_flag:
- tr.append(TDCell(HT.TD(LRS_score_repr, Class=className), LRS_score_repr, LRS_score_value))
- tr.append(TDCell(HT.TD(LRS_location_repr, Class=className), LRS_location_repr, LRS_location_value))
-
- else:
- tr.append(TDCell(HT.TD("N/A", Class=className), "N/A", "N/A"))
- tr.append(TDCell(HT.TD("N/A", Class=className), "N/A", "N/A"))
+ #else:
+ #tr.append(TDCell(HT.TD("N/A", Class=className), "N/A", "N/A"))
+ #tr.append(TDCell(HT.TD("N/A", Class=className), "N/A", "N/A"))
tblobj_body.append(tr)