From 1e081d88b96660c69d2de9e6b00a54f800348cde Mon Sep 17 00:00:00 2001 From: Zachary Sloan Date: Wed, 19 Sep 2012 17:06:42 -0500 Subject: Made pearson/spearman options disappear if lit correlation is chosen, began to address how to deal with Trait object in CorrelationPage --- wqflask/base/webqtlTrait.py | 34 ++++++++++++++++++++++ wqflask/wqflask/correlation/CorrelationPage.py | 33 +++++++++++---------- .../new/javascript/trait_data_and_analysis.coffee | 4 +++ .../new/javascript/trait_data_and_analysis.js | 7 ++++- .../wqflask/templates/trait_data_and_analysis.html | 9 +++--- wqflask/wqflask/views.py | 2 +- 6 files changed, 68 insertions(+), 21 deletions(-) diff --git a/wqflask/base/webqtlTrait.py b/wqflask/base/webqtlTrait.py index 337493ef..8240eafc 100755 --- a/wqflask/base/webqtlTrait.py +++ b/wqflask/base/webqtlTrait.py @@ -660,3 +660,37 @@ class webqtlTrait: else: return dict(name = self.db.fullname, url = webqtlConfig.INFOPAGEHREF % self.db.name) + + def calculate_correlation(self, values, method): + """Calculate the correlation value and p value according to the method specified""" + + #ZS: This takes the list of values of the trait our selected trait is being correlated against and removes the values of the samples our trait has no value for + #There's probably a better way of dealing with this, but I'll have to ask Christian + updated_raw_values = [] + updated_values = [] + for i in range(len(values)): + if values[i] != "None": + updated_raw_values.append(self.raw_values[i]) + updated_values.append(values[i]) + + self.raw_values = updated_raw_values + values = updated_values + + if method == METHOD_SAMPLE_PEARSON or method == METHOD_LIT or method == METHOD_TISSUE_PEARSON: + corr, nOverlap = webqtlUtil.calCorrelation(self.raw_values, values, len(values)) + else: + corr, nOverlap = webqtlUtil.calCorrelationRank(self.raw_values, values, len(values)) + + self.correlation = corr + self.overlap = nOverlap + + if self.overlap < 3: + self.p_value = 1.0 + else: + #ZS - This is probably the wrong way to deal with this. Correlation values of 1.0 definitely exist (the trait correlated against itself), so zero division needs to br prevented. + if abs(self.correlation) >= 1.0: + self.p_value = 0.0 + else: + ZValue = 0.5*log((1.0+self.correlation)/(1.0-self.correlation)) + ZValue = ZValue*sqrt(self.overlap-3) + self.p_value = 2.0*(1.0 - reaper.normp(abs(ZValue))) diff --git a/wqflask/wqflask/correlation/CorrelationPage.py b/wqflask/wqflask/correlation/CorrelationPage.py index 1f7f2553..a9db493b 100644 --- a/wqflask/wqflask/correlation/CorrelationPage.py +++ b/wqflask/wqflask/correlation/CorrelationPage.py @@ -72,7 +72,9 @@ class AuthException(Exception): pass class Trait(object): - def __init__(self, name, raw_values = None, lit_corr = None, tissue_corr = None, p_tissue = None): + + + def __init__(self, name, raw_values = None, lit_corr = None, tissue_corr = None, p_tissue = None): self.name = name self.raw_values = raw_values self.lit_corr = lit_corr @@ -260,16 +262,16 @@ def auth_user_for_db(db, cursor, target_db_name, privilege, username): class CorrelationPage(templatePage): - corrMinInformative = 4 + corr_min_informative = 4 PAGE_HEADING = "Correlation Table" - CORRELATION_METHODS = {"1" : "Genetic Correlation (Pearson's r)", - "2" : "Genetic Correlation (Spearman's rho)", - "3" : "SGO Literature Correlation", - "4" : "Tissue Correlation (Pearson's r)", - "5" : "Tissue Correlation (Spearman's rho)"} - - RANK_ORDERS = {"1": 0, "2": 1, "3": 0, "4": 0, "5": 1} + #CORRELATION_METHODS = {"1" : "Genetic Correlation (Pearson's r)", + # "2" : "Genetic Correlation (Spearman's rho)", + # "3" : "SGO Literature Correlation", + # "4" : "Tissue Correlation (Pearson's r)", + # "5" : "Tissue Correlation (Spearman's rho)"} + # + #RANK_ORDERS = {"1": 0, "2": 1, "3": 0, "4": 0, "5": 1} def error(self, message, *args, **kw): @@ -288,7 +290,7 @@ class CorrelationPage(templatePage): #print("in CorrelationPage __init__ now fd is:", pf(fd.__dict__)) # Connect to the database if not self.openMysql(): - returnt + return # Read the genotype from a file if not fd.genotype: @@ -329,19 +331,20 @@ class CorrelationPage(templatePage): print("samplenames is:", pf(self.sample_names)) #CF - If less than a minimum number of strains/cases in common, don't calculate anything - if len(self.sample_names) < self.corrMinInformative: - detail = ['Fewer than %d strain data were entered for %s data set. No calculation of correlation has been attempted.' % (self.corrMinInformative, fd.RISet)] + if len(self.sample_names) < self.corr_min_informative: + detail = ['Fewer than %d strain data were entered for %s data set. No calculation of correlation has been attempted.' % (self.corr_min_informative, fd.RISet)] self.error(heading=None, detail=detail) for key, value in self.__dict__.items(): if key.startswith("corr"): print("[red] %s - %s" % (key, value)) - correlation_method = self.CORRELATION_METHODS[self.method] - rankOrder = self.RANK_ORDERS[self.method] + #correlation_method = self.CORRELATION_METHODS[self.method] + #rankOrder = self.RANK_ORDERS[self.method] # CF - Number of results returned - self.returnNumber = int(fd.criteria) + # Todo: Get rid of self.returnNumber + self.returnNumber = self.corr_return_results self.record_count = 0 diff --git a/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.coffee b/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.coffee index 5aef18e5..2952bef5 100644 --- a/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.coffee +++ b/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.coffee @@ -196,6 +196,10 @@ $ -> console.log("corr_method is:", corr_method) $('.correlation_desc').hide() $('#' + corr_method + "_r_desc").show().effect("highlight") + if corr_method == "lit" + $("#corr_sample_method_options").hide() + else + $("#corr_sample_method_options").show() $('select[name=corr_method]').change(on_corr_method_change) diff --git a/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.js b/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.js index 05b25197..04f43822 100644 --- a/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.js +++ b/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.js @@ -218,7 +218,12 @@ corr_method = $('select[name=corr_method]').val(); console.log("corr_method is:", corr_method); $('.correlation_desc').hide(); - return $('#' + corr_method + "_r_desc").show().effect("highlight"); + $('#' + corr_method + "_r_desc").show().effect("highlight"); + if (corr_method === "lit") { + return $("#corr_sample_method_options").hide(); + } else { + return $("#corr_sample_method_options").show(); + } }; $('select[name=corr_method]').change(on_corr_method_change); console.log("before registering show_hide_outliers"); diff --git a/wqflask/wqflask/templates/trait_data_and_analysis.html b/wqflask/wqflask/templates/trait_data_and_analysis.html index 05fd457a..16f2e2be 100644 --- a/wqflask/wqflask/templates/trait_data_and_analysis.html +++ b/wqflask/wqflask/templates/trait_data_and_analysis.html @@ -762,10 +762,11 @@
- Pearson -     - Spearman Rank -
+
+ Pearson +     + Spearman Rank +



diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py index 1b60f255..0befb74a 100644 --- a/wqflask/wqflask/views.py +++ b/wqflask/wqflask/views.py @@ -90,7 +90,7 @@ def corr_compute(): print("Have fd") template_vars = CorrelationPage.CorrelationPage(fd) print("Made it to rendering") - return render_template("corr_compute.html", **template_vars.__dict__) + return render_template("correlation_page.html", **template_vars.__dict__) # Todo: Can we simplify this? -Sam -- cgit v1.2.3