diff options
-rw-r--r-- | misc/notes.txt | 4 | ||||
-rw-r--r-- | wqflask/wqflask/my_pylmm/run_pylmm.py | 77 | ||||
-rw-r--r-- | wqflask/wqflask/static/new/packages/DataTables/js/dataTables.naturalSort.js | 56 | ||||
-rw-r--r-- | wqflask/wqflask/templates/index_page.html | 6 |
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> |