From 717677b0c09f6ba08268db12d4889503cc2606d9 Mon Sep 17 00:00:00 2001 From: zsloan Date: Wed, 2 Nov 2016 20:00:04 +0000 Subject: Added Scroller functionality to regular (but not global) search, which increases table load speed In order to implement Scroller (and make table look nicer), all rows are the same height and excess description/authors text is shown in a tooltip Increased table width for non-Geno DBs Fixed issue where Genotype traits did not fetch their location_repr (text for displaying location), causing that column to be blank in searches Fixed issue causing Correlation Matrix cells to not be colored corresponding with their correlation and also increased cell font a little Fixed issue where dataset link in the Correlation Page did not correctly point to corresponding GN1 page --- wqflask/base/data_set.py | 17 +++++++- wqflask/base/trait.py | 103 +++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 107 insertions(+), 13 deletions(-) (limited to 'wqflask/base') diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py index fddfce58..04436a2e 100644 --- a/wqflask/base/data_set.py +++ b/wqflask/base/data_set.py @@ -271,7 +271,8 @@ class DatasetGroup(object): self.f1list = None self.parlist = None self.get_f1_parent_strains() - #logger.debug("parents/f1s: {}:{}".format(self.parlist, self.f1list)) + + self.accession_id = self.get_accession_id() self.species = webqtlDatabaseFunction.retrieve_species(self.name) @@ -279,6 +280,20 @@ class DatasetGroup(object): self.allsamples = None self._datasets = None + def get_accession_id(self): + results = g.db.execute("""select InfoFiles.GN_AccesionId from InfoFiles, PublishFreeze, InbredSet where + InbredSet.Name = %s and + PublishFreeze.InbredSetId = InbredSet.Id and + InfoFiles.InfoPageName = PublishFreeze.Name and + PublishFreeze.public > 0 and + PublishFreeze.confidentiality < 1 order by + PublishFreeze.CreateTime desc""", (self.name)).fetchone() + + if results != None: + return str(results[0]) + else: + return "None" + def get_specified_markers(self, markers = []): self.markers = HumanMarkers(self.name, markers) diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py index 276c624a..8788d983 100644 --- a/wqflask/base/trait.py +++ b/wqflask/base/trait.py @@ -91,16 +91,27 @@ class GeneralTrait(object): additive=self.additive ) elif self.dataset.type == "Publish": - return dict(name=self.name, - dataset=self.dataset.name, - description=self.description_display, - authors=self.authors, - pubmed_text=self.pubmed_text, - pubmed_link=self.pubmed_link, - lrs_score=self.LRS_score_repr, - lrs_location=self.LRS_location_repr, - additive=self.additive - ) + if self.pubmed_id: + return dict(name=self.name, + dataset=self.dataset.name, + description=self.description_display, + authors=self.authors, + pubmed_text=self.pubmed_text, + pubmed_link=self.pubmed_link, + lrs_score=self.LRS_score_repr, + lrs_location=self.LRS_location_repr, + additive=self.additive + ) + else: + return dict(name=self.name, + dataset=self.dataset.name, + description=self.description_display, + authors=self.authors, + pubmed_text=self.pubmed_text, + lrs_score=self.LRS_score_repr, + lrs_location=self.LRS_location_repr, + additive=self.additive + ) elif self.dataset.type == "Geno": return dict(name=self.name, dataset=self.dataset.name, @@ -109,6 +120,62 @@ class GeneralTrait(object): else: return dict() + def jsonable_table_row(self, index, search_type): + """Return a list suitable for json and intended to be displayed in a table + + Actual turning into json doesn't happen here though""" + + if self.dataset.type == "ProbeSet": + if self.mean == "": + mean = "N/A" + else: + mean = "%.3f" % round(float(self.additive), 2) + if self.additive == "": + additive = "N/A" + else: + additive = "%.3f" % round(float(self.additive), 2) + return ['', + index, + ''+str(self.name)+'', + self.symbol, + self.description_display, + self.location_repr, + mean, + self.LRS_score_repr, + self.LRS_location_repr, + additive] + elif self.dataset.type == "Publish": + if self.additive == "": + additive = "N/A" + else: + additive = "%.2f" % round(float(self.additive), 2) + if self.pubmed_id: + return ['', + index, + ''+str(self.name)+'', + self.description_display, + self.authors, + '' + self.pubmed_text + '', + self.LRS_score_repr, + self.LRS_location_repr, + additive] + else: + return ['', + index, + ''+str(self.name)+'', + self.description_display, + self.authors, + self.pubmed_text, + self.LRS_score_repr, + self.LRS_location_repr, + additive] + elif self.dataset.type == "Geno": + return ['', + index, + ''+str(self.name)+'', + self.location_repr] + else: + return dict() def get_name(self): stringy = "" @@ -418,7 +485,7 @@ class GeneralTrait(object): self.description_display = description_display #XZ: trait_location_value is used for sorting - trait_location_repr = 'N/A' + self.location_repr = 'N/A' trait_location_value = 1000000 if self.chr and self.mb: @@ -438,6 +505,18 @@ class GeneralTrait(object): self.location_repr = 'Chr%s: %.6f' % (self.chr, float(self.mb)) self.location_value = trait_location_value + elif self.dataset.type == "Geno": + self.location_repr = 'N/A' + trait_location_value = 1000000 + + if self.chr and self.mb: + #Checks if the chromosome number can be cast to an int (i.e. isn't "X" or "Y") + #This is so we can convert the location to a number used for sorting + trait_location_value = convert_location_to_value(self.chr, self.mb) + + #ZS: Put this in function currently called "convert_location_to_value" + self.location_repr = 'Chr%s: %.6f' % (self.chr, float(self.mb)) + self.location_value = trait_location_value if get_qtl_info: #LRS and its location @@ -459,7 +538,7 @@ class GeneralTrait(object): logger.sql(query) trait_qtl = g.db.execute(query).fetchone() if trait_qtl: - self.locus, self.lrs, self.pvalue, self.mean, self.additive= trait_qtl + self.locus, self.lrs, self.pvalue, self.mean, self.additive = trait_qtl if self.locus: query = """ select Geno.Chr, Geno.Mb from Geno, Species -- cgit v1.2.3