about summary refs log tree commit diff
diff options
context:
space:
mode:
authorZachary Sloan2012-11-30 16:19:30 -0600
committerZachary Sloan2012-11-30 16:19:30 -0600
commitb8fa8728b7afebbada49f29b85fa5db40e137e1b (patch)
tree5540fadae175038116ec59eec95e414e21bdadb4
parent7929d5d5aace20b50a9c5b428eea784d8eac0b77 (diff)
downloadgenenetwork2-b8fa8728b7afebbada49f29b85fa5db40e137e1b.tar.gz
Finished pValue search
Got headers working in search page
-rw-r--r--wqflask/wqflask/do_search.py137
-rw-r--r--wqflask/wqflask/search_results.py8
-rwxr-xr-xwqflask/wqflask/show_trait/show_trait.py126
-rw-r--r--wqflask/wqflask/templates/search_result_page.html1
-rw-r--r--wqflask/wqflask/views.py3
5 files changed, 193 insertions, 82 deletions
diff --git a/wqflask/wqflask/do_search.py b/wqflask/wqflask/do_search.py
index 11411b26..17078802 100644
--- a/wqflask/wqflask/do_search.py
+++ b/wqflask/wqflask/do_search.py
@@ -74,6 +74,14 @@ class ProbeSetSearch(DoSearch):
                 ProbeSet.name_num as TNAME_NUM
                 FROM ProbeSetXRef, ProbeSet """
 
+    header_fields = ['',
+                     'Record ID',
+                     'Symbol',
+                     'Description',
+                     'Location',
+                     'Mean',
+                     'Max LRS',
+                     'Max LRS Location']
 
     def compile_final_query(self, from_clause = '', where_clause = ''):
         """Generates the final query string"""
@@ -188,36 +196,49 @@ class GenotypeSearch(DoSearch):
 
     search_fields = ('Name', 'Chr')
 
-    def get_where_clause(self):
-        """Generate clause for WHERE portion of query"""
+    def get_fields_clause(self):
+        """Generate clause for part of the WHERE portion of query"""
 
         # This adds a clause to the query that matches the search term
         # against each field in search_fields (above)
-        where_clause = []
+        fields_clause = []
+        
+        if "'" not in self.search_term:
+            self.search_term = "[[:<:]]" + self.search_term + "[[:>:]]"
+
         for field in self.search_fields:
-            where_clause.append('''%s REGEXP "%s"''' % ("%s.%s" % (self.dataset.type, field),
-                                                                self.escape(self.search_term)))
-        print("where_clause is:", pf(where_clause))
-        where_clause = "(%s)" % ' OR '.join(where_clause)
+            fields_clause.append('''%s REGEXP "%s"''' % ("%s.%s" % self.mescape(self.dataset.type,
+                                                                               field,
+                                                                               self.search_term)))
+        print("hello ;where_clause is:", pf(fields_clause))
+        fields_clause = "(%s)" % ' OR '.join(fields_clause)
 
-        return where_clause
+        return fields_clause
 
-    def run(self):
-        """Generates and runs a simple search of a genotype dataset"""
-        #Todo: Zach will figure out exactly what both these lines mean
-        #and comment here
-        if "'" not in self.search_term:
-            search_term = "[[:<:]]" + self.search_term + "[[:>:]]"
+    def compile_final_query(self, from_clause = '', where_clause = ''):
+        """Generates the final query string"""
+
+        from_clause = self.normalize_spaces(from_clause)
 
         query = (self.base_query +
                 """WHERE %s and
                     Geno.Id = GenoXRef.GenoId and
                     GenoXRef.GenoFreezeId = GenoFreeze.Id and
-                    GenoFreeze.Id = %s"""% (
-                        self.get_where_clause(),
-                        self.escape(self.dataset.id)))
+                    GenoFreeze.Id = %s"""% (where_clause,
+                                            self.escape(self.dataset.id)))
 
-        return self.execute(query)
+        print("query is:", pf(query))
+
+        return query
+
+    def run(self):
+        """Generates and runs a simple search of a genotype dataset"""
+        #Todo: Zach will figure out exactly what both these lines mean
+        #and comment here
+
+        self.query = self.compile_final_query(where_clause = self.get_fields_clause())
+
+        return self.execute(self.query)
 
 class RifSearch(ProbeSetSearch):
     """Searches for traits with a Gene RIF entry including the search term."""
@@ -497,9 +518,84 @@ class RangeSearch(ProbeSetSearch):
 
         self.query = self.compile_final_query(where_clause = self.where_clause)
 
-        return self.execute(self.query)    
+        return self.execute(self.query)
+
+class PositionSearch(DoSearch):
+    """Searches for genes/markers located within a specified range on a specified chromosome"""
+    
+    for search_key in ('POSITION', 'POS', 'MB'):
+        DoSearch.search_types[search_key] = "PositionSearch" 
+    
+    def setup(self):
+        self.search_term = [float(value) for value in self.search_term]
+        self.chr, self.mb_min, self.mb_max = self.search_term[:3]
+        self.where_clause = """ %s.Chr = '%s' and
+                                %s.Mb > %s and
+                                %s.Mb < %s """ % self.mescape(self.dataset.type,
+                                                              self.chr,
+                                                              self.dataset.type,
+                                                              min(self.mb_min, self.mb_max),
+                                                              self.dataset.type,
+                                                              max(self.mb_min, self.mb_max))    
+    
+    def real_run(self):
+
+        self.query = self.compile_final_query(where_clause = self.where_clause)
+
+        return self.execute(self.query)        
+
+class MrnaPositionSearch(ProbeSetSearch, PositionSearch):
+    """Searches for genes located within a specified range on a specified chromosome"""
+    
+    def run(self):
+
+        self.setup()
+        self.query = self.compile_final_query(where_clause = self.where_clause)
+
+        return self.execute(self.query)
+    
+class GenotypePositionSearch(GenotypeSearch, PositionSearch):
+    """Searches for genes located within a specified range on a specified chromosome"""
+
+    def run(self):
+
+        self.setup()
+        self.query = self.compile_final_query(where_clause = self.where_clause)
+
+        return self.execute(self.query)
+    
+class PvalueSearch(ProbeSetSearch):
+    """Searches for traits with a permutationed p-value between low and high"""
+    
+    def run(self):
+        
+        self.search_term = [float(value) for value in self.search_term]
+
+        if self.search_operator == "=":
+            assert isinstance(self.search_term, (list, tuple))
+            self.pvalue_min, self.pvalue_max = self.search_term[:2]
+            self.where_clause = """ %sXRef.pValue > %s and %sXRef.pValue < %s
+                                    """ % self.mescape(
+                                        self.dataset.type,
+                                        min(self.pvalue_min, self.pvalue_max),
+                                        self.dataset.type,
+                                        max(self.pvalue_min, self.pvalue_max))
+        else:
+            # Deal with >, <, >=, and <=
+            self.where_clause = """ %sXRef.pValue %s %s
+                                    """ % self.mescape(
+                                        self.dataset.type,
+                                        self.search_operator,
+                                        self.search_term[0])
+
+        print("where_clause is:", pf(self.where_clause))
+
+        self.query = self.compile_final_query(where_clause = self.where_clause)
+
+        return self.execute(self.query)
     
 
+
 if __name__ == "__main__":
     ### Usually this will be used as a library, but call it from the command line for testing
     ### And it runs the code below
@@ -538,7 +634,8 @@ if __name__ == "__main__":
                 ProbeSetXRef.ProbeSetFreezeId = 112""")
 
     #print(pf(cursor.fetchall()))
-    results = ProbeSetSearch("shh", None, dataset, cursor, db_conn).run()
+    #results = ProbeSetSearch("shh", None, dataset, cursor, db_conn).run()
+    results = PvalueSearch(['0.005'], '<', dataset, cursor, db_conn).run()
     #results = RifSearch("diabetes", dataset, cursor, db_conn).run()
     #results = WikiSearch("nicotine", dataset, cursor, db_conn).run()
     #results = CisLrsSearch(['99'], '>', dataset, cursor, db_conn).run() # cisLRS > 99
diff --git a/wqflask/wqflask/search_results.py b/wqflask/wqflask/search_results.py
index 63e0153d..c7bbdaf2 100644
--- a/wqflask/wqflask/search_results.py
+++ b/wqflask/wqflask/search_results.py
@@ -143,14 +143,16 @@ class SearchResultPage(templatePage):
 
             search_ob = do_search.DoSearch.get_search(search_type)
             search_class = getattr(do_search, search_ob)
-            self.results.extend(search_class(search_term,
+            the_search = search_class(search_term,
                                     search_operator,
                                     self.dataset,
                                     self.cursor,
-                                    self.db_conn).run())
-
+                                    self.db_conn)
+            self.results.extend(the_search.run())
             print("in the search results are:", self.results)
 
+        self.header_fields = the_search.header_fields
+
 
     #ZS: This should be handled in the parser
     def encregexp(self,str):
diff --git a/wqflask/wqflask/show_trait/show_trait.py b/wqflask/wqflask/show_trait/show_trait.py
index db2636bc..e8ad0b1d 100755
--- a/wqflask/wqflask/show_trait/show_trait.py
+++ b/wqflask/wqflask/show_trait/show_trait.py
@@ -34,15 +34,22 @@ class ShowTrait(templatePage):
     def __init__(self, fd):
         self.fd = fd
 
+        print("red1 fd.group:", fd.group)
         templatePage.__init__(self, fd)
+
+        print("red2 fd.group:", fd.group)
         assert self.openMysql(), "No database!"
-        
+
+        print("red3 fd.group:", fd.group)
         this_trait = self.get_this_trait()
-        
+
+        print("red4 fd.group:", fd.group)
         ##read genotype file
         fd.group = this_trait.group
-        fd.readGenotype()        
-        
+
+        print("[red5] fd.group is:", fd.group)
+        fd.readGenotype()
+
         if not fd.genotype:
             fd.readData(incf1=1)
 
@@ -107,8 +114,8 @@ class ShowTrait(templatePage):
             except:
                 hddn['normalPlotTitle'] = str(this_trait.name)
             hddn['fromDataEditingPage'] = 1
-            if this_trait.db and this_trait.db.type and this_trait.db.type == 'ProbeSet':
-                hddn['trait_type'] = this_trait.db.type
+            if this_trait.dataset and this_trait.dataset.type and this_trait.dataset.type == 'ProbeSet':
+                hddn['trait_type'] = this_trait.dataset.type
                 if this_trait.cellid:
                     hddn['cellid'] = this_trait.cellid
                 else:
@@ -130,7 +137,7 @@ class ShowTrait(templatePage):
         self.dispTraitInformation(fd, "", hddn, this_trait) #Display trait information + function buttons
 
         if this_trait == None:
-            this_trait = webqtlTrait(data=fd.allTraitData, db=None)
+            this_trait = webqtlTrait(data=fd.allTraitData, dataset=None)
 
         ## Variance submit page only
         #if fd.enablevariance and not variance_data_page:
@@ -147,7 +154,7 @@ class ShowTrait(templatePage):
 
 
         self.make_sample_lists(fd, variance_data_page, this_trait)
-        
+
         if fd.allsamplelist:
             hddn['allsamplelist'] = string.join(fd.allsamplelist, ' ')
 
@@ -178,12 +185,12 @@ class ShowTrait(templatePage):
         #else:
         dataset = self.fd['dataset']
         trait_id = self.fd['trait_id']
-        cell_id = self.fd.get('CellID')        
+        cell_id = self.fd.get('CellID')
+
+        this_trait =  webqtlTrait(self.db_conn, dataset=dataset, name=trait_id, cellid=cell_id)
 
-        this_trait =  webqtlTrait(self.db_conn, db=dataset, name=trait_id, cellid=cell_id)
-    
         ##identification, etc.
-        self.fd.identification = '%s : %s' % (this_trait.db.shortname, trait_id)
+        self.fd.identification = '%s : %s' % (this_trait.dataset.shortname, trait_id)
         this_trait.returnURL = webqtlConfig.CGIDIR + webqtlConfig.SCRIPTFILE + '?FormID=showDatabase&database=%s\
                 &ProbeSetID=%s&group=%s&parentsf1=on' %(dataset, trait_id, self.fd['group'])
 
@@ -191,10 +198,13 @@ class ShowTrait(templatePage):
             self.fd.identification = '%s/%s'%(self.fd.identification, cell_id)
             this_trait.returnURL = '%s&CellID=%s' % (this_trait.returnURL, cell_id)
 
+        print("yellow1:", self.group)
         this_trait.retrieveInfo()
+        print("yellow2:", self.group)
         this_trait.retrieveData()
+        print("yellow3:", self.group)
         return this_trait
-    
+
 
     def dispTraitInformation(self, fd, title1Body, hddn, this_trait):
 
@@ -225,13 +235,13 @@ class ShowTrait(templatePage):
 
         if webqtlConfig.USERDICT[self.privilege] >= webqtlConfig.USERDICT['user']:
 
-            if this_trait==None or this_trait.db.type=='Temp':
+            if this_trait==None or this_trait.dataset.type=='Temp':
                 updateButton = HT.Href(url="#redirect", onClick="dataEditingFunc(document.getElementsByName('dataInput')[0],'addPublish');")
                 updateButton_img = HT.Image("/images/edit_icon.jpg", name="addnew", alt="Add To Publish", title="Add To Publish", style="border:none;")
                 updateButton.append(updateButton_img)
                 updateText = "Edit"
-            elif this_trait.db.type != 'Temp':
-                if this_trait.db.type == 'Publish' and this_trait.confidential: #XZ: confidential phenotype trait
+            elif this_trait.dataset.type != 'Temp':
+                if this_trait.dataset.type == 'Publish' and this_trait.confidential: #XZ: confidential phenotype trait
                     if webqtlUtil.hasAccessToConfidentialPhenotypeTrait(privilege=self.privilege, userName=self.userName, authorized_users=this_trait.authorized_users):
                         updateButton = HT.Href(url="#redirect", onClick="dataEditingFunc(document.getElementsByName('dataInput')[0],'updateRecord');")
                         updateButton_img = HT.Image("/images/edit_icon.jpg", name="update", alt="Edit", title="Edit", style="border:none;")
@@ -261,7 +271,7 @@ class ShowTrait(templatePage):
 
 
         # Microarray database information to display
-        if this_trait and this_trait.db and this_trait.db.type == 'ProbeSet': #before, this line was only reached if this_trait != 0, but now we need to check
+        if this_trait and this_trait.dataset and this_trait.dataset.type == 'ProbeSet': #before, this line was only reached if this_trait != 0, but now we need to check
             try:
                 hddn['GeneId'] = int(string.strip(this_trait.geneid))
             except:
@@ -297,7 +307,7 @@ class ShowTrait(templatePage):
                 geneWikiText = 'GeneWiki'
 
                 #XZ: display similar traits in other selected datasets
-                if this_trait and this_trait.db and this_trait.db.type=="ProbeSet" and this_trait.symbol:
+                if this_trait and this_trait.dataset and this_trait.dataset.type=="ProbeSet" and this_trait.symbol:
                     if _Species in ("mouse", "rat", "human"):
                         similarUrl = "%s?cmd=sch&gene=%s&alias=1&species=%s" % (os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), this_trait.symbol, _Species)
                         similarButton = HT.Href(url="#redirect", onClick="openNewWin('%s')" % similarUrl)
@@ -331,7 +341,7 @@ class ShowTrait(templatePage):
                                                  ProbeSetXRef.ProbeSetId = ProbeSet.Id AND
                                                  ProbeSetFreeze.Name = '%s' AND
                                                  ProbeSet.Name = '%s' AND
-                                                 Probe.ProbeSetId = ProbeSet.Id order by Probe.SerialOrder""" % (this_trait.db.name, this_trait.name) )
+                                                 Probe.ProbeSetId = ProbeSet.Id order by Probe.SerialOrder""" % (this_trait.dataset.name, this_trait.name) )
                     seqs = self.cursor.fetchall()
                     if not seqs:
                         raise ValueError
@@ -350,7 +360,7 @@ class ShowTrait(templatePage):
                                              ProbeSetXRef.ProbeSetId = ProbeSet.Id AND
                                              ProbeSetFreeze.Name = '%s' AND
                                              ProbeSet.Name = '%s' AND
-                                             Probe.ProbeSetId = ProbeSet.Id order by Probe.SerialOrder""" % (this_trait.db.name, this_trait.name) )
+                                             Probe.ProbeSetId = ProbeSet.Id order by Probe.SerialOrder""" % (this_trait.dataset.name, this_trait.name) )
 
                 seqs = self.cursor.fetchall()
                 for seqt in seqs:
@@ -393,7 +403,7 @@ class ShowTrait(templatePage):
                 pass
 
             #Display probe information (if any)
-            if this_trait.db.name.find('Liver') >= 0 and this_trait.db.name.find('F2') < 0:
+            if this_trait.dataset.name.find('Liver') >= 0 and this_trait.dataset.name.find('F2') < 0:
                 pass
             else:
                 #query database for number of probes associated with trait; if count > 0, set probe tool button and text
@@ -404,7 +414,7 @@ class ShowTrait(templatePage):
                 probeResult = self.cursor.fetchone()
                 if probeResult[0] > 0:
                     probeurl = "%s?FormID=showProbeInfo&database=%s&ProbeSetID=%s&CellID=%s&group=%s&incparentsf1=ON" \
-                            % (os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), this_trait.db, this_trait.name, this_trait.cellid, fd.group)
+                            % (os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), this_trait.dataset, this_trait.name, this_trait.cellid, fd.group)
                     probeButton = HT.Href(url="#", onClick="javascript:openNewWin('%s'); return false;" % probeurl)
                     probeButton_img = HT.Image("/images/probe_icon.jpg", name="probe", alt=" Check sequence of probes ", title=" Check sequence of probes ", style="border:none;")
                     #probeButton.append(probeButton_img)
@@ -443,7 +453,7 @@ class ShowTrait(templatePage):
             #                    select ProbeFreeze.Name from ProbeFreeze, ProbeSetFreeze
             #                            where
             #                    ProbeFreeze.Id = ProbeSetFreeze.ProbeFreezeId AND
-            #                    ProbeSetFreeze.Id = %d""" % this_trait.db.id)
+            #                    ProbeSetFreeze.Id = %d""" % this_trait.dataset.id)
             #    probeDBName = self.cursor.fetchone()[0]
             #    tbl.append(HT.TR(
             #            HT.TD('Database: ', Class="fs13 fwb", valign="top", nowrap="on"),
@@ -454,7 +464,7 @@ class ShowTrait(templatePage):
                 #tbl.append(HT.TR(
                 #        HT.TD('Database: ', Class="fs13 fwb", valign="top", nowrap="on"),
                 #        HT.TD(width=10, valign="top"),
-                #        HT.TD(HT.Href(text=this_trait.db.fullname, url = webqtlConfig.INFOPAGEHREF % this_trait.db.name,
+                #        HT.TD(HT.Href(text=this_trait.dataset.fullname, url = webqtlConfig.INFOPAGEHREF % this_trait.dataset.name,
                 #        target='_blank', Class="fs13 fwn non_bold"), valign="top")
                 #        ))
                 #pass
@@ -635,7 +645,7 @@ class ShowTrait(templatePage):
             #Info2Disp.append(linkTable)
             #title1Body.append(tbl, HT.BR(), menuTable)
 
-        elif this_trait and this_trait.db and this_trait.db.type =='Publish': #Check if trait is phenotype
+        elif this_trait and this_trait.dataset and this_trait.dataset.type =='Publish': #Check if trait is phenotype
 
             if this_trait.confidential:
                 pass
@@ -723,7 +733,7 @@ class ShowTrait(templatePage):
 
             #title1Body.append(tbl, HT.BR(), menuTable)
 
-        elif this_trait and this_trait.db and this_trait.db.type == 'Geno': #Check if trait is genotype
+        elif this_trait and this_trait.dataset and this_trait.dataset.type == 'Geno': #Check if trait is genotype
 
             GenoInfo = HT.Paragraph()
             if this_trait.chr and this_trait.mb:
@@ -775,7 +785,7 @@ class ShowTrait(templatePage):
 
             #title1Body.append(tbl, HT.BR(), menuTable)
 
-        elif (this_trait == None or this_trait.db.type == 'Temp'): #if temporary trait (user-submitted trait or PCA trait)
+        elif (this_trait == None or this_trait.dataset.type == 'Temp'): #if temporary trait (user-submitted trait or PCA trait)
 
             #TempInfo = HT.Paragraph()
             if this_trait != None:
@@ -888,13 +898,13 @@ class ShowTrait(templatePage):
                 #    continue
 
                 vals1.append(thisValFull)
-                
-                
+
+
             #vals1 = [[sampleNameOrig.replace("_2nd_", ""),
             #  this_trait.data[sampleName].val,
             #  this_trait.data[sampleName].var]
             #    for sampleNameOrig in all_samples]]
-            #    
+            #
 
             #Using just the group sample
             for sampleNameOrig in primary_samples:
@@ -971,11 +981,11 @@ class ShowTrait(templatePage):
                 #
                 #statsTable = HT.TableLite(cellspacing=0, cellpadding=0, width="100%")
 
-                if this_trait.db:
+                if this_trait.dataset:
                     if this_trait.cellid:
-                        self.stats_data.append(BasicStatisticsFunctions.basicStatsTable(vals=vals, trait_type=this_trait.db.type, cellid=this_trait.cellid))
+                        self.stats_data.append(BasicStatisticsFunctions.basicStatsTable(vals=vals, trait_type=this_trait.dataset.type, cellid=this_trait.cellid))
                     else:
-                        self.stats_data.append(BasicStatisticsFunctions.basicStatsTable(vals=vals, trait_type=this_trait.db.type))
+                        self.stats_data.append(BasicStatisticsFunctions.basicStatsTable(vals=vals, trait_type=this_trait.dataset.type))
                 else:
                     self.stats_data.append(BasicStatisticsFunctions.basicStatsTable(vals=vals))
 
@@ -1005,7 +1015,7 @@ class ShowTrait(templatePage):
                     #normalplot_container.append(normalplot)
                     #normalplot_div.append(normalplot_container)
                     #stats_container.append(normalplot_div)
-    
+
                     #boxplot_div = HT.Div(id="statstabs-2")
                     #boxplot_container = HT.Paragraph()
                     #boxplot = HT.TableLite(cellspacing=0, cellpadding=0, width="100%")
@@ -1014,8 +1024,8 @@ class ShowTrait(templatePage):
                     #boxplot_container.append(boxplot)
                     #boxplot_div.append(boxplot_container)
                     #stats_container.append(boxplot_div)
-    
-    
+
+
                     #barName_div = HT.Div(id="statstabs-3")
                     #barName_container = HT.Paragraph()
                     #barName = HT.TableLite(cellspacing=0, cellpadding=0, width="100%")
@@ -1033,17 +1043,17 @@ class ShowTrait(templatePage):
                     #barRank_container.append(barRank)
                     #barRank_div.append(barRank_container)
                     #stats_container.append(barRank_div)
-    
+
             #    stats_cell.append(stats_container)
             #
             #stats_script.append(stats_script_text)
             #
             #submitTable = HT.TableLite(cellspacing=0, cellpadding=0, width="100%", Class="target2")
             #stats_row.append(stats_cell)
-    
+
             #submitTable.append(stats_row)
             #submitTable.append(stats_script)
-    
+
             #title2Body.append(submitTable)
 
 
@@ -1052,7 +1062,7 @@ class ShowTrait(templatePage):
         #species = webqtlDatabaseFunction.retrieveSpecies(cursor=self.cursor, group=fd.group)
 
         this_group = fd.group
-        
+
         # We're checking a string here!
         assert isinstance(this_group, basestring), "We need a string type thing here"
         if this_group[:3] == 'BXD':
@@ -1072,17 +1082,17 @@ class ShowTrait(templatePage):
             dataset_menu = []
             print("[tape4] webqtlConfig.PUBLICTHRESH:", webqtlConfig.PUBLICTHRESH)
             print("[tape4] type webqtlConfig.PUBLICTHRESH:", type(webqtlConfig.PUBLICTHRESH))
-            self.cursor.execute('''SELECT PublishFreeze.FullName,PublishFreeze.Name FROM 
-                    PublishFreeze,InbredSet WHERE PublishFreeze.InbredSetId = InbredSet.Id 
-                    and InbredSet.Name = %s and PublishFreeze.public > %s''', 
+            self.cursor.execute('''SELECT PublishFreeze.FullName,PublishFreeze.Name FROM
+                    PublishFreeze,InbredSet WHERE PublishFreeze.InbredSetId = InbredSet.Id
+                    and InbredSet.Name = %s and PublishFreeze.public > %s''',
                     (this_group, webqtlConfig.PUBLICTHRESH))
             for item in self.cursor.fetchall():
                 dataset_menu.append(dict(tissue=None,
                                          datasets=[item]))
 
             self.cursor.execute('''SELECT GenoFreeze.FullName,GenoFreeze.Name FROM GenoFreeze,
-                    InbredSet WHERE GenoFreeze.InbredSetId = InbredSet.Id and InbredSet.Name = 
-                    %s and GenoFreeze.public > %s''', 
+                    InbredSet WHERE GenoFreeze.InbredSetId = InbredSet.Id and InbredSet.Name =
+                    %s and GenoFreeze.public > %s''',
                     (this_group, webqtlConfig.PUBLICTHRESH))
             for item in self.cursor.fetchall():
                 dataset_menu.append(dict(tissue=None,
@@ -1109,19 +1119,19 @@ class ShowTrait(templatePage):
                                         datasets=dataset_sub_menu))
                     #    ("**heading**", tissue_name))
                     #dataset_menu.append(dataset_sub_menu)
-            
+
             dataset_menu_selected = None
             if len(dataset_menu):
-                if this_trait and this_trait.db:
-                    dataset_menu_selected = this_trait.db.name
+                if this_trait and this_trait.dataset:
+                    dataset_menu_selected = this_trait.dataset.name
 
                 #criteriaText = HT.Span("Return:", Class="ffl fwb fs12")
 
                 #criteriaMenu1 = HT.Select(name='criteria1', selected='500', onMouseOver="if (NS4 || IE4) activateEl('criterias', event);")
-                
+
                 return_results_menu = (100, 200, 500, 1000, 2000, 5000, 10000, 15000, 20000)
                 return_results_menu_selected = 500
-                
+
                 #criteriaMenu1.append(('top 100','100'))
                 #criteriaMenu1.append(('top 200','200'))
                 #criteriaMenu1.append(('top 500','500'))
@@ -1159,7 +1169,7 @@ class ShowTrait(templatePage):
         #corr_row = HT.TR()
         #corr_container = HT.Div(id="corr_tabs", Class="ui-tabs")
         #
-        #if (this_trait.db != None and this_trait.db.type =='ProbeSet'):
+        #if (this_trait.dataset != None and this_trait.dataset.type =='ProbeSet'):
         #    corr_tab_list = [HT.Href(text='Sample r', url="#corrtabs-1"),
         #                     HT.Href(text='Literature r',  url="#corrtabs-2"),
         #                     HT.Href(text='Tissue r', url="#corrtabs-3")]
@@ -1210,8 +1220,8 @@ class ShowTrait(templatePage):
             #literature_container.append(literatureTable)
             #literature_div.append(literature_container)
             #
-            #if this_trait.db != None:
-            #    if (this_trait.db.type =='ProbeSet'):
+            #if this_trait.dataset != None:
+            #    if (this_trait.dataset.type =='ProbeSet'):
             #        corr_container.append(literature_div)
             #
             #tissue_div = HT.Div(id="corrtabs-3")
@@ -1235,8 +1245,8 @@ class ShowTrait(templatePage):
             #
             #tissue_container.append(tissueTable)
             #tissue_div.append(tissue_container)
-            #if this_trait.db != None:
-            #    if (this_trait.db.type =='ProbeSet'):
+            #if this_trait.dataset != None:
+            #    if (this_trait.dataset.type =='ProbeSet'):
             #        corr_container.append(tissue_div)
             #
             #corr_row.append(HT.TD(corr_container))
@@ -1538,7 +1548,7 @@ class ShowTrait(templatePage):
 
         if other_sample_names:
             par_f1_samples = fd.parlist + fd.f1list
-            
+
             other_sample_names.sort() #Sort other samples
             other_sample_names = par_f1_samples + other_sample_names
 
@@ -1549,13 +1559,13 @@ class ShowTrait(templatePage):
                                             this_trait=this_trait,
                                             sample_group_type='other',
                                             header="Non-%s" % (fd.group))
-            
+
             self.sample_groups = (primary_samples, other_samples)
         else:
             self.sample_groups = (primary_samples,)
 
         #TODO: Figure out why this if statement is written this way - Zach
-        #if (other_sample_names or (fd.f1list and this_trait.data.has_key(fd.f1list[0])) 
+        #if (other_sample_names or (fd.f1list and this_trait.data.has_key(fd.f1list[0]))
         #        or (fd.f1list and this_trait.data.has_key(fd.f1list[1]))):
         #    print("hjs")
         fd.allsamplelist = all_samples_ordered
diff --git a/wqflask/wqflask/templates/search_result_page.html b/wqflask/wqflask/templates/search_result_page.html
index 54cdd42b..35ff4e8e 100644
--- a/wqflask/wqflask/templates/search_result_page.html
+++ b/wqflask/wqflask/templates/search_result_page.html
@@ -39,6 +39,7 @@
                     {% for header in header_fields %}
                         <th>{{header}}</th>
                     {% endfor %}
+                    </tr>
                 </thead>
 
                 <tbody>
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index fb93af53..cdc3379f 100644
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -67,7 +67,7 @@ def search_page():
         #print("trait_list is:", pf(the_search.__dict__['trait_list'][0].__dict__))
         #for trait in the_search.trait_list:
         #    print(" -", trait.description_display)
-        
+
         return render_template("search_result_page.html", **the_search.__dict__)
 
 
@@ -87,6 +87,7 @@ def whats_new_page():
 def show_trait_page():
     # Here it's currently too complicated not to use an fd that is a webqtlFormData
     fd = webqtlFormData.webqtlFormData(request.args)
+    print("stp y1:", pf(vars(fd)))
     template_vars = show_trait.ShowTrait(fd)
     template_vars.js_data = json.dumps(template_vars.js_data,
                                        default=json_default_handler,