aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--misc/notes.txt4
-rw-r--r--wqflask/wqflask/my_pylmm/run_pylmm.py77
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/js/dataTables.naturalSort.js56
-rw-r--r--wqflask/wqflask/templates/index_page.html6
4 files changed, 140 insertions, 3 deletions
diff --git a/misc/notes.txt b/misc/notes.txt
index 5a43ab8a..fa2152d9 100644
--- a/misc/notes.txt
+++ b/misc/notes.txt
@@ -273,6 +273,10 @@ grep -ir (search string) (directory)
===========================================
+Use argparse to deal with command line arguments (instead of argv)
+
+===========================================
+
Change owner/group:
chown zas1024 somefile (change owner of somefile to zas1024)
diff --git a/wqflask/wqflask/my_pylmm/run_pylmm.py b/wqflask/wqflask/my_pylmm/run_pylmm.py
new file mode 100644
index 00000000..9ac03ad2
--- /dev/null
+++ b/wqflask/wqflask/my_pylmm/run_pylmm.py
@@ -0,0 +1,77 @@
+from __future__ import absolute_import, print_function, division
+
+from base import data_set
+from base.species import TheSpecies
+
+ def run(dataset_name, vals, temp_uuid):
+ """Generates p-values for each marker"""
+
+ tempdata = temp_data.TempData(temp_uuid)
+
+ dataset = data_set.create_dataset(dataset_name)
+ species = TheSpecies(dataset=dataset)
+
+ samples = [] # Want only ones with values
+ vals = vals
+
+ for sample in dataset.group.samplelist:
+ samples.append(str(sample))
+
+ gen_data(dataset, vals, tempdata)
+
+
+ def gen_data(dataset, vals)
+ dataset.group.get_markers()
+
+ pheno_vector = np.array([val == "x" and np.nan or float(val) for val in vals])
+
+ if dataset.group.species == "human":
+ p_values, t_stats = gen_human_results(pheno_vector, tempdata)
+ else:
+ genotype_data = [marker['genotypes'] for marker in self.dataset.group.markers.markers]
+
+ no_val_samples = self.identify_empty_samples()
+ trimmed_genotype_data = self.trim_genotypes(genotype_data, no_val_samples)
+
+ genotype_matrix = np.array(trimmed_genotype_data).T
+
+ #print("pheno_vector: ", pf(pheno_vector))
+ #print("genotype_matrix: ", pf(genotype_matrix))
+ #print("genotype_matrix.shape: ", pf(genotype_matrix.shape))
+
+ t_stats, p_values = lmm.run(
+ pheno_vector,
+ genotype_matrix,
+ restricted_max_likelihood=True,
+ refit=False,
+ temp_data=tempdata
+ )
+ #print("p_values:", p_values)
+
+ self.dataset.group.markers.add_pvalues(p_values)
+ return self.dataset.group.markers.markers
+
+
+ def gen_human_results(self, pheno_vector, tempdata):
+ file_base = os.path.join(webqtlConfig.PYLMM_PATH, self.dataset.group.name)
+
+ plink_input = input.plink(file_base, type='b')
+ input_file_name = os.path.join(webqtlConfig.SNP_PATH, self.dataset.group.name + ".snps.gz")
+
+ pheno_vector = pheno_vector.reshape((len(pheno_vector), 1))
+ covariate_matrix = np.ones((pheno_vector.shape[0],1))
+ kinship_matrix = np.fromfile(open(file_base + '.kin','r'),sep=" ")
+ kinship_matrix.resize((len(plink_input.indivs),len(plink_input.indivs)))
+
+ p_values, t_stats = lmm.run_human(
+ pheno_vector,
+ covariate_matrix,
+ input_file_name,
+ kinship_matrix,
+ loading_progress=tempdata
+ )
+
+ return p_values, t_stats
+
+if __name__ == '__main__':
+ run(dataset_name, vals, temp_uuid) \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/js/dataTables.naturalSort.js b/wqflask/wqflask/static/new/packages/DataTables/js/dataTables.naturalSort.js
new file mode 100644
index 00000000..c9e26682
--- /dev/null
+++ b/wqflask/wqflask/static/new/packages/DataTables/js/dataTables.naturalSort.js
@@ -0,0 +1,56 @@
+(function() {
+
+/*
+ * Natural Sort algorithm for Javascript - Version 0.7 - Released under MIT license
+ * Author: Jim Palmer (based on chunking idea from Dave Koelle)
+ * Contributors: Mike Grier (mgrier.com), Clint Priest, Kyle Adams, guillermo
+ * See: http://js-naturalsort.googlecode.com/svn/trunk/naturalSort.js
+ */
+function naturalSort (a, b) {
+ var re = /(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi,
+ sre = /(^[ ]*|[ ]*$)/g,
+ dre = /(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,
+ hre = /^0x[0-9a-f]+$/i,
+ ore = /^0/,
+ // convert all to strings and trim()
+ x = a.toString().replace(sre, '') || '',
+ y = b.toString().replace(sre, '') || '',
+ // chunk/tokenize
+ xN = x.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'),
+ yN = y.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'),
+ // numeric, hex or date detection
+ xD = parseInt(x.match(hre)) || (xN.length != 1 && x.match(dre) && Date.parse(x)),
+ yD = parseInt(y.match(hre)) || xD && y.match(dre) && Date.parse(y) || null;
+ // first try and sort Hex codes or Dates
+ if (yD)
+ if ( xD < yD ) return -1;
+ else if ( xD > yD ) return 1;
+ // natural sorting through split numeric strings and default strings
+ for(var cLoc=0, numS=Math.max(xN.length, yN.length); cLoc < numS; cLoc++) {
+ // find floats not starting with '0', string or 0 if not defined (Clint Priest)
+ var oFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc]) || xN[cLoc] || 0;
+ var oFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc]) || yN[cLoc] || 0;
+ // handle numeric vs string comparison - number < string - (Kyle Adams)
+ if (isNaN(oFxNcL) !== isNaN(oFyNcL)) return (isNaN(oFxNcL)) ? 1 : -1;
+ // rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'
+ else if (typeof oFxNcL !== typeof oFyNcL) {
+ oFxNcL += '';
+ oFyNcL += '';
+ }
+ if (oFxNcL < oFyNcL) return -1;
+ if (oFxNcL > oFyNcL) return 1;
+ }
+ return 0;
+}
+
+jQuery.extend( jQuery.fn.dataTableExt.oSort, {
+ "natural-asc": function ( a, b ) {
+ return naturalSort(a,b);
+ },
+
+ "natural-desc": function ( a, b ) {
+ return naturalSort(a,b) * -1;
+ }
+} );
+
+}()); \ No newline at end of file
diff --git a/wqflask/wqflask/templates/index_page.html b/wqflask/wqflask/templates/index_page.html
index d177a7bd..a7d7b513 100644
--- a/wqflask/wqflask/templates/index_page.html
+++ b/wqflask/wqflask/templates/index_page.html
@@ -17,7 +17,7 @@
<div class="row">
<div class="span3 bs-docs-sidebar">
<ul class="nav nav-list bs-docs-sidenav">
- <li><a href="#quick-search"><i class="icon-chevron-right"></i> Quick Search</a></li>
+<!-- <li><a href="#quick-search"><i class="icon-chevron-right"></i> Quick Search</a></li>-->
<li><a href="#search"><i class="icon-chevron-right"></i> Search</a></li>
<li><a href="#getting-started"><i class="icon-chevron-right"></i> Getting started</a></li>
<li><a href="#advanced"><i class="icon-chevron-right"></i> Advanced commands</a></li>
@@ -27,7 +27,7 @@
</div>
<div class="span9">
- <section id="quick-search">
+<!-- <section id="quick-search">
<div class="page-header">
<h1>Quick search</h1>
</div>
@@ -52,7 +52,7 @@
</div>
</fieldset>
</form>
- </section>
+ </section>-->
<section id="search">
<div class="page-header">
<h1>Select and search</h1>