about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--wqflask/wqflask/show_trait/show_trait.py56
-rw-r--r--wqflask/wqflask/static/new/javascript/initialize_show_trait_tables.js8
2 files changed, 38 insertions, 26 deletions
diff --git a/wqflask/wqflask/show_trait/show_trait.py b/wqflask/wqflask/show_trait/show_trait.py
index b6fcbcb8..424b8ee5 100644
--- a/wqflask/wqflask/show_trait/show_trait.py
+++ b/wqflask/wqflask/show_trait/show_trait.py
@@ -156,8 +156,14 @@ class ShowTrait:
 
         self.make_sample_lists()
 
-        self.qnorm_vals = quantile_normalize_vals(self.sample_groups)
-        self.z_scores = get_z_scores(self.sample_groups)
+        trait_vals_by_group = []
+        for sample_type in self.sample_groups:
+            trait_vals_by_group.append(get_trait_vals(sample_type.sample_list))
+
+        self.max_digits_by_group = get_max_digits(trait_vals_by_group)
+
+        self.qnorm_vals = quantile_normalize_vals(self.sample_groups, trait_vals_by_group)
+        self.z_scores = get_z_scores(self.sample_groups, trait_vals_by_group)
 
         self.temp_uuid = uuid.uuid4()
 
@@ -294,6 +300,7 @@ class ShowTrait:
 
         js_data = dict(trait_id=self.trait_id,
                        trait_symbol=trait_symbol,
+                       max_digits = self.max_digits_by_group,
                        short_description=short_description,
                        unit_type=trait_units,
                        dataset_type=self.dataset.type,
@@ -513,7 +520,26 @@ class ShowTrait:
         self.dataset.group.allsamples = all_samples_ordered
 
 
-def quantile_normalize_vals(sample_groups):
+def get_trait_vals(sample_list):
+    trait_vals = []
+    for sample in sample_list:
+        try:
+            trait_vals.append(float(sample.value))
+        except:
+            continue
+
+    return trait_vals
+
+def get_max_digits(trait_vals):
+    max_digits = []
+    for these_vals in trait_vals:
+        max_val = max(these_vals)
+        digits = len(str(max_val))
+        max_digits.append(digits - 1)
+
+    return max_digits
+
+def quantile_normalize_vals(sample_groups, trait_vals):
     def normf(trait_vals):
         ranked_vals = ss.rankdata(trait_vals)
         p_list = []
@@ -529,15 +555,8 @@ def quantile_normalize_vals(sample_groups):
         return normed_vals
 
     qnorm_by_group = []
-    for sample_type in sample_groups:
-        trait_vals = []
-        for sample in sample_type.sample_list:
-            try:
-                trait_vals.append(float(sample.value))
-            except:
-                continue
-
-        qnorm_vals = normf(trait_vals)
+    for i, sample_type in enumerate(sample_groups):
+        qnorm_vals = normf(trait_vals[i])
         qnorm_vals_with_x = []
         counter = 0
         for sample in sample_type.sample_list:
@@ -552,17 +571,10 @@ def quantile_normalize_vals(sample_groups):
     return qnorm_by_group
 
 
-def get_z_scores(sample_groups):
+def get_z_scores(sample_groups, trait_vals):
     zscore_by_group = []
-    for sample_type in sample_groups:
-        trait_vals = []
-        for sample in sample_type.sample_list:
-            try:
-                trait_vals.append(float(sample.value))
-            except:
-                continue
-
-        zscores = ss.mstats.zscore(np.array(trait_vals)).tolist()
+    for i, sample_type in enumerate(sample_groups):
+        zscores = ss.mstats.zscore(np.array(trait_vals[i])).tolist()
         zscores_with_x = []
         counter = 0
         for sample in sample_type.sample_list:
diff --git a/wqflask/wqflask/static/new/javascript/initialize_show_trait_tables.js b/wqflask/wqflask/static/new/javascript/initialize_show_trait_tables.js
index 05e4d547..f9369fb9 100644
--- a/wqflask/wqflask/static/new/javascript/initialize_show_trait_tables.js
+++ b/wqflask/wqflask/static/new/javascript/initialize_show_trait_tables.js
@@ -40,9 +40,9 @@ build_columns = function() {
       'data': null,
       'render': function(data, type, row, meta) {
         if (data.value == null) {
-            return '<input type="text" data-value="x" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_value" value="x" size=6 maxlength=6>'
+            return '<input type="text" data-value="x" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_value" value="x" size=' + js_data.max_digits[0] + '>'
         } else {
-            return '<input type="text" data-value="' + data.value.toFixed(3) + '" data-qnorm="' + js_data['qnorm_values'][0][parseInt(data.this_id) - 1] + '" data-zscore="' + js_data['zscore_values'][0][parseInt(data.this_id) - 1] + '" name="value:' + data.name + '" class="trait_value_input edit_sample_value" value="' + data.value.toFixed(3) + '" size=6 maxlength=6>'
+            return '<input type="text" data-value="' + data.value.toFixed(3) + '" data-qnorm="' + js_data['qnorm_values'][0][parseInt(data.this_id) - 1] + '" data-zscore="' + js_data['zscore_values'][0][parseInt(data.this_id) - 1] + '" name="value:' + data.name + '" class="trait_value_input edit_sample_value" value="' + data.value.toFixed(3) + '" size=' + js_data.max_digits[0] + '>'
         }
       }
     }
@@ -66,9 +66,9 @@ build_columns = function() {
         'data': null,
         'render': function(data, type, row, meta) {
           if (data.variance == null) {
-              return '<input type="text" data-value="x" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" class="trait_value_input edit_sample_se" value="x" size=6 maxlength=6>'
+              return '<input type="text" data-value="x" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" class="trait_value_input edit_sample_se" value="x" size=6>'
           } else {
-              return '<input type="text" data-value="' + data.variance.toFixed(3) + '" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" class="trait_value_input edit_sample_se" value="' + data.variance.toFixed(3) + '" size=6 maxlength=6>'
+              return '<input type="text" data-value="' + data.variance.toFixed(3) + '" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" class="trait_value_input edit_sample_se" value="' + data.variance.toFixed(3) + '" size=6>'
           }
         }
       }