about summary refs log tree commit diff
path: root/wqflask
diff options
context:
space:
mode:
authorzsloan2015-07-10 18:15:40 +0000
committerzsloan2015-07-10 18:15:40 +0000
commit840285e3533790760b763aaa43d3099f9b0a5d69 (patch)
tree59a43443751938194f578cb1f5571cd0f68f584b /wqflask
parent6680ff9356e34a488c70a8cedc041dbf2ce7903f (diff)
downloadgenenetwork2-840285e3533790760b763aaa43d3099f9b0a5d69.tar.gz
Added an OR ("Get Any") search to the index page
Fixed several issues with existing searches; for example, the user can type "Chr" before the chromosome parameter (for example LRS=(9 999 Chr2 100 105) )
Diffstat (limited to 'wqflask')
-rwxr-xr-xwqflask/wqflask/do_search.py44
-rwxr-xr-xwqflask/wqflask/search_results.py15
-rw-r--r--wqflask/wqflask/static/new/javascript/dataset_select_menu.js10
-rwxr-xr-xwqflask/wqflask/templates/index_page.html46
4 files changed, 68 insertions, 47 deletions
diff --git a/wqflask/wqflask/do_search.py b/wqflask/wqflask/do_search.py
index fc8db204..02e73bb0 100755
--- a/wqflask/wqflask/do_search.py
+++ b/wqflask/wqflask/do_search.py
@@ -534,7 +534,14 @@ class LrsSearch(DoSearch):
     DoSearch.search_types['LRS'] = 'LrsSearch'
 
     def get_from_clause(self):
-        if self.search_operator == "=":
+        #If the user typed, for example "Chr4", the "Chr" substring needs to be removed so that all search elements can be converted to floats
+        if len(self.search_term) > 2 and "Chr" in self.search_term[2]:
+            chr_num = self.search_term[2].replace("Chr", "")
+            self.search_term[2] = chr_num
+
+        self.search_term = [float(value) for value in self.search_term]
+
+        if len(self.search_term) > 2:
             from_clause = ", Geno"
         else:
             from_clause = ""
@@ -542,41 +549,36 @@ class LrsSearch(DoSearch):
         return from_clause
 
     def get_where_clause(self):
-        self.search_term = [float(value) for value in self.search_term]
-
         if self.search_operator == "=":
             assert isinstance(self.search_term, (list, tuple))
-            self.lrs_min, self.lrs_max = self.search_term[:2]
+            lrs_min, lrs_max = self.search_term[:2]
 
-            self.sub_clause = """ %sXRef.LRS > %s and
-                             %sXRef.LRS < %s and """ % self.mescape(self.dataset.type,
-                                                                min(self.lrs_min, self.lrs_max),
+            where_clause = """ %sXRef.LRS > %s and
+                             %sXRef.LRS < %s """ % self.mescape(self.dataset.type,
+                                                                min(lrs_min, lrs_max),
                                                                 self.dataset.type,
-                                                                max(self.lrs_min, self.lrs_max))
+                                                                max(lrs_min, lrs_max))
 
             if len(self.search_term) > 2:
-                self.chr_num = self.search_term[2]
-                self.sub_clause += """ Geno.Chr = %s and """ % (self.chr_num)
+                chr_num = self.search_term[2]
+                where_clause += """ and Geno.Chr = %s """ % (chr_num)
                 if len(self.search_term) == 5:
-                    self.mb_low, self.mb_high = self.search_term[3:]
-                    self.sub_clause += """ Geno.Mb > %s and
-                                                  Geno.Mb < %s and
-                                            """ % self.mescape(min(self.mb_low, self.mb_high),
-                                                               max(self.mb_low, self.mb_high))
-            print("self.sub_clause is:", pf(self.sub_clause))
-
-            #%s.Chr = Geno.Chr
-            where_clause = self.sub_clause + """ %sXRef.Locus = Geno.name and
+                    mb_low, mb_high = self.search_term[3:]
+                    where_clause += """ and Geno.Mb > %s and
+                                                  Geno.Mb < %s
+                                            """ % self.mescape(min(mb_low, mb_high),
+                                                               max(mb_low, mb_high))
+
+                where_clause += """ and %sXRef.Locus = Geno.name and
                                                     Geno.SpeciesId = %s
                                                     """ % self.mescape(self.dataset.type,
                                                            self.species_id)
         else:
             # Deal with >, <, >=, and <=
             print("self.search_term is:", self.search_term)
-            self.sub_clause = """ %sXRef.LRS %s %s """ % self.mescape(self.dataset.type,
+            where_clause = """ %sXRef.LRS %s %s """ % self.mescape(self.dataset.type,
                                                                         self.search_operator,
                                                                         self.search_term[0])
-            where_clause = self.sub_clause
        
         return where_clause
 
diff --git a/wqflask/wqflask/search_results.py b/wqflask/wqflask/search_results.py
index b48c9583..01d65278 100755
--- a/wqflask/wqflask/search_results.py
+++ b/wqflask/wqflask/search_results.py
@@ -77,10 +77,15 @@ class SearchResultPage(object):
             self.trait_type = kw['trait_type']
             self.quick_search()
         else:
+            print("kw is:", kw)
+            if kw['search_terms_or']:
+                self.and_or = "or"
+                self.search_terms = kw['search_terms_or']
+            else:
+                self.and_or = "and"
+                self.search_terms = kw['search_terms_and']
             self.search_term_exists = True
             self.results = []
-            print("kw is:", kw)
-            self.search_terms = kw['search_terms']
             if kw['type'] == "Phenotypes":
                 dataset_type = "Publish"
             elif kw['type'] == "Genotypes":
@@ -237,10 +242,14 @@ class SearchResultPage(object):
                     where_clause = the_search.get_where_clause()
                     combined_where_clause += "(" + where_clause + ")"
                     if (i+1) < len(self.search_terms):
-                        combined_where_clause += "AND"
+                        if self.and_or == "and":
+                            combined_where_clause += "AND"
+                        else:
+                            combined_where_clause += "OR"
                 else:
                     self.search_term_exists = False
             if self.search_term_exists:
+                combined_where_clause = "(" + combined_where_clause + ")"
                 final_query = the_search.compile_final_query(combined_from_clause, combined_where_clause)
                 results = the_search.execute(final_query)
                 self.results.extend(results)
diff --git a/wqflask/wqflask/static/new/javascript/dataset_select_menu.js b/wqflask/wqflask/static/new/javascript/dataset_select_menu.js
index 5bd54359..fb9fdcf3 100644
--- a/wqflask/wqflask/static/new/javascript/dataset_select_menu.js
+++ b/wqflask/wqflask/static/new/javascript/dataset_select_menu.js
@@ -134,10 +134,12 @@ $(function() {
     return _results;
   };
   check_search_term = function() {
-    var search_term;
-    search_term = $('#tfor').val();
-    console.log("search_term:", search_term);
-    if (search_term === "") {
+    var or_search_term, and_search_term;
+    or_search_term = $('#or_search').val();
+    and_search_term = $('#and_search').val();
+    console.log("or_search_term:", or_search_term);
+    console.log("and_search_term:", and_search_term);
+    if (or_search_term === "" && and_search_term === "") {
       alert("Please enter one or more search terms or search equations.");
       return false;
     }
diff --git a/wqflask/wqflask/templates/index_page.html b/wqflask/wqflask/templates/index_page.html
index 150a71f1..3d5ddde4 100755
--- a/wqflask/wqflask/templates/index_page.html
+++ b/wqflask/wqflask/templates/index_page.html
@@ -76,10 +76,10 @@
                                 <!--  GET ANY  SEARCH -->
 
                                 <div class="form-group">
-                                    <label for="tfor" class="col-xs-1 control-label" style="padding-left: 0px; padding-right: 0px; width: 65px !important;">Search for:</label>
+                                    <label for="or_search" class="col-xs-1 control-label" style="padding-left: 0px; padding-right: 0px; width: 65px !important;">Get Any:</label>
                                     <div class="col-xs-10 controls">
                                         <div class="col-xs-8">
-                                          <textarea name="search_terms" rows="2" class="form-control search-query" style="max-width: 550px; width: 450px !important;" id="tfor"></textarea>
+                                          <textarea name="search_terms_or" rows="1" class="form-control search-query" style="max-width: 550px; width: 450px !important;" id="or_search"></textarea>
                                         </div>
                                     </div>
                                 </div>
@@ -87,19 +87,33 @@
                                 <!--  GET ANY HELP   -->
                                 <div class="form-group">
                                     <label for="btsearch" class="col-xs-1 control-label" style="width: 65px !important;"></label>
+                                    <div class="col-xs-10 controls">                                  
+                                        <div class="col-xs-12 controls">
+                                            Enter terms, genes, ID numbers in the <b>Search</b> field.<br>
+                                            Use <b>*</b> or <b>?</b> wildcards (Cyp*a?, synap*).<br>
+                                            Use <b>quotes</b> for terms such as <i>"tyrosine kinase"</i>.
+                                        </div>
+                                    </div>
+                                </div>
+
+                                <div class="form-group">
+                                    <label for="and_search" class="col-xs-1 control-label" style="padding-left: 0px; padding-right: 0px; width: 65px !important;">Combined:</label>
+                                    <div class="col-xs-10 controls">
+                                        <div class="col-xs-8">
+                                          <textarea name="search_terms_and" rows="1" class="form-control search-query" style="max-width: 550px; width: 450px !important;" id="and_search"></textarea>
+                                        </div>
+                                    </div>
+                                </div>
+
+                                <div class="form-group">
+                                    <label for="btsearch" class="col-xs-1 control-label" style="width: 65px !important;"></label>
                                     <div class="col-xs-10 controls">
                                         <div class="col-xs-2 controls" style="width: 100px !important;">
                                             <input id="btsearch" type="submit" class="btn btn-primary form-control" value="Search">
                                         </div>                                    
-                                        <div class="col-xs-9 controls">
-                                            Enter terms, genes, ID numbers in the <b>Search</b> field
-                                            Use <b>*</b> or <b>?</b> wildcards (Cyp*a?, synap*)
-                                            Use <b>quotes</b> for terms such as <i>"tyrosine kinase"</i>
-                                        </div>
                                     </div>
                                 </div>
 
-
                                 <!--  SEARCH, MAKE DEFAULT -->
 
                                 <div class="form-group">
@@ -116,21 +130,15 @@
                         <h2>Advanced commands</h2>
                     </div>
 
-                    <p>GeneNetwork supports a variety of advanced searches.</p>
-
-                    <p>To try them out copy these examples into the search field:</p>
+                    <p>You can also use advanced commands. Copy these simple examples into the Get Any or Combined search fields:</p>
 
                       <ul>
-                        <!--<li><b>POSITION=(chr1 25 30)</b> finds genes, markers, or transcripts on
+                        <li><b>POSITION=(chr1 25 30)</b> finds genes, markers, or transcripts on
                         chromosome 1 between 25 and 30 Mb.</li>
 
                         <li><b>MEAN=(15 16) LRS=(23 46)</b> in the <b>Combined</b> field finds
                         highly expressed genes (15 to 16 log2 units) AND with peak <a href="http://www.genenetwork.org/glossary.html#L" target="_blank">LRS</a>
-                        linkage between 23 and 46.</li>-->
-
-                        <li><b>MEAN=(15 16)</b> finds highly expressed genes (15 to 16 log2 units).</li>
-
-                        <li><b>LRS=(23 46)</b> finds genes with peak <a href="http://www.genenetwork.org/glossary.html#L" target="_blank">LRS</a> linkage between 23 and 46.</li>
+                        linkage between 23 and 46.</li>
 
                         <li><b>RIF=mitochondrial</b> searches RNA databases for <a href="http://www.ncbi.nlm.nih.gov/projects/GeneRIF/GeneRIFhelp.html" target="_blank">
                         GeneRIF</a> links.</li>
@@ -146,12 +154,12 @@
                         <li><b>GO:0045202 LRS=(9 99 Chr4 122 155) cisLRS=(9 999 10)</b>
                         finds synapse-associated genes with <a href="http://www.genenetwork.org/glossary.html#E" target="_blank">
                         cis eQTL</a> on Chr 4 from 122 and 155 Mb with LRS scores
-                        between 9 and 999.</li>
+                        between 9 and 999.</li>-->
 
                         <li><b>RIF=diabetes LRS=(9 999 Chr2 100 105) transLRS=(9 999 10)</b>
                         finds diabetes-associated transcripts with peak <a href="http://www.genenetwork.org/glossary.html#E" target="_blank">
                         trans eQTLs</a> on Chr 2 between 100 and 105 Mb with LRS
-                        scores between 9 and 999.</li>-->
+                        scores between 9 and 999.</li>
                       </ul>
                 </section>
             </div>