aboutsummaryrefslogtreecommitdiff
path: root/gn2/wqflask/static/new/javascript
diff options
context:
space:
mode:
Diffstat (limited to 'gn2/wqflask/static/new/javascript')
-rw-r--r--gn2/wqflask/static/new/javascript/auth/search.js172
-rw-r--r--gn2/wqflask/static/new/javascript/auth/search_genotypes.js95
-rw-r--r--gn2/wqflask/static/new/javascript/auth/search_mrna.js97
-rw-r--r--gn2/wqflask/static/new/javascript/auth/search_phenotypes.js188
-rw-r--r--gn2/wqflask/static/new/javascript/auto_hide_column.js21
-rw-r--r--gn2/wqflask/static/new/javascript/bar_chart.js498
-rw-r--r--gn2/wqflask/static/new/javascript/box.js307
-rw-r--r--gn2/wqflask/static/new/javascript/box_plot.js80
-rw-r--r--gn2/wqflask/static/new/javascript/chr_lod_chart.js297
-rw-r--r--gn2/wqflask/static/new/javascript/chr_manhattan_plot.js273
-rw-r--r--gn2/wqflask/static/new/javascript/colorbrewer.js302
-rw-r--r--gn2/wqflask/static/new/javascript/compare_traits_scatterplot.js121
-rw-r--r--gn2/wqflask/static/new/javascript/comparison_bar_chart.js25
-rw-r--r--gn2/wqflask/static/new/javascript/corr_matrix.js159
-rw-r--r--gn2/wqflask/static/new/javascript/corr_scatter_plot.js73
-rw-r--r--gn2/wqflask/static/new/javascript/create_corr_matrix.js94
-rw-r--r--gn2/wqflask/static/new/javascript/create_datatable.js117
-rw-r--r--gn2/wqflask/static/new/javascript/create_heatmap.js14
-rw-r--r--gn2/wqflask/static/new/javascript/create_lodchart.js50
-rw-r--r--gn2/wqflask/static/new/javascript/create_manhattan_plot.js68
-rw-r--r--gn2/wqflask/static/new/javascript/ctl_graph.js193
-rw-r--r--gn2/wqflask/static/new/javascript/curvechart.js353
-rw-r--r--gn2/wqflask/static/new/javascript/d3panels.min.js1
-rw-r--r--gn2/wqflask/static/new/javascript/dataset_select_menu_orig.js330
-rw-r--r--gn2/wqflask/static/new/javascript/draw_corr_scatterplot.js913
-rw-r--r--gn2/wqflask/static/new/javascript/draw_probability_plot.js136
-rw-r--r--gn2/wqflask/static/new/javascript/get_covariates_from_collection.js248
-rw-r--r--gn2/wqflask/static/new/javascript/get_traits_from_collection.js414
-rw-r--r--gn2/wqflask/static/new/javascript/group_manager.js37
-rw-r--r--gn2/wqflask/static/new/javascript/histogram.js134
-rw-r--r--gn2/wqflask/static/new/javascript/init_genome_browser.js82
-rw-r--r--gn2/wqflask/static/new/javascript/initialize_show_trait_tables.js246
-rw-r--r--gn2/wqflask/static/new/javascript/iplotMScanone_noeff.js114
-rw-r--r--gn2/wqflask/static/new/javascript/loadings_plot.js109
-rw-r--r--gn2/wqflask/static/new/javascript/lod_chart.js473
-rw-r--r--gn2/wqflask/static/new/javascript/lodheatmap.js277
-rw-r--r--gn2/wqflask/static/new/javascript/login.js41
-rw-r--r--gn2/wqflask/static/new/javascript/network_graph.js259
-rw-r--r--gn2/wqflask/static/new/javascript/panelutil.js462
-rw-r--r--gn2/wqflask/static/new/javascript/partial_correlations.js26
-rw-r--r--gn2/wqflask/static/new/javascript/password_strength.js57
-rw-r--r--gn2/wqflask/static/new/javascript/plotly_probability_plot.js308
-rw-r--r--gn2/wqflask/static/new/javascript/scatter-matrix.js551
-rw-r--r--gn2/wqflask/static/new/javascript/scatterplot.js414
-rw-r--r--gn2/wqflask/static/new/javascript/search_autocomplete.js173
-rw-r--r--gn2/wqflask/static/new/javascript/search_results.js386
-rw-r--r--gn2/wqflask/static/new/javascript/show_trait.js1677
-rw-r--r--gn2/wqflask/static/new/javascript/show_trait_mapping_tools.js329
-rw-r--r--gn2/wqflask/static/new/javascript/stats.js176
-rw-r--r--gn2/wqflask/static/new/javascript/table_functions.js90
-rw-r--r--gn2/wqflask/static/new/javascript/thank_you.js6
-rw-r--r--gn2/wqflask/static/new/javascript/typeahead_rn6.json1
-rw-r--r--gn2/wqflask/static/new/javascript/validation.js42
53 files changed, 12109 insertions, 0 deletions
diff --git a/gn2/wqflask/static/new/javascript/auth/search.js b/gn2/wqflask/static/new/javascript/auth/search.js
new file mode 100644
index 00000000..d094cebf
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/auth/search.js
@@ -0,0 +1,172 @@
+class InvalidCSSIDSelector extends Error {
+ constructor(message) {
+ super(message);
+ this.name = "InvalidCSSIDSelector";
+ }
+}
+
+class InvalidDataAttributeName extends Error {
+ constructor(message) {
+ super(message);
+ this.name = "InvalidDataAttributeName";
+ }
+}
+
+/**
+ * CSSIDSelector: A CSS ID Selector
+ * @param {String} A CSS selector of the form '#...'
+ */
+class CSSIDSelector {
+ constructor(selector) {
+ if(!selector.startsWith("#")) {
+ throw new InvalidCSSIDSelector(
+ "Expected the CSS selector to begin with a `#` character.");
+ }
+ let id_str = selector.slice(1, selector.length);
+ if(document.getElementById(id_str) == null) {
+ throw new InvalidCSSIDSelector(
+ "Element with ID '" + id_str + "' does not exist.");
+ }
+ this.selector = selector;
+ }
+}
+
+/**
+ * TableDataSource: A type to represent a table's data source
+ * @param {String} A CSS selector for an ID
+ * @param {String} A `data-*` attribute name
+ */
+class TableDataSource {
+ constructor(table_id, data_attribute_name, checkbox_creation_function) {
+ this.table_id = new CSSIDSelector(table_id);
+ let data = document.querySelector(
+ table_id).getAttribute(data_attribute_name);
+ if(data == null) {
+ throw new InvalidDataAttributeName(
+ "data-* attribute '" + data_attribute_name + "' does not exist " +
+ "for table with ID '" + table_id.slice(1, table_id.length) +
+ "'.");
+ } else {
+ this.data_attribute_name = data_attribute_name;
+ }
+ this.checkbox_creation_function = checkbox_creation_function;
+ }
+}
+
+/**
+ * Render the table
+ * @param {String} The selector for the table's ID
+ * @param {String} The name of the data-* attribute holding the table's data
+ * @param {Function} The function to call to generate the appropriate checkbox
+ */
+function render_table(table_data_source) {
+ table_id = table_data_source.table_id.selector;
+ data_attr_name = table_data_source.data_attribute_name;
+ $(table_id + " tbody tr").remove();
+ table_data = JSON.parse($(table_id).attr(data_attr_name)).sort((d1, d2) => {
+ return (d1.dataset_name > d2.dataset_name ? 1 : (
+ d1.dataset_name < d2.dataset_name ? -1 : 0))
+ });
+ if(table_data.length < 1) {
+ row = $("<tr>")
+ cell = $('<td colspan="100%" align="center">');
+ cell.append(
+ $('<span class="glyphicon glyphicon-info-sign text-info">'));
+ cell.append("&nbsp;");
+ cell.append("No genotype datasets remaining.");
+ row.append(cell);
+ $(table_id + " tbody").append(row);
+ }
+ table_data.forEach(function(dataset) {
+ row = $("<tr>")
+ row.append(table_data_source.checkbox_creation_function(dataset));
+ row.append(table_cell(dataset.InbredSetName));
+ row.append(table_cell(dataset.dataset_name));
+ row.append(table_cell(dataset.dataset_fullname));
+ row.append(table_cell(dataset.dataset_shortname));
+ $(table_id + " tbody").append(row);
+ });
+}
+
+function in_array(items, filter_fn) {
+ return items.filter(filter_fn).length > 0;
+}
+
+function remove_from_table_data(dataset, table_data_source, filter_fn) {
+ let table_id = table_data_source.table_id.selector;
+ let data_attr_name = table_data_source.data_attribute_name;
+ without_dataset = JSON.parse($(table_id).attr(data_attr_name)).filter(
+ filter_fn);
+ $(table_id).attr(data_attr_name, JSON.stringify(without_dataset));
+}
+
+function add_to_table_data(dataset, table_data_source, filter_fn) {
+ let table_id = table_data_source.table_id.selector;
+ let data_attr_name = table_data_source.data_attribute_name;
+ table_data = JSON.parse($(table_id).attr(data_attr_name));
+ if(!in_array(table_data, filter_fn)) {
+ table_data.push(dataset);
+ }
+ $(table_id).attr(data_attr_name, JSON.stringify(Array.from(table_data)));
+}
+
+/**
+ * Switch the dataset/trait from search table to selection table and vice versa
+ * @param {Object} A dataset/trait object
+ * @param {TableDataSource} The source table for the dataset/trait
+ * @param {TableDataSource} The destination table for the dataset/trait
+ */
+function select_deselect(item, source, destination, filter_fn, render_fn=render_table) {
+ dest_selector = destination.table_id.selector
+ dest_data = JSON.parse(
+ $(dest_selector).attr(destination.data_attribute_name));
+ add_to_table_data(item, destination, filter_fn); // Add to destination table
+ remove_from_table_data(item, source, (arg) => {return !filter_fn(arg)}); // Remove from source table
+ /***** BEGIN: Re-render tables *****/
+ render_fn(destination);
+ render_fn(source);
+ /***** END: Re-render tables *****/
+}
+
+function debounce(func, delay=500) {
+ var timeout;
+ return function search(event) {
+ clearTimeout(timeout);
+ timeout = setTimeout(func, delay);
+ };
+}
+
+/**
+ * Build a checkbox
+ * @param {Dataset Object} A JSON.stringify-able object
+ * @param {String} The name to assign the checkbox
+ */
+function build_checkbox(data_object, checkbox_name, checkbox_aux_classes="", checked=false) {
+ cell = $("<td>");
+ check = $(
+ '<input type="checkbox" class="checkbox" ' +
+ 'name="' + checkbox_name + '">');
+ check.val(JSON.stringify(data_object));
+ check.prop("checked", checked);
+ auxilliary_classes = checkbox_aux_classes.trim();
+ if(Boolean(auxilliary_classes)) {
+ check.attr("class",
+ check.attr("class") + " " + auxilliary_classes.trim());
+ }
+ cell.append(check);
+ return cell;
+}
+
+function link_checkbox(dataset) {
+ return build_checkbox(dataset, "selected", "checkbox-selected", true);
+}
+
+function search_checkbox(dataset) {
+ return build_checkbox(dataset, "search_datasets", "checkbox-search");
+}
+
+function table_cell(value) {
+ cell = $("<td>");
+ cell.html(value);
+ return cell;
+}
diff --git a/gn2/wqflask/static/new/javascript/auth/search_genotypes.js b/gn2/wqflask/static/new/javascript/auth/search_genotypes.js
new file mode 100644
index 00000000..d1b8ed9e
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/auth/search_genotypes.js
@@ -0,0 +1,95 @@
+function toggle_link_button() {
+ num_groups = $("#frm-link-genotypes select option").length - 1;
+ num_selected = JSON.parse(
+ $("#tbl-link-genotypes").attr("data-selected-datasets")).length;
+ if(num_groups > 0 && num_selected > 0) {
+ $("#frm-link-genotypes input[type='submit']").prop("disabled", false);
+ } else {
+ $("#frm-link-genotypes input[type='submit']").prop("disabled", true);
+ }
+}
+
+function search_genotypes() {
+ query = document.getElementById("txt-query").value;
+ selected = JSON.parse(document.getElementById(
+ "tbl-link-genotypes").getAttribute("data-selected-datasets"));
+ species_name = document.getElementById("txt-species-name").value
+ search_endpoint = "/auth/data/genotype/search"
+ search_table = new TableDataSource(
+ "#tbl-genotypes", "data-datasets", search_checkbox);
+ $.ajax(
+ search_endpoint,
+ {
+ "method": "POST",
+ "contentType": "application/json; charset=utf-8",
+ "dataType": "json",
+ "data": JSON.stringify({
+ "query": query,
+ "selected": selected,
+ "dataset_type": "genotype",
+ "species_name": species_name}),
+ "error": function(jqXHR, textStatus, errorThrown) {
+ data = jqXHR.responseJSON
+ elt = document.getElementById("search-error").setAttribute(
+ "style", "display: block;");
+ document.getElementById("search-error-text").innerHTML = (
+ data.error + " (" + data.status_code + "): " +
+ data.error_description);
+ document.getElementById("tbl-genotypes").setAttribute(
+ "data-datasets", JSON.stringify([]));
+ render_table(search_table);
+ },
+ "success": function(data, textStatus, jqXHR) {
+ document.getElementById("search-error").setAttribute(
+ "style", "display: none;");
+ document.getElementById("tbl-genotypes").setAttribute(
+ "data-datasets", JSON.stringify(data));
+ render_table(search_table);
+ }
+ });
+}
+
+/**
+ * Return function to check whether `dataset` is in array of `datasets`.
+ * @param {GenotypeDataset} A genotype dataset.
+ * @param {Array} An array of genotype datasets.
+ */
+function make_filter(trait) {
+ return (dst) => {
+ return (dst.SpeciesId == dataset.SpeciesId &&
+ dst.InbredSetId == dataset.InbredSetId &&
+ dst.GenoFreezeId == dataset.GenoFreezeId);
+ };
+}
+
+$(document).ready(function() {
+ let search_table = new TableDataSource(
+ "#tbl-genotypes", "data-datasets", search_checkbox);
+ let link_table = new TableDataSource(
+ "#tbl-link-genotypes", "data-selected-datasets", link_checkbox);
+
+ $("#frm-search-traits").submit(function(event) {
+ event.preventDefault();
+ return false;
+ });
+
+ $("#txt-query").keyup(debounce(search_genotypes));
+
+ $("#tbl-genotypes").on("change", ".checkbox-search", function(event) {
+ if(this.checked) {
+ dataset = JSON.parse(this.value);
+ select_deselect(
+ dataset, search_table, link_table, make_filter(dataset));
+ toggle_link_button();
+ }
+ });
+
+ $("#tbl-link-genotypes").on("change", ".checkbox-selected", function(event) {
+ if(!this.checked) {
+ dataset = JSON.parse(this.value);
+ select_deselect(
+ dataset, link_table, search_table, make_filter(dataset));
+ toggle_link_button();
+ }
+ });
+});
diff --git a/gn2/wqflask/static/new/javascript/auth/search_mrna.js b/gn2/wqflask/static/new/javascript/auth/search_mrna.js
new file mode 100644
index 00000000..3eca4ed2
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/auth/search_mrna.js
@@ -0,0 +1,97 @@
+function toggle_link_button() {
+ num_groups = $("#frm-link select option").length - 1;
+ num_selected = JSON.parse(
+ $("#tbl-link").attr("data-datasets")).length;
+ if(num_groups > 0 && num_selected > 0) {
+ $("#frm-link input[type='submit']").prop("disabled", false);
+ } else {
+ $("#frm-link input[type='submit']").prop("disabled", true);
+ }
+}
+
+function search_mrna() {
+ query = document.getElementById("txt-query").value;
+ selected = JSON.parse(document.getElementById(
+ "tbl-link").getAttribute("data-datasets"));
+ species_name = document.getElementById("txt-species-name").value
+ search_endpoint = "/auth/data/mrna/search"
+ search_table = new TableDataSource(
+ "#tbl-search", "data-datasets", search_checkbox);
+ $.ajax(
+ search_endpoint,
+ {
+ "method": "POST",
+ "contentType": "application/json; charset=utf-8",
+ "dataType": "json",
+ "data": JSON.stringify({
+ "query": query,
+ "selected": selected,
+ "dataset_type": "mrna",
+ "species_name": species_name}),
+ "error": function(jqXHR, textStatus, errorThrown) {
+ error_data = jqXHR.responseJSON
+ console.debug("ERROR_DATA:", error_data);
+ elt = document.getElementById("search-error").setAttribute(
+ "style", "display: block;");
+ document.getElementById("search-error-text").innerHTML = (
+ error_data.error + " (" + error_data.status_code + "): " +
+ error_data.error_description);
+ document.getElementById("tbl-search").setAttribute(
+ "data-datasets", JSON.stringify([]));
+ render_table(search_table);
+ },
+ "success": function(data, textStatus, jqXHR) {
+ document.getElementById("search-error").setAttribute(
+ "style", "display: none;");
+ document.getElementById("tbl-search").setAttribute(
+ "data-datasets", JSON.stringify(data));
+ render_table(search_table);
+ }
+ });
+}
+
+/**
+ * Make function to check whether `dataset` is in array of `datasets`.
+ * @param {mRNADataset} A mrna dataset.
+ * @param {Array} An array of mrna datasets.
+ */
+function make_filter(dataset) {
+ return (dst) => {
+ return (dst.SpeciesId == dataset.SpeciesId &&
+ dst.InbredSetId == dataset.InbredSetId &&
+ dst.ProbeFreezeId == dataset.ProbeFreezeId &&
+ dst.ProbeSetFreezeId == dataset.ProbeSetFreezeId);
+ };
+}
+
+$(document).ready(function() {
+ let search_table = new TableDataSource(
+ "#tbl-search", "data-datasets", search_checkbox);
+ let link_table = new TableDataSource(
+ "#tbl-link", "data-datasets", link_checkbox);
+
+ $("#frm-search").submit(function(event) {
+ event.preventDefault();
+ return false;
+ });
+
+ $("#txt-query").keyup(debounce(search_mrna));
+
+ $("#tbl-search").on("change", ".checkbox-search", function(event) {
+ if(this.checked) {
+ dataset = JSON.parse(this.value);
+ select_deselect(
+ dataset, search_table, link_table, make_filter(dataset));
+ toggle_link_button();
+ }
+ });
+
+ $("#tbl-link").on("change", ".checkbox-selected", function(event) {
+ if(!this.checked) {
+ dataset = JSON.parse(this.value);
+ select_deselect(
+ dataset, link_table, search_table, make_filter(dataset));
+ toggle_link_button();
+ }
+ });
+});
diff --git a/gn2/wqflask/static/new/javascript/auth/search_phenotypes.js b/gn2/wqflask/static/new/javascript/auth/search_phenotypes.js
new file mode 100644
index 00000000..99ecb16e
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/auth/search_phenotypes.js
@@ -0,0 +1,188 @@
+/**
+ * Global variables: Bad idea - figure out how to pass them down a call stack.
+ */
+search_table = new TableDataSource(
+ "#tbl-phenotypes", "data-traits", (trait) => {
+ return build_checkbox(trait, "search_traits", "checkbox-search");
+ });
+link_table = new TableDataSource(
+ "#tbl-link-phenotypes", "data-traits", (trait) => {
+ return build_checkbox(
+ trait, "selected", "checkbox-selected", checked=true);
+ });
+
+/**
+ * Toggle the state for the "Link Traits" button
+ */
+function toggle_link_button() {
+ num_groups = $("#frm-link-phenotypes select option").length - 1;
+ num_selected = JSON.parse(
+ $("#tbl-link-phenotypes").attr("data-traits")).length;
+ if(num_groups > 0 && num_selected > 0) {
+ $("#frm-link-phenotypes input[type='submit']").prop("disabled", false);
+ } else {
+ $("#frm-link-phenotypes input[type='submit']").prop("disabled", true);
+ }
+}
+
+/**
+ * Default error function: print out debug messages
+ */
+function default_error_fn(jqXHR, textStatus, errorThrown) {
+ console.debug("XHR:", jqXHR);
+ console.debug("STATUS:", textStatus);
+ console.debug("ERROR:", errorThrown);
+}
+
+/**
+ * Render the table(s) for the phenotype traits
+ * @param {TableDataSource} The table to render
+ */
+function render_pheno_table(table_data_source) {
+ table_id = table_data_source.table_id.selector;
+ data_attr_name = table_data_source.data_attribute_name;
+ $(table_id + " tbody tr").remove();
+ table_data = JSON.parse($(table_id).attr(data_attr_name)).sort((t1, t2) => {
+ return (t1.name > t2.name ? 1 : (t1.name < t2.name ? -1 : 0))
+ });
+ if(table_data.length < 1) {
+ row = $("<tr>")
+ cell = $('<td colspan="100%" align="center">');
+ cell.append(
+ $('<span class="glyphicon glyphicon-info-sign text-info">'));
+ cell.append("&nbsp;");
+ cell.append("No phenotype traits to select from.");
+ row.append(cell);
+ $(table_id + " tbody").append(row);
+ }
+ table_data.forEach(function(trait) {
+ row = $("<tr>")
+ row.append(table_data_source.checkbox_creation_function(trait));
+ row.append(table_cell(trait.name));
+ row.append(table_cell(trait.group));
+ row.append(table_cell(trait.dataset));
+ row.append(table_cell(trait.dataset_fullname));
+ row.append(table_cell(trait.description));
+ row.append(table_cell(trait.authors.join(", ")));
+ row.append(table_cell(
+ '<a href="' + trait.pubmed_link +
+ '" title="Pubmed link for trait ' + trait.name + '.">' +
+ trait.year + "</a>"));
+ row.append(table_cell("Chr:" + trait.geno_chr + "@" + trait.geno_mb));
+ row.append(table_cell(trait.lrs));
+ row.append(table_cell(trait.additive));
+ $(table_id + " tbody").append(row);
+ });
+}
+
+function display_search_results(data, textStatus, jqXHR) {
+ if(data.status == "queued" || data.status == "started") {
+ setTimeout(() => {
+ fetch_search_results(data.job_id, display_search_results);
+ }, 250);
+ return;
+ }
+ if(data.status == "completed") {
+ $("#tbl-phenotypes").attr(
+ "data-traits", JSON.stringify(data.search_results));
+ // Remove this reference to global variable
+ render_pheno_table(search_table);
+ }
+ $("#txt-search").prop("disabled", false);
+}
+
+/**
+ * Fetch the search results
+ * @param {UUID}: The job id to fetch data for
+ */
+function fetch_search_results(job_id, success, error=default_error_fn) {
+ host = $("#frm-search-traits").attr("data-gn-server-url");
+ endpoint = host + "auth/data/search/phenotype/" + job_id
+ $("#txt-search").prop("disabled", true);
+ $.ajax(
+ endpoint,
+ {
+ "method": "GET",
+ "contentType": "application/json; charset=utf-8",
+ "dataType": "json",
+ "error": error,
+ "success": success
+ }
+ );
+}
+
+function search_phenotypes() {
+ query = document.getElementById("txt-query").value;
+ selected = JSON.parse(document.getElementById(
+ "tbl-link-phenotypes").getAttribute("data-traits"));
+ species_name = document.getElementById("txt-species-name").value
+ per_page = document.getElementById("txt-per-page").value
+ search_table = new TableDataSource(
+ "#tbl-phenotypes", "data-traits", search_checkbox);
+ endpoint = "/auth/data/phenotype/search"
+ $.ajax(
+ endpoint,
+ {
+ "method": "POST",
+ "contentType": "application/json; charset=utf-8",
+ "dataType": "json",
+ "data": JSON.stringify({
+ "query": query,
+ "species_name": species_name,
+ "dataset_type": "phenotype",
+ "per_page": per_page,
+ "selected_traits": selected
+ }),
+ "error": default_error_fn,
+ "success": (data, textStatus, jqXHR) => {
+ fetch_search_results(data.job_id, display_search_results);
+ }
+ });
+}
+
+/**
+ * Return a function to check whether `trait` is in array of `traits`.
+ * @param {PhenotypeTrait} A phenotype trait.
+ * @param {Array} An array of phenotype traits.
+ */
+function make_filter(trait) {
+ return (trt) => {
+ return (trt.species == trait.species &&
+ trt.group == trait.group &&
+ trt.dataset == trait.dataset &&
+ trt.name == trait.name);
+ };
+}
+
+$(document).ready(function() {
+ $("#frm-search-traits").submit(event => {
+ event.preventDefault();
+ return false;
+ });
+
+ $("#txt-query").keyup(debounce(search_phenotypes));
+
+ $("#tbl-link-phenotypes").on("change", ".checkbox-selected", function(event) {
+ if(!this.checked) {
+ trait = JSON.parse(this.value);
+ select_deselect(trait, link_table, search_table,
+ make_filter(trait), render_pheno_table);
+ toggle_link_button();
+ }
+ });
+
+ $("#tbl-phenotypes").on("change", ".checkbox-search", function(event) {
+ if(this.checked) {
+ trait = JSON.parse(this.value)
+ select_deselect(trait, search_table, link_table,
+ make_filter(trait), render_pheno_table);
+ toggle_link_button();
+ }
+ });
+
+ setTimeout(() => {
+ fetch_search_results(
+ $("#tbl-phenotypes").attr("data-initial-job-id"),
+ display_search_results);
+ }, 500);
+});
diff --git a/gn2/wqflask/static/new/javascript/auto_hide_column.js b/gn2/wqflask/static/new/javascript/auto_hide_column.js
new file mode 100644
index 00000000..1a4dc039
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/auto_hide_column.js
@@ -0,0 +1,21 @@
+ function filterDatatable(datatable){
+ let invalidColumns=[]
+ let columnCount=datatable.columns().header().length;
+ let numberOfRows=datatable.rows().count();
+ for (let col=0; col<columnCount; col++){
+ colObj = datatable.column(col).nodes().to$();
+ allNAs = true;
+ for (let i=0;i<numberOfRows;i++){
+ cellContent = colObj[i].childNodes[0].data
+ if (cellContent != "N/A" && cellContent != ""){
+ allNAs = false;
+ break;
+ }
+ }
+ if (allNAs){
+ invalidColumns.push(col)
+ }
+ }
+ return datatable.columns(invalidColumns).visible(false);
+
+ } \ No newline at end of file
diff --git a/gn2/wqflask/static/new/javascript/bar_chart.js b/gn2/wqflask/static/new/javascript/bar_chart.js
new file mode 100644
index 00000000..d8540580
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/bar_chart.js
@@ -0,0 +1,498 @@
+// Generated by CoffeeScript 1.9.2
+(function() {
+ var Bar_Chart, root,
+ bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
+ indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
+ hasProp = {}.hasOwnProperty;
+
+ root = typeof exports !== "undefined" && exports !== null ? exports : this;
+
+ Bar_Chart = (function() {
+ function Bar_Chart(sample_lists) {
+ this.add_legend_discrete = bind(this.add_legend_discrete, this);
+ this.add_legend_continuous = bind(this.add_legend_continuous, this);
+ this.remove_legend = bind(this.remove_legend, this);
+ this.add_legend = bind(this.add_legend, this);
+ var key, l1, l1_names, l2, l3, longest_sample_name_len, s, sample, x;
+ this.sample_lists = {};
+ l1 = this.sample_lists['samples_primary'] = sample_lists[0] || [];
+ l2 = this.sample_lists['samples_other'] = sample_lists[1] || [];
+ l1_names = (function() {
+ var j, len, results;
+ results = [];
+ for (j = 0, len = l1.length; j < len; j++) {
+ x = l1[j];
+ results.push(x.name);
+ }
+ return results;
+ })();
+ l3 = l1.concat((function() {
+ var j, len, ref, results;
+ results = [];
+ for (j = 0, len = l2.length; j < len; j++) {
+ x = l2[j];
+ if (ref = x.name, indexOf.call(l1_names, ref) < 0) {
+ results.push(x);
+ }
+ }
+ return results;
+ })());
+ this.sample_lists['samples_all'] = l3;
+ longest_sample_name_len = d3.max((function() {
+ var j, len, results;
+ results = [];
+ for (j = 0, len = l3.length; j < len; j++) {
+ sample = l3[j];
+ results.push(sample.name.length);
+ }
+ return results;
+ })());
+ this.margin = {
+ top: 20,
+ right: 20,
+ bottom: longest_sample_name_len * 6,
+ left: 40
+ };
+ this.attributes = (function() {
+ var results;
+ results = [];
+ for (key in sample_lists[0][0]["extra_attributes"]) {
+ results.push(key);
+ }
+ return results;
+ })();
+ this.sample_attr_vals = (function() {
+ var j, len, ref, results;
+ ref = this.sample_lists['samples_all'];
+ results = [];
+ for (j = 0, len = ref.length; j < len; j++) {
+ s = ref[j];
+ if (s.value !== null) {
+ results.push(this.extra(s));
+ }
+ }
+ return results;
+ }).call(this);
+ this.get_distinct_attr_vals();
+ this.get_attr_color_dict(this.distinct_attr_vals);
+ this.attribute_name = "None";
+ this.sort_by = "name";
+ this.chart = null;
+ this.select_attribute_box = $("#color_attribute");
+ d3.select("#color_attribute").on("change", (function(_this) {
+ return function() {
+ _this.attribute_name = _this.select_attribute_box.val();
+ return _this.rebuild_bar_graph();
+ };
+ })(this));
+ $(".sort_by_value").on("click", (function(_this) {
+ return function() {
+ console.log("sorting by value");
+ _this.sort_by = "value";
+ return _this.rebuild_bar_graph();
+ };
+ })(this));
+ $(".sort_by_name").on("click", (function(_this) {
+ return function() {
+ console.log("sorting by name");
+ _this.sort_by = "name";
+ return _this.rebuild_bar_graph();
+ };
+ })(this));
+ d3.select("#color_by_trait").on("click", (function(_this) {
+ return function() {
+ return _this.open_trait_selection();
+ };
+ })(this));
+ }
+
+ Bar_Chart.prototype.value = function(sample) {
+ return this.value_dict[sample.name].value;
+ };
+
+ Bar_Chart.prototype.variance = function(sample) {
+ return this.value_dict[sample.name].variance;
+ };
+
+ Bar_Chart.prototype.extra = function(sample) {
+ var attr_vals, attribute, j, len, ref;
+ attr_vals = {};
+ ref = this.attributes;
+ for (j = 0, len = ref.length; j < len; j++) {
+ attribute = ref[j];
+ attr_vals[attribute] = sample["extra_attributes"][attribute];
+ }
+ return attr_vals;
+ };
+
+ Bar_Chart.prototype.redraw = function(samples_dict, selected_group) {
+ var x;
+ this.value_dict = samples_dict[selected_group];
+ this.raw_data = (function() {
+ var j, len, ref, results;
+ ref = this.sample_lists[selected_group];
+ results = [];
+ for (j = 0, len = ref.length; j < len; j++) {
+ x = ref[j];
+ if (x.name in this.value_dict && this.value(x) !== null) {
+ results.push(x);
+ }
+ }
+ return results;
+ }).call(this);
+ return this.rebuild_bar_graph();
+ };
+
+ Bar_Chart.prototype.rebuild_bar_graph = function() {
+ var container, h, raw_data;
+ raw_data = this.raw_data.slice();
+ if (this.sort_by === 'value') {
+ raw_data = raw_data.sort((function(_this) {
+ return function(x, y) {
+ return _this.value(x) - _this.value(y);
+ };
+ })(this));
+ }
+ console.log("raw_data: ", raw_data);
+ h = 600;
+ container = $("#bar_chart_container");
+ container.height(h + this.margin.top + this.margin.bottom);
+ if (this.chart === null) {
+ this.chart = nv.models.multiBarChart().height(h).errorBarColor((function(_this) {
+ return function() {
+ return 'red';
+ };
+ })(this)).reduceXTicks(false).staggerLabels(false).showControls(false).showLegend(false);
+ this.chart.multibar.dispatch.on('elementMouseover.tooltip', (function(_this) {
+ return function(evt) {
+ var k, ref, v;
+ evt.value = _this.chart.x()(evt.data);
+ evt['series'] = [
+ {
+ key: 'Value',
+ value: evt.data.y,
+ color: evt.color
+ }
+ ];
+ if (evt.data.yErr) {
+ evt['series'].push({
+ key: 'SE',
+ value: evt.data.yErr
+ });
+ }
+ if (evt.data.attr) {
+ ref = evt.data.attr;
+ for (k in ref) {
+ v = ref[k];
+ evt['series'].push({
+ key: k,
+ value: v
+ });
+ }
+ }
+ return _this.chart.tooltip.data(evt).hidden(false);
+ };
+ })(this));
+ this.chart.tooltip.valueFormatter(function(d, i) {
+ return d;
+ });
+ }
+ return nv.addGraph((function(_this) {
+ return function() {
+ var d, s, values;
+ _this.remove_legend();
+ values = (function() {
+ var j, len, results;
+ results = [];
+ for (j = 0, len = raw_data.length; j < len; j++) {
+ s = raw_data[j];
+ results.push({
+ x: s.name,
+ y: this.value(s),
+ yErr: this.variance(s) || 0,
+ attr: s.extra_attributes
+ });
+ }
+ return results;
+ }).call(_this);
+ if (_this.attribute_name !== "None") {
+ _this.color_dict = _this.attr_color_dict[_this.attribute_name];
+ _this.chart.barColor(function(d) {
+ return _this.color_dict[d.attr[_this.attribute_name]];
+ });
+ _this.add_legend();
+ } else if (typeof _this.trait_color_dict !== 'undefined') {
+ _this.color_dict = _this.trait_color_dict;
+ _this.chart.barColor(function(d) {
+ return _this.color_dict[d['x']];
+ });
+ } else {
+ _this.chart.barColor(function() {
+ return 'steelblue';
+ });
+ }
+ _this.chart.width(raw_data.length * 20);
+ //User should be able to change Y domain, but should still have good default
+ _this.chart.yDomain([
+ 0.95 * _.min((function() { // ZS: Decreasing this constant decreases the min Y axis value
+ var j, len, results;
+ results = [];
+ for (j = 0, len = values.length; j < len; j++) {
+ d = values[j];
+ results.push(d.y - 0.5 * d.yErr); //ZS: the 0.5 was originally 1.5
+ }
+ return results;
+ })()), 1.05 * _.max((function() { // ZS: Decreasing this constant decreases the max Y axis value
+ var j, len, results;
+ results = [];
+ for (j = 0, len = values.length; j < len; j++) {
+ d = values[j];
+ results.push(d.y + 0.5 * d.yErr); // //ZS: the 0.5 was originally 1.5
+ }
+ return results;
+ })())
+ ]);
+ console.log("values: ", values);
+
+ decimal_exists = "False";
+ for(i=0; i < values.length; i++){
+ if (values[i]['y'] % 1 != 0){
+ decimal_exists = "True";
+ break;
+ }
+ }
+ if (decimal_exists == "False"){
+ _this.chart.yAxis.tickFormat(d3.format('d'))
+ }
+ d3.select("#bar_chart_container svg").datum([
+ {
+ values: values
+ }
+ ]).style('width', raw_data.length * 20 + 'px').transition().duration(1000).call(_this.chart);
+ d3.select("#bar_chart_container .nv-x").selectAll('.tick text').style("font-size", "12px").style("text-anchor", "end").attr("dx", "-.8em").attr("dy", "-.3em").attr("transform", function(d) {
+ return "rotate(-90)";
+ });
+ return _this.chart;
+ };
+ })(this));
+ };
+
+ Bar_Chart.prototype.get_attr_color_dict = function(vals) {
+ var color, color_range, discrete, distinct_vals, i, j, key, l, len, len1, results, this_color_dict, value;
+ this.attr_color_dict = {};
+ this.is_discrete = {};
+ this.minimum_values = {};
+ this.maximum_values = {};
+ console.log("vals:", vals);
+ results = [];
+ for (key in vals) {
+ if (!hasProp.call(vals, key)) continue;
+ distinct_vals = vals[key];
+ this.min_val = d3.min(distinct_vals);
+ this.max_val = d3.max(distinct_vals);
+ this_color_dict = {};
+ discrete = distinct_vals.length < 10;
+ if (discrete) {
+ color = d3.scale.category10();
+ for (i = j = 0, len = distinct_vals.length; j < len; i = ++j) {
+ value = distinct_vals[i];
+ this_color_dict[value] = color(i);
+ }
+ } else {
+ console.log("distinct_values:", distinct_vals);
+ if (_.every(distinct_vals, (function(_this) {
+ return function(d) {
+ if (isNaN(d)) {
+ return false;
+ } else {
+ return true;
+ }
+ };
+ })(this))) {
+ color_range = d3.scale.linear().domain([this.min_val, this.max_val]).range([0, 255]);
+ for (i = l = 0, len1 = distinct_vals.length; l < len1; i = ++l) {
+ value = distinct_vals[i];
+ console.log("color_range(value):", parseInt(color_range(value)));
+ this_color_dict[value] = d3.rgb(parseInt(color_range(value)), 0, 0);
+ }
+ }
+ }
+ this.attr_color_dict[key] = this_color_dict;
+ this.is_discrete[key] = discrete;
+ this.minimum_values[key] = this.min_val;
+ results.push(this.maximum_values[key] = this.max_val);
+ }
+ return results;
+ };
+
+ Bar_Chart.prototype.get_distinct_attr_vals = function() {
+ var attribute, j, len, ref, results, sample;
+ this.distinct_attr_vals = {};
+ ref = this.sample_attr_vals;
+ results = [];
+ for (j = 0, len = ref.length; j < len; j++) {
+ sample = ref[j];
+ results.push((function() {
+ var ref1, results1;
+ results1 = [];
+ for (attribute in sample) {
+ if (!this.distinct_attr_vals[attribute]) {
+ this.distinct_attr_vals[attribute] = [];
+ }
+ if (ref1 = sample[attribute], indexOf.call(this.distinct_attr_vals[attribute], ref1) < 0) {
+ results1.push(this.distinct_attr_vals[attribute].push(sample[attribute]));
+ } else {
+ results1.push(void 0);
+ }
+ }
+ return results1;
+ }).call(this));
+ }
+ return results;
+ };
+
+ Bar_Chart.prototype.add_legend = function() {
+ if (this.is_discrete[this.attribute_name]) {
+ return this.add_legend_discrete();
+ } else {
+ return this.add_legend_continuous();
+ }
+ };
+
+ Bar_Chart.prototype.remove_legend = function() {
+ $(".legend").remove();
+ return $("#legend-left,#legend-right,#legend-colors").empty();
+ };
+
+ Bar_Chart.prototype.add_legend_continuous = function() {
+ var svg_html;
+ $('#legend-left').html(this.minimum_values[this.attribute_name]);
+ $('#legend-right').html(this.maximum_values[this.attribute_name]);
+ svg_html = '<svg height="15" width="120"> <rect x="0" width="20" height="15" style="fill: rgb(0, 0, 0);"></rect> <rect x="20" width="20" height="15" style="fill: rgb(50, 0, 0);"></rect> <rect x="40" width="20" height="15" style="fill: rgb(100, 0, 0);"></rect> <rect x="60" width="20" height="15" style="fill: rgb(150, 0, 0);"></rect> <rect x="80" width="20" height="15" style="fill: rgb(200, 0, 0);"></rect> <rect x="100" width="20" height="15" style="fill: rgb(255, 0, 0);"></rect> </svg>';
+ console.log("svg_html:", svg_html);
+ return $('#legend-colors').html(svg_html);
+ };
+
+ Bar_Chart.prototype.add_legend_discrete = function() {
+ var legend_span;
+ legend_span = d3.select('#bar_chart_legend').append('div').style('word-wrap', 'break-word').attr('class', 'legend').selectAll('span').data(this.distinct_attr_vals[this.attribute_name]).enter().append('span').style({
+ 'word-wrap': 'normal',
+ 'display': 'inline-block'
+ });
+ legend_span.append('span').style("background-color", (function(_this) {
+ return function(d) {
+ return _this.attr_color_dict[_this.attribute_name][d];
+ };
+ })(this)).style({
+ 'display': 'inline-block',
+ 'width': '15px',
+ 'height': '15px',
+ 'margin': '0px 5px 0px 15px'
+ });
+ return legend_span.append('span').text((function(_this) {
+ return function(d) {
+ return d;
+ };
+ })(this)).style('font-size', '20px');
+ };
+
+ Bar_Chart.prototype.open_trait_selection = function() {
+ return $('#collections_holder').load('/collections/list?color_by_trait #collections_list', (function(_this) {
+ return function() {
+ $.colorbox({
+ inline: true,
+ href: "#collections_holder"
+ });
+ return $('a.collection_name').attr('onClick', 'return false');
+ };
+ })(this));
+ };
+
+ Bar_Chart.prototype.color_by_trait = function(trait_sample_data) {
+ var distinct_values, trimmed_samples;
+ console.log("BXD1:", trait_sample_data["BXD1"]);
+ console.log("trait_sample_data:", trait_sample_data);
+ trimmed_samples = this.trim_values(trait_sample_data);
+ distinct_values = {};
+ distinct_values["collection_trait"] = this.get_distinct_values(trimmed_samples);
+ this.trait_color_dict = this.get_trait_color_dict(trimmed_samples, distinct_values);
+ console.log("TRAIT_COLOR_DICT:", this.trait_color_dict);
+ return this.rebuild_bar_graph();
+ //return console.log("SAMPLES:", this.samples);
+ };
+
+ Bar_Chart.prototype.trim_values = function(trait_sample_data) {
+ var j, len, ref, sample, trimmed_samples;
+ trimmed_samples = {};
+ ref = this.sample_lists['samples_all'];
+ for (j = 0, len = ref.length; j < len; j++) {
+ sample = ref[j]['name'];
+ if (sample in trait_sample_data) {
+ trimmed_samples[sample] = trait_sample_data[sample];
+ }
+ }
+ console.log("trimmed_samples:", trimmed_samples);
+ return trimmed_samples;
+ };
+
+ Bar_Chart.prototype.get_distinct_values = function(samples) {
+ var distinct_values;
+ distinct_values = _.uniq(_.values(samples));
+ console.log("distinct_values:", distinct_values);
+ return distinct_values;
+ };
+
+ Bar_Chart.prototype.get_trait_color_dict = function(samples, vals) {
+ var color, color_range, distinct_vals, i, j, k, key, len, len1, results, sample, this_color_dict, value;
+ trait_color_dict = {};
+ console.log("vals:", vals);
+ for (key in vals) {
+ if (!hasProp.call(vals, key)) continue;
+ distinct_vals = vals[key];
+ this_color_dict = {};
+ this.min_val = d3.min(distinct_vals);
+ this.max_val = d3.max(distinct_vals);
+ if (distinct_vals.length < 10) {
+ color = d3.scale.category10();
+ for (i = j = 0, len = distinct_vals.length; j < len; i = ++j) {
+ value = distinct_vals[i];
+ this_color_dict[value] = color(i);
+ }
+ } else {
+ console.log("distinct_values:", distinct_vals);
+ if (_.every(distinct_vals, (function(_this) {
+ return function(d) {
+ if (isNaN(d)) {
+ return false;
+ } else {
+ return true;
+ }
+ };
+ })(this))) {
+ color_range = d3.scale.linear().domain([d3.min(distinct_vals), d3.max(distinct_vals)]).range([0, 255]);
+ for (i = k = 0, len1 = distinct_vals.length; k < len1; i = ++k) {
+ value = distinct_vals[i];
+ //console.log("color_range(value):", parseInt(color_range(value)));
+ this_color_dict[value] = d3.rgb(parseInt(color_range(value)), 0, 0);
+ }
+ }
+ }
+ }
+ results = [];
+ console.log("SAMPLES:", samples)
+ for (sample in samples) {
+ if (!hasProp.call(samples, sample)) continue;
+ value = samples[sample];
+ trait_color_dict[sample] = this_color_dict[value];
+ //results.push(this.trait_color_dict[sample] = this_color_dict[value]);
+ }
+ return trait_color_dict;
+ };
+
+ return Bar_Chart;
+
+ })();
+
+ root.Bar_Chart = Bar_Chart;
+
+}).call(this);
diff --git a/gn2/wqflask/static/new/javascript/box.js b/gn2/wqflask/static/new/javascript/box.js
new file mode 100644
index 00000000..aae80f05
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/box.js
@@ -0,0 +1,307 @@
+//Taken from http://bl.ocks.org/mbostock/4061502
+
+(function() {
+
+// Inspired by http://informationandvisualization.de/blog/box-plot
+d3.box = function() {
+ var width = 1,
+ height = 1,
+ duration = 0,
+ domain = null,
+ value = Number,
+ whiskers = boxWhiskers,
+ quartiles = boxQuartiles,
+ tickFormat = null;
+
+ // For each small multiple…
+ function box(g) {
+ g.each(function(d, i) {
+ console.log("d:", d)
+ console.log("domain:", domain)
+ d = d.map(value).sort(d3.ascending);
+ var g = d3.select(this),
+ n = d.length,
+ min = d[0],
+ max = d[n - 1];
+
+ // Compute quartiles. Must return exactly 3 elements.
+ var quartileData = d.quartiles = quartiles(d);
+
+ // Compute whiskers. Must return exactly 2 elements, or null.
+ var whiskerIndices = whiskers && whiskers.call(this, d, i),
+ whiskerData = whiskerIndices && whiskerIndices.map(function(i) { return d[i]; });
+
+ // Compute outliers. If no whiskers are specified, all data are "outliers".
+ // We compute the outliers as indices, so that we can join across transitions!
+ var outlierIndices = whiskerIndices
+ ? d3.range(0, whiskerIndices[0]).concat(d3.range(whiskerIndices[1] + 1, n))
+ : d3.range(n);
+
+ // Compute the new x-scale.
+ var x1 = d3.scale.linear()
+ .domain(domain && domain.call(this, d, i) || [min, max])
+ .range([height, 0]);
+
+ // Retrieve the old x-scale, if this is an update.
+ var x0 = this.__chart__ || d3.scale.linear()
+ .domain([0, Infinity])
+ .range(x1.range());
+
+ // Stash the new scale.
+ this.__chart__ = x1;
+
+ // Note: the box, median, and box tick elements are fixed in number,
+ // so we only have to handle enter and update. In contrast, the outliers
+ // and other elements are variable, so we need to exit them! Variable
+ // elements also fade in and out.
+
+ // Update center line: the vertical line spanning the whiskers.
+ var center = g.selectAll("line.center")
+ .data(whiskerData ? [whiskerData] : []);
+
+ center.enter().insert("line", "rect")
+ .attr("class", "center")
+ .attr("x1", width / 2)
+ .attr("y1", function(d) { return x0(d[0]); })
+ .attr("x2", width / 2)
+ .attr("y2", function(d) { return x0(d[1]); })
+ .style("opacity", 1e-6)
+ .transition()
+ .duration(duration)
+ .style("opacity", 1)
+ .attr("y1", function(d) { return x1(d[0]); })
+ .attr("y2", function(d) { return x1(d[1]); });
+
+ center.transition()
+ .duration(duration)
+ .style("opacity", 1)
+ .attr("y1", function(d) { return x1(d[0]); })
+ .attr("y2", function(d) { return x1(d[1]); });
+
+ center.exit().transition()
+ .duration(duration)
+ .style("opacity", 1e-6)
+ .attr("y1", function(d) { return x1(d[0]); })
+ .attr("y2", function(d) { return x1(d[1]); })
+ .remove();
+
+ // Update innerquartile box.
+ var box = g.selectAll("rect.box")
+ .data([quartileData]);
+
+ box.enter().append("rect")
+ .attr("class", "box")
+ .attr("x", 0)
+ .attr("y", function(d) { return x0(d[2]); })
+ .attr("width", width)
+ .attr("height", function(d) { return x0(d[0]) - x0(d[2]); })
+ .transition()
+ .duration(duration)
+ .attr("y", function(d) { return x1(d[2]); })
+ .attr("height", function(d) { return x1(d[0]) - x1(d[2]); });
+
+ box.transition()
+ .duration(duration)
+ .attr("y", function(d) { return x1(d[2]); })
+ .attr("height", function(d) { return x1(d[0]) - x1(d[2]); });
+
+ // Update median line.
+ var medianLine = g.selectAll("line.median")
+ .data([quartileData[1]]);
+
+ medianLine.enter().append("line")
+ .attr("class", "median")
+ .attr("x1", 0)
+ .attr("y1", x0)
+ .attr("x2", width)
+ .attr("y2", x0)
+ .transition()
+ .duration(duration)
+ .attr("y1", x1)
+ .attr("y2", x1);
+
+ medianLine.transition()
+ .duration(duration)
+ .attr("y1", x1)
+ .attr("y2", x1);
+
+ // Update whiskers.
+ var whisker = g.selectAll("line.whisker")
+ .data(whiskerData || []);
+
+ whisker.enter().insert("line", "circle, text")
+ .attr("class", "whisker")
+ .attr("x1", 0)
+ .attr("y1", x0)
+ .attr("x2", width)
+ .attr("y2", x0)
+ .style("opacity", 1e-6)
+ .transition()
+ .duration(duration)
+ .attr("y1", x1)
+ .attr("y2", x1)
+ .style("opacity", 1);
+
+ whisker.transition()
+ .duration(duration)
+ .attr("y1", x1)
+ .attr("y2", x1)
+ .style("opacity", 1);
+
+ whisker.exit().transition()
+ .duration(duration)
+ .attr("y1", x1)
+ .attr("y2", x1)
+ .style("opacity", 1e-6)
+ .remove();
+
+ // Update outliers.
+ var outlier = g.selectAll("circle.outlier")
+ .data(outlierIndices, Number);
+
+ outlier.enter().insert("circle", "text")
+ .attr("class", "outlier")
+ .attr("r", 5)
+ .attr("cx", width / 2)
+ .attr("cy", function(i) { return x0(d[i]); })
+ .style("opacity", 1e-6)
+ .transition()
+ .duration(duration)
+ .attr("cy", function(i) { return x1(d[i]); })
+ .style("opacity", 1);
+
+ outlier.transition()
+ .duration(duration)
+ .attr("cy", function(i) { return x1(d[i]); })
+ .style("opacity", 1);
+
+ outlier.exit().transition()
+ .duration(duration)
+ .attr("cy", function(i) { return x1(d[i]); })
+ .style("opacity", 1e-6)
+ .remove();
+
+ // Compute the tick format.
+ var format = tickFormat || x1.tickFormat(8);
+
+ // Update box ticks.
+ var boxTick = g.selectAll("text.box")
+ .data(quartileData);
+
+ console.log("quartileData:", quartileData);
+
+ boxTick.enter().append("text")
+ .attr("class", "box")
+ .attr("dy", ".3em")
+ .attr("dx", function(d, i) { return i & 1 ? 6 : -6 })
+ .attr("x", function(d, i) { return i & 1 ? width : 0 })
+ .attr("y", x0)
+ .attr("text-anchor", function(d, i) { return i & 1 ? "start" : "end"; })
+ .text(format)
+ .transition()
+ .duration(duration)
+ .attr("y", x1);
+
+ boxTick.transition()
+ .duration(duration)
+ .text(format)
+ .attr("y", x1);
+
+ // Update whisker ticks. These are handled separately from the box
+ // ticks because they may or may not exist, and we want don't want
+ // to join box ticks pre-transition with whisker ticks post-.
+ var whiskerTick = g.selectAll("text.whisker")
+ .data(whiskerData || []);
+
+ whiskerTick.enter().append("text")
+ .attr("class", "whisker")
+ .attr("dy", ".3em")
+ .attr("dx", 6)
+ .attr("x", width)
+ .attr("y", x0)
+ .text(format)
+ .style("opacity", 1e-6)
+ .transition()
+ .duration(duration)
+ .attr("y", x1)
+ .style("opacity", 1);
+
+ whiskerTick.transition()
+ .duration(duration)
+ .text(format)
+ .attr("y", x1)
+ .style("opacity", 1);
+
+ whiskerTick.exit().transition()
+ .duration(duration)
+ .attr("y", x1)
+ .style("opacity", 1e-6)
+ .remove();
+ });
+ d3.timer.flush();
+ }
+
+ box.width = function(x) {
+ if (!arguments.length) return width;
+ width = x;
+ return box;
+ };
+
+ box.height = function(x) {
+ if (!arguments.length) return height;
+ height = x;
+ return box;
+ };
+
+ box.tickFormat = function(x) {
+ if (!arguments.length) return tickFormat;
+ tickFormat = x;
+ return box;
+ };
+
+ box.duration = function(x) {
+ if (!arguments.length) return duration;
+ duration = x;
+ return box;
+ };
+
+ box.domain = function(x) {
+ if (!arguments.length) return domain;
+ domain = x == null ? x : d3.functor(x);
+ return box;
+ };
+
+ box.value = function(x) {
+ if (!arguments.length) return value;
+ value = x;
+ return box;
+ };
+
+ box.whiskers = function(x) {
+ if (!arguments.length) return whiskers;
+ whiskers = x;
+ return box;
+ };
+
+ box.quartiles = function(x) {
+ if (!arguments.length) return quartiles;
+ quartiles = x;
+ return box;
+ };
+
+ return box;
+};
+
+function boxWhiskers(d) {
+ return [0, d.length - 1];
+}
+
+function boxQuartiles(d) {
+ return [
+ d3.quantile(d, .25),
+ d3.quantile(d, .5),
+ d3.quantile(d, .75)
+ ];
+}
+
+})(); \ No newline at end of file
diff --git a/gn2/wqflask/static/new/javascript/box_plot.js b/gn2/wqflask/static/new/javascript/box_plot.js
new file mode 100644
index 00000000..566a8eb8
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/box_plot.js
@@ -0,0 +1,80 @@
+// Generated by CoffeeScript 1.8.0
+var Box_Plot, root;
+
+root = typeof exports !== "undefined" && exports !== null ? exports : this;
+
+Box_Plot = (function() {
+ function Box_Plot(sample_list, sample_group) {
+ this.sample_list = sample_list;
+ this.sample_group = sample_group;
+ this.get_samples();
+ this.margin = {
+ top: 10,
+ right: 50,
+ bottom: 20,
+ left: 50
+ };
+ this.plot_width = 200 - this.margin.left - this.margin.right;
+ this.plot_height = 500 - this.margin.top - this.margin.bottom;
+ this.min = d3.min(this.sample_vals);
+ this.max = d3.max(this.sample_vals);
+ this.svg = this.create_svg();
+ this.enter_data();
+ }
+
+ Box_Plot.prototype.get_samples = function() {
+ var sample;
+ return this.sample_vals = (function() {
+ var _i, _len, _ref, _results;
+ _ref = this.sample_list;
+ _results = [];
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ sample = _ref[_i];
+ if (sample.value !== null) {
+ _results.push(sample.value);
+ }
+ }
+ return _results;
+ }).call(this);
+ };
+
+ Box_Plot.prototype.create_svg = function() {
+ var svg;
+ svg = d3.box().whiskers(this.inter_quartile_range(1.5)).width(this.plot_width - 30).height(this.plot_height - 30).domain([this.min, this.max]);
+ return svg;
+ };
+
+ Box_Plot.prototype.enter_data = function() {
+ return d3.select("#box_plot").selectAll("svg").data([this.sample_vals]).enter().append("svg:svg").attr("class", "box").attr("width", this.plot_width).attr("height", this.plot_height).append("svg:g").call(this.svg);
+ };
+
+ Box_Plot.prototype.inter_quartile_range = function(k) {
+ return (function(_this) {
+ return function(d, i) {
+ var inter_quartile_range, j, q1, q3;
+ console.log("iqr d:", d);
+ q1 = d.quartiles[0];
+ q3 = d.quartiles[2];
+ inter_quartile_range = (q3 - q1) * k;
+ console.log("iqr:", inter_quartile_range);
+ i = 0;
+ j = d.length;
+ console.log("d[-1]:", d[1]);
+ console.log("q1 - iqr:", q1 - inter_quartile_range);
+ while (d[i] < q1 - inter_quartile_range) {
+ i++;
+ }
+ while (d[j] > q3 + inter_quartile_range) {
+ j--;
+ }
+ console.log("[i, j]", [i, j]);
+ return [i, j];
+ };
+ })(this);
+ };
+
+ return Box_Plot;
+
+})();
+
+root.Box_Plot = Box_Plot;
diff --git a/gn2/wqflask/static/new/javascript/chr_lod_chart.js b/gn2/wqflask/static/new/javascript/chr_lod_chart.js
new file mode 100644
index 00000000..c6cbd01b
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/chr_lod_chart.js
@@ -0,0 +1,297 @@
+// Generated by CoffeeScript 1.9.2
+var Chr_Lod_Chart;
+
+Chr_Lod_Chart = (function() {
+ function Chr_Lod_Chart(plot_height, plot_width, chr, manhattanPlot, mappingScale) {
+ this.plot_height = plot_height;
+ this.plot_width = plot_width;
+ this.chr = chr;
+ this.manhattanPlot = manhattanPlot;
+ this.mappingScale = mappingScale;
+ this.qtl_results = js_data.qtl_results;
+ console.log("qtl_results are:", this.qtl_results);
+ console.log("chr is:", this.chr);
+ this.get_max_chr();
+ this.filter_qtl_results();
+ console.log("filtered results:", this.these_results);
+ this.get_qtl_count();
+ this.x_coords = [];
+ this.y_coords = [];
+ this.marker_names = [];
+ console.time('Create coordinates');
+ this.create_coordinates();
+ console.log("@x_coords: ", this.x_coords);
+ console.log("@y_coords: ", this.y_coords);
+ console.timeEnd('Create coordinates');
+ this.x_buffer = this.plot_width / 30;
+ this.y_buffer = this.plot_height / 20;
+ this.x_max = d3.max(this.x_coords);
+ this.y_max = d3.max(this.y_coords) * 1.2;
+ this.y_threshold = this.get_lod_threshold();
+ this.svg = this.create_svg();
+ this.plot_coordinates = _.zip(this.x_coords, this.y_coords, this.marker_names);
+ console.log("coordinates:", this.plot_coordinates);
+ this.plot_height -= this.y_buffer;
+ this.create_scales();
+ console.time('Create graph');
+ this.create_graph();
+ console.timeEnd('Create graph');
+ }
+
+ Chr_Lod_Chart.prototype.get_max_chr = function() {
+ var key, results;
+ this.max_chr = 0;
+ results = [];
+ for (key in js_data.chromosomes) {
+ console.log("key is:", key);
+ if (parseInt(key) > this.max_chr) {
+ results.push(this.max_chr = parseInt(key));
+ } else {
+ results.push(void 0);
+ }
+ }
+ return results;
+ };
+
+ Chr_Lod_Chart.prototype.filter_qtl_results = function() {
+ var i, len, ref, result, results, this_chr;
+ this.these_results = [];
+ this_chr = 100;
+ ref = this.qtl_results;
+ results = [];
+ for (i = 0, len = ref.length; i < len; i++) {
+ result = ref[i];
+ if (result.chr === "X") {
+ this_chr = this.max_chr;
+ } else {
+ this_chr = result.chr;
+ }
+ if (this_chr > parseInt(this.chr[0])) {
+ break;
+ }
+ if (parseInt(this_chr) === parseInt(this.chr[0])) {
+ results.push(this.these_results.push(result));
+ } else {
+ results.push(void 0);
+ }
+ }
+ return results;
+ };
+
+ Chr_Lod_Chart.prototype.get_qtl_count = function() {
+ var high_qtl_count, i, len, ref, result;
+ high_qtl_count = 0;
+ ref = this.these_results;
+ for (i = 0, len = ref.length; i < len; i++) {
+ result = ref[i];
+ if (result.lod_score > 1) {
+ high_qtl_count += 1;
+ }
+ }
+ console.log("high_qtl_count:", high_qtl_count);
+ return this.y_axis_filter = 2;
+ };
+
+ Chr_Lod_Chart.prototype.create_coordinates = function() {
+ var i, len, ref, result, results;
+ ref = this.these_results;
+ console.log("THESE_RESULTS:", ref)
+ results = [];
+ for (i = 0, len = ref.length; i < len; i++) {
+ result = ref[i];
+ this.x_coords.push(parseFloat(result.Mb));
+ if (js_data.result_score_type == "LOD") {
+ this.y_coords.push(result.lod_score);
+ }
+ else {
+ console.log("LRS VALUE:", result['lrs_value'])
+ this.y_coords.push(result['lrs_value']);
+ }
+ results.push(this.marker_names.push(result.name));
+ }
+ return results;
+ };
+
+ Chr_Lod_Chart.prototype.create_svg = function() {
+ var svg;
+ svg = d3.select("#topchart").append("svg").attr("class", "chr_manhattan_plot").attr("width", this.plot_width + this.x_buffer).attr("height", this.plot_height + this.y_buffer).append("g");
+ return svg;
+ };
+
+ Chr_Lod_Chart.prototype.create_scales = function() {
+ if (this.mappingScale == "morgan") {
+ max_pos = 0
+ for (i = 0, len = this.these_results.length; i < len; i++) {
+ marker = this.these_results[i]
+ if (parseFloat(marker['Mb']) > max_pos){
+ max_pos = parseFloat(marker.Mb)
+ }
+ }
+ this.x_scale = d3.scale.linear().domain([0, max_pos]).range([this.x_buffer, this.plot_width]);
+ }
+ else {
+ this.x_scale = d3.scale.linear().domain([0, this.chr[1]]).range([this.x_buffer, this.plot_width]);
+ }
+ return this.y_scale = d3.scale.linear().domain([0, this.y_max]).range([this.plot_height, this.y_buffer]);
+ };
+
+ Chr_Lod_Chart.prototype.get_lod_threshold = function() {
+ if (this.y_max / 2 > 2) {
+ return this.y_max / 2;
+ } else {
+ return 2;
+ }
+ };
+
+ Chr_Lod_Chart.prototype.create_graph = function() {
+ this.add_border();
+ this.add_x_axis();
+ this.add_y_axis();
+ this.add_title();
+ this.add_back_button();
+ if (this.manhattanPlot) {
+ return this.add_plot_points();
+ } else {
+ return this.add_path();
+ }
+ };
+
+ Chr_Lod_Chart.prototype.add_border = function() {
+ var border_coords;
+ border_coords = [[this.y_buffer, this.plot_height, this.x_buffer, this.x_buffer], [this.y_buffer, this.plot_height, this.plot_width, this.plot_width], [this.y_buffer, this.y_buffer, this.x_buffer, this.plot_width], [this.plot_height, this.plot_height, this.x_buffer, this.plot_width]];
+ return this.svg.selectAll("line").data(border_coords).enter().append("line").attr("y1", (function(_this) {
+ return function(d) {
+ return d[0];
+ };
+ })(this)).attr("y2", (function(_this) {
+ return function(d) {
+ return d[1];
+ };
+ })(this)).attr("x1", (function(_this) {
+ return function(d) {
+ return d[2];
+ };
+ })(this)).attr("x2", (function(_this) {
+ return function(d) {
+ return d[3];
+ };
+ })(this)).style("stroke", "#000");
+ };
+
+ Chr_Lod_Chart.prototype.add_x_axis = function() {
+ this.xAxis = d3.svg.axis().scale(this.x_scale).orient("bottom").ticks(20);
+ this.xAxis.tickFormat((function(_this) {
+ return function(d) {
+ d3.format("d");
+ return d;
+ };
+ })(this));
+ return this.svg.append("g").attr("class", "x_axis").attr("transform", "translate(0," + this.plot_height + ")").call(this.xAxis).selectAll("text").attr("text-anchor", "right").attr("font-size", "12px").attr("dx", "-1.6em").attr("transform", (function(_this) {
+ return function(d) {
+ return "translate(-12,0) rotate(-90)";
+ };
+ })(this));
+ };
+
+ Chr_Lod_Chart.prototype.add_y_axis = function() {
+ this.yAxis = d3.svg.axis().scale(this.y_scale).orient("left").ticks(5);
+ return this.svg.append("g").attr("class", "y_axis").attr("transform", "translate(" + this.x_buffer + ",0)").call(this.yAxis);
+ };
+
+ Chr_Lod_Chart.prototype.add_title = function() {
+ return this.svg.append("text").attr("class", "title").text("Chr " + this.chr[0]).attr("x", (function(_this) {
+ return function(d) {
+ return (_this.plot_width + _this.x_buffer) / 2;
+ };
+ })(this)).attr("y", this.y_buffer + 20).attr("dx", "0em").attr("text-anchor", "middle").attr("font-family", "sans-serif").attr("font-size", "18px").attr("fill", "black");
+ };
+
+ Chr_Lod_Chart.prototype.add_back_button = function() {
+ return $("#return_to_full_view").show().click((function(_this) {
+ return function() {
+ return _this.return_to_full_view();
+ };
+ })(this));
+ };
+
+ Chr_Lod_Chart.prototype.add_path = function() {
+ var line_function, line_graph;
+ line_function = d3.svg.line().x((function(_this) {
+ return function(d) {
+ return _this.x_scale(d[0]);
+ };
+ })(this)).y((function(_this) {
+ return function(d) {
+ return _this.y_scale(d[1]);
+ };
+ })(this)).interpolate("linear");
+ return line_graph = this.svg.append("path").attr("d", line_function(this.plot_coordinates)).attr("stroke", "blue").attr("stroke-width", 1).attr("fill", "none");
+ };
+
+ Chr_Lod_Chart.prototype.add_plot_points = function() {
+ return this.plot_point = this.svg.selectAll("circle").data(this.plot_coordinates).enter().append("circle").attr("cx", (function(_this) {
+ return function(d) {
+ return _this.x_scale(d[0]);
+ };
+ })(this)).attr("cy", (function(_this) {
+ return function(d) {
+ return _this.y_scale(d[1]);
+ };
+ })(this)).attr("r", (function(_this) {
+ return function(d) {
+ return 2;
+ };
+ })(this)).attr("fill", (function(_this) {
+ return function(d) {
+ return "black";
+ };
+ })(this)).attr("stroke", "black").attr("stroke-width", "1").attr("id", (function(_this) {
+ return function(d) {
+ return "point_" + String(d[2]);
+ };
+ })(this)).classed("circle", true).on("mouseover", (function(_this) {
+ return function(d) {
+ var this_id;
+ console.log("d3.event is:", d3.event);
+ console.log("d is:", d);
+ this_id = "point_" + String(d[2]);
+ return d3.select("#" + this_id).classed("d3_highlight", true).attr("r", 5).attr("stroke", "none").attr("fill", "blue").call(_this.show_marker_in_table(d));
+ };
+ })(this)).on("mouseout", (function(_this) {
+ return function(d) {
+ var this_id;
+ this_id = "point_" + String(d[2]);
+ return d3.select("#" + this_id).classed("d3_highlight", false).attr("r", function(d) {
+ return 2;
+ }).attr("fill", function(d) {
+ return "black";
+ }).attr("stroke", "black").attr("stroke-width", "1");
+ };
+ })(this)).append("svg:title").text((function(_this) {
+ return function(d) {
+ return d[2];
+ };
+ })(this));
+ };
+
+ Chr_Lod_Chart.prototype.return_to_full_view = function() {
+ $("#return_to_full_view").hide();
+ $('#topchart').remove();
+ $('#chart_container').append('<div class="qtlcharts" id="topchart"></div>');
+ return create_lod_chart();
+ };
+
+ Chr_Lod_Chart.prototype.show_marker_in_table = function(marker_info) {
+ var marker_name;
+ console.log("in show_marker_in_table");
+
+ /* Searches for the select marker in the results table below */
+ if (marker_info) {
+ marker_name = marker_info[2];
+ return $("#qtl_results_filter").find("input:first").val(marker_name).change();
+ }
+ };
+
+ return Chr_Lod_Chart;
+
+})();
diff --git a/gn2/wqflask/static/new/javascript/chr_manhattan_plot.js b/gn2/wqflask/static/new/javascript/chr_manhattan_plot.js
new file mode 100644
index 00000000..c661edc7
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/chr_manhattan_plot.js
@@ -0,0 +1,273 @@
+// Generated by CoffeeScript 1.8.0
+var Chr_Manhattan_Plot;
+
+Chr_Manhattan_Plot = (function() {
+ function Chr_Manhattan_Plot(plot_height, plot_width, chr, manhattanPlot) {
+ this.plot_height = plot_height;
+ this.plot_width = plot_width;
+ this.chr = chr;
+ this.qtl_results = js_data.qtl_results;
+ console.log("qtl_results are:", this.qtl_results);
+ console.log("chr is:", this.chr);
+ this.get_max_chr();
+ this.filter_qtl_results();
+ console.log("filtered results:", this.these_results);
+ this.get_qtl_count();
+ this.x_coords = [];
+ this.y_coords = [];
+ this.marker_names = [];
+ console.time('Create coordinates');
+ this.create_coordinates();
+ console.log("@x_coords: ", this.x_coords);
+ console.log("@y_coords: ", this.y_coords);
+ console.timeEnd('Create coordinates');
+ this.x_buffer = this.plot_width / 30;
+ this.y_buffer = this.plot_height / 20;
+ this.x_max = d3.max(this.x_coords);
+ this.y_max = d3.max(this.y_coords) * 1.2;
+ this.y_threshold = this.get_lod_threshold();
+ this.svg = this.create_svg();
+ this.plot_coordinates = _.zip(this.x_coords, this.y_coords, this.marker_names);
+ console.log("coordinates:", this.plot_coordinates);
+ this.plot_height -= this.y_buffer;
+ this.create_scales();
+ console.time('Create graph');
+ this.create_graph();
+ console.timeEnd('Create graph');
+ }
+
+ Chr_Manhattan_Plot.prototype.get_max_chr = function() {
+ var key, _results;
+ this.max_chr = 0;
+ _results = [];
+ for (key in js_data.chromosomes) {
+ console.log("key is:", key);
+ if (parseInt(key) > this.max_chr) {
+ _results.push(this.max_chr = parseInt(key));
+ } else {
+ _results.push(void 0);
+ }
+ }
+ return _results;
+ };
+
+ Chr_Manhattan_Plot.prototype.filter_qtl_results = function() {
+ var result, this_chr, _i, _len, _ref, _results;
+ this.these_results = [];
+ this_chr = 100;
+ _ref = this.qtl_results;
+ _results = [];
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ result = _ref[_i];
+ if (result.chr === "X") {
+ this_chr = this.max_chr;
+ } else {
+ this_chr = result.chr;
+ }
+ console.log("this_chr is:", this_chr);
+ console.log("@chr[0] is:", parseInt(this.chr[0]));
+ if (this_chr > parseInt(this.chr[0])) {
+ break;
+ }
+ if (parseInt(this_chr) === parseInt(this.chr[0])) {
+ _results.push(this.these_results.push(result));
+ } else {
+ _results.push(void 0);
+ }
+ }
+ return _results;
+ };
+
+ Chr_Manhattan_Plot.prototype.get_qtl_count = function() {
+ var high_qtl_count, result, _i, _len, _ref;
+ high_qtl_count = 0;
+ _ref = this.these_results;
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ result = _ref[_i];
+ if (result.lod_score > 1) {
+ high_qtl_count += 1;
+ }
+ }
+ console.log("high_qtl_count:", high_qtl_count);
+ return this.y_axis_filter = 2;
+ };
+
+ Chr_Manhattan_Plot.prototype.create_coordinates = function() {
+ var result, _i, _len, _ref, _results;
+ _ref = this.these_results;
+ _results = [];
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ result = _ref[_i];
+ this.x_coords.push(parseFloat(result.Mb));
+ this.y_coords.push(result.lod_score);
+ _results.push(this.marker_names.push(result.name));
+ }
+ return _results;
+ };
+
+ Chr_Manhattan_Plot.prototype.create_svg = function() {
+ var svg;
+ svg = d3.select("#topchart").append("svg").attr("class", "chr_manhattan_plot").attr("width", this.plot_width + this.x_buffer).attr("height", this.plot_height + this.y_buffer).append("g");
+ return svg;
+ };
+
+ Chr_Manhattan_Plot.prototype.create_scales = function() {
+ this.x_scale = d3.scale.linear().domain([0, this.chr[1]]).range([this.x_buffer, this.plot_width]);
+ return this.y_scale = d3.scale.linear().domain([0, this.y_max]).range([this.plot_height, this.y_buffer]);
+ };
+
+ Chr_Manhattan_Plot.prototype.get_lod_threshold = function() {
+ if (this.y_max / 2 > 2) {
+ return this.y_max / 2;
+ } else {
+ return 2;
+ }
+ };
+
+ Chr_Manhattan_Plot.prototype.create_graph = function() {
+ this.add_border();
+ this.add_x_axis();
+ this.add_y_axis();
+ this.add_title();
+ this.add_back_button();
+ if (manhattanPlot) {
+ return this.add_plot_points();
+ } else {
+ return this.add_path();
+ }
+ };
+
+ Chr_Manhattan_Plot.prototype.add_border = function() {
+ var border_coords;
+ border_coords = [[this.y_buffer, this.plot_height, this.x_buffer, this.x_buffer], [this.y_buffer, this.plot_height, this.plot_width, this.plot_width], [this.y_buffer, this.y_buffer, this.x_buffer, this.plot_width], [this.plot_height, this.plot_height, this.x_buffer, this.plot_width]];
+ return this.svg.selectAll("line").data(border_coords).enter().append("line").attr("y1", (function(_this) {
+ return function(d) {
+ return d[0];
+ };
+ })(this)).attr("y2", (function(_this) {
+ return function(d) {
+ return d[1];
+ };
+ })(this)).attr("x1", (function(_this) {
+ return function(d) {
+ return d[2];
+ };
+ })(this)).attr("x2", (function(_this) {
+ return function(d) {
+ return d[3];
+ };
+ })(this)).style("stroke", "#000");
+ };
+
+ Chr_Manhattan_Plot.prototype.add_x_axis = function() {
+ this.xAxis = d3.svg.axis().scale(this.x_scale).orient("bottom").ticks(20);
+ this.xAxis.tickFormat((function(_this) {
+ return function(d) {
+ d3.format("d");
+ return d;
+ };
+ })(this));
+ return this.svg.append("g").attr("class", "x_axis").attr("transform", "translate(0," + this.plot_height + ")").call(this.xAxis).selectAll("text").attr("text-anchor", "right").attr("font-size", "12px").attr("dx", "-1.6em").attr("transform", (function(_this) {
+ return function(d) {
+ return "translate(-12,0) rotate(-90)";
+ };
+ })(this));
+ };
+
+ Chr_Manhattan_Plot.prototype.add_y_axis = function() {
+ this.yAxis = d3.svg.axis().scale(this.y_scale).orient("left").ticks(5);
+ return this.svg.append("g").attr("class", "y_axis").attr("transform", "translate(" + this.x_buffer + ",0)").call(this.yAxis);
+ };
+
+ Chr_Manhattan_Plot.prototype.add_title = function() {
+ return this.svg.append("text").attr("class", "title").text("Chr " + this.chr[0]).attr("x", (function(_this) {
+ return function(d) {
+ return (_this.plot_width + _this.x_buffer) / 2;
+ };
+ })(this)).attr("y", this.y_buffer + 20).attr("dx", "0em").attr("text-anchor", "middle").attr("font-family", "sans-serif").attr("font-size", "18px").attr("fill", "black");
+ };
+
+ Chr_Manhattan_Plot.prototype.add_back_button = function() {
+ return this.svg.append("text").attr("class", "back").text("Return to full view").attr("x", this.x_buffer * 2).attr("y", this.y_buffer / 2).attr("dx", "0em").attr("text-anchor", "middle").attr("font-family", "sans-serif").attr("font-size", "18px").attr("cursor", "pointer").attr("fill", "black").on("click", this.return_to_full_view);
+ };
+
+ Chr_Manhattan_Plot.prototype.add_path = function() {
+ var line_function, line_graph;
+ line_function = d3.svg.line().x((function(_this) {
+ return function(d) {
+ return _this.x_scale(d[0]);
+ };
+ })(this)).y((function(_this) {
+ return function(d) {
+ return _this.y_scale(d[1]);
+ };
+ })(this)).interpolate("linear");
+ return line_graph = this.svg.append("path").attr("d", line_function(this.plot_coordinates)).attr("stroke", "blue").attr("stroke-width", 1).attr("fill", "none");
+ };
+
+ Chr_Manhattan_Plot.prototype.add_plot_points = function() {
+ return this.plot_point = this.svg.selectAll("circle").data(this.plot_coordinates).enter().append("circle").attr("cx", (function(_this) {
+ return function(d) {
+ return _this.x_scale(d[0]);
+ };
+ })(this)).attr("cy", (function(_this) {
+ return function(d) {
+ return _this.y_scale(d[1]);
+ };
+ })(this)).attr("r", (function(_this) {
+ return function(d) {
+ return 2;
+ };
+ })(this)).attr("fill", (function(_this) {
+ return function(d) {
+ return "black";
+ };
+ })(this)).attr("stroke", "black").attr("stroke-width", "1").attr("id", (function(_this) {
+ return function(d) {
+ return "point_" + String(d[2]);
+ };
+ })(this)).classed("circle", true).on("mouseover", (function(_this) {
+ return function(d) {
+ var this_id;
+ console.log("d3.event is:", d3.event);
+ console.log("d is:", d);
+ this_id = "point_" + String(d[2]);
+ return d3.select("#" + this_id).classed("d3_highlight", true).attr("r", 5).attr("stroke", "none").attr("fill", "blue").call(_this.show_marker_in_table(d));
+ };
+ })(this)).on("mouseout", (function(_this) {
+ return function(d) {
+ var this_id;
+ this_id = "point_" + String(d[2]);
+ return d3.select("#" + this_id).classed("d3_highlight", false).attr("r", function(d) {
+ return 2;
+ }).attr("fill", function(d) {
+ return "black";
+ }).attr("stroke", "black").attr("stroke-width", "1");
+ };
+ })(this)).append("svg:title").text((function(_this) {
+ return function(d) {
+ return d[2];
+ };
+ })(this));
+ };
+
+ Chr_Manhattan_Plot.prototype.return_to_full_view = function() {
+ $('#topchart').remove();
+ $('#chart_container').append('<div class="qtlcharts" id="topchart"></div>');
+ return create_manhattan_plot();
+ };
+
+ Chr_Manhattan_Plot.prototype.show_marker_in_table = function(marker_info) {
+ var marker_name;
+ console.log("in show_marker_in_table");
+
+ /* Searches for the select marker in the results table below */
+ if (marker_info) {
+ marker_name = marker_info[2];
+ return $("#qtl_results_filter").find("input:first").val(marker_name).change();
+ }
+ };
+
+ return Chr_Manhattan_Plot;
+
+})();
diff --git a/gn2/wqflask/static/new/javascript/colorbrewer.js b/gn2/wqflask/static/new/javascript/colorbrewer.js
new file mode 100644
index 00000000..2efa9632
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/colorbrewer.js
@@ -0,0 +1,302 @@
+// This product includes color specifications and designs developed by Cynthia Brewer (http://colorbrewer.org/).
+var colorbrewer = {YlGn: {
+3: ["#f7fcb9","#addd8e","#31a354"],
+4: ["#ffffcc","#c2e699","#78c679","#238443"],
+5: ["#ffffcc","#c2e699","#78c679","#31a354","#006837"],
+6: ["#ffffcc","#d9f0a3","#addd8e","#78c679","#31a354","#006837"],
+7: ["#ffffcc","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#005a32"],
+8: ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#005a32"],
+9: ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"]
+},YlGnBu: {
+3: ["#edf8b1","#7fcdbb","#2c7fb8"],
+4: ["#ffffcc","#a1dab4","#41b6c4","#225ea8"],
+5: ["#ffffcc","#a1dab4","#41b6c4","#2c7fb8","#253494"],
+6: ["#ffffcc","#c7e9b4","#7fcdbb","#41b6c4","#2c7fb8","#253494"],
+7: ["#ffffcc","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#0c2c84"],
+8: ["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#0c2c84"],
+9: ["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"]
+},GnBu: {
+3: ["#e0f3db","#a8ddb5","#43a2ca"],
+4: ["#f0f9e8","#bae4bc","#7bccc4","#2b8cbe"],
+5: ["#f0f9e8","#bae4bc","#7bccc4","#43a2ca","#0868ac"],
+6: ["#f0f9e8","#ccebc5","#a8ddb5","#7bccc4","#43a2ca","#0868ac"],
+7: ["#f0f9e8","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#08589e"],
+8: ["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#08589e"],
+9: ["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"]
+},BuGn: {
+3: ["#e5f5f9","#99d8c9","#2ca25f"],
+4: ["#edf8fb","#b2e2e2","#66c2a4","#238b45"],
+5: ["#edf8fb","#b2e2e2","#66c2a4","#2ca25f","#006d2c"],
+6: ["#edf8fb","#ccece6","#99d8c9","#66c2a4","#2ca25f","#006d2c"],
+7: ["#edf8fb","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#005824"],
+8: ["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#005824"],
+9: ["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"]
+},PuBuGn: {
+3: ["#ece2f0","#a6bddb","#1c9099"],
+4: ["#f6eff7","#bdc9e1","#67a9cf","#02818a"],
+5: ["#f6eff7","#bdc9e1","#67a9cf","#1c9099","#016c59"],
+6: ["#f6eff7","#d0d1e6","#a6bddb","#67a9cf","#1c9099","#016c59"],
+7: ["#f6eff7","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016450"],
+8: ["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016450"],
+9: ["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"]
+},PuBu: {
+3: ["#ece7f2","#a6bddb","#2b8cbe"],
+4: ["#f1eef6","#bdc9e1","#74a9cf","#0570b0"],
+5: ["#f1eef6","#bdc9e1","#74a9cf","#2b8cbe","#045a8d"],
+6: ["#f1eef6","#d0d1e6","#a6bddb","#74a9cf","#2b8cbe","#045a8d"],
+7: ["#f1eef6","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#034e7b"],
+8: ["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#034e7b"],
+9: ["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"]
+},BuPu: {
+3: ["#e0ecf4","#9ebcda","#8856a7"],
+4: ["#edf8fb","#b3cde3","#8c96c6","#88419d"],
+5: ["#edf8fb","#b3cde3","#8c96c6","#8856a7","#810f7c"],
+6: ["#edf8fb","#bfd3e6","#9ebcda","#8c96c6","#8856a7","#810f7c"],
+7: ["#edf8fb","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#6e016b"],
+8: ["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#6e016b"],
+9: ["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"]
+},RdPu: {
+3: ["#fde0dd","#fa9fb5","#c51b8a"],
+4: ["#feebe2","#fbb4b9","#f768a1","#ae017e"],
+5: ["#feebe2","#fbb4b9","#f768a1","#c51b8a","#7a0177"],
+6: ["#feebe2","#fcc5c0","#fa9fb5","#f768a1","#c51b8a","#7a0177"],
+7: ["#feebe2","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177"],
+8: ["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177"],
+9: ["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"]
+},PuRd: {
+3: ["#e7e1ef","#c994c7","#dd1c77"],
+4: ["#f1eef6","#d7b5d8","#df65b0","#ce1256"],
+5: ["#f1eef6","#d7b5d8","#df65b0","#dd1c77","#980043"],
+6: ["#f1eef6","#d4b9da","#c994c7","#df65b0","#dd1c77","#980043"],
+7: ["#f1eef6","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#91003f"],
+8: ["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#91003f"],
+9: ["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"]
+},OrRd: {
+3: ["#fee8c8","#fdbb84","#e34a33"],
+4: ["#fef0d9","#fdcc8a","#fc8d59","#d7301f"],
+5: ["#fef0d9","#fdcc8a","#fc8d59","#e34a33","#b30000"],
+6: ["#fef0d9","#fdd49e","#fdbb84","#fc8d59","#e34a33","#b30000"],
+7: ["#fef0d9","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d7301f","#990000"],
+8: ["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d7301f","#990000"],
+9: ["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d7301f","#b30000","#7f0000"]
+},YlOrRd: {
+3: ["#ffeda0","#feb24c","#f03b20"],
+4: ["#ffffb2","#fecc5c","#fd8d3c","#e31a1c"],
+5: ["#ffffb2","#fecc5c","#fd8d3c","#f03b20","#bd0026"],
+6: ["#ffffb2","#fed976","#feb24c","#fd8d3c","#f03b20","#bd0026"],
+7: ["#ffffb2","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#b10026"],
+8: ["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#b10026"],
+9: ["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"]
+},YlOrBr: {
+3: ["#fff7bc","#fec44f","#d95f0e"],
+4: ["#ffffd4","#fed98e","#fe9929","#cc4c02"],
+5: ["#ffffd4","#fed98e","#fe9929","#d95f0e","#993404"],
+6: ["#ffffd4","#fee391","#fec44f","#fe9929","#d95f0e","#993404"],
+7: ["#ffffd4","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#8c2d04"],
+8: ["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#8c2d04"],
+9: ["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"]
+},Purples: {
+3: ["#efedf5","#bcbddc","#756bb1"],
+4: ["#f2f0f7","#cbc9e2","#9e9ac8","#6a51a3"],
+5: ["#f2f0f7","#cbc9e2","#9e9ac8","#756bb1","#54278f"],
+6: ["#f2f0f7","#dadaeb","#bcbddc","#9e9ac8","#756bb1","#54278f"],
+7: ["#f2f0f7","#dadaeb","#bcbddc","#9e9ac8","#807dba","#6a51a3","#4a1486"],
+8: ["#fcfbfd","#efedf5","#dadaeb","#bcbddc","#9e9ac8","#807dba","#6a51a3","#4a1486"],
+9: ["#fcfbfd","#efedf5","#dadaeb","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"]
+},Blues: {
+3: ["#deebf7","#9ecae1","#3182bd"],
+4: ["#eff3ff","#bdd7e7","#6baed6","#2171b5"],
+5: ["#eff3ff","#bdd7e7","#6baed6","#3182bd","#08519c"],
+6: ["#eff3ff","#c6dbef","#9ecae1","#6baed6","#3182bd","#08519c"],
+7: ["#eff3ff","#c6dbef","#9ecae1","#6baed6","#4292c6","#2171b5","#084594"],
+8: ["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6","#2171b5","#084594"],
+9: ["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6","#2171b5","#08519c","#08306b"]
+},Greens: {
+3: ["#e5f5e0","#a1d99b","#31a354"],
+4: ["#edf8e9","#bae4b3","#74c476","#238b45"],
+5: ["#edf8e9","#bae4b3","#74c476","#31a354","#006d2c"],
+6: ["#edf8e9","#c7e9c0","#a1d99b","#74c476","#31a354","#006d2c"],
+7: ["#edf8e9","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#005a32"],
+8: ["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#005a32"],
+9: ["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"]
+},Oranges: {
+3: ["#fee6ce","#fdae6b","#e6550d"],
+4: ["#feedde","#fdbe85","#fd8d3c","#d94701"],
+5: ["#feedde","#fdbe85","#fd8d3c","#e6550d","#a63603"],
+6: ["#feedde","#fdd0a2","#fdae6b","#fd8d3c","#e6550d","#a63603"],
+7: ["#feedde","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#8c2d04"],
+8: ["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#8c2d04"],
+9: ["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"]
+},Reds: {
+3: ["#fee0d2","#fc9272","#de2d26"],
+4: ["#fee5d9","#fcae91","#fb6a4a","#cb181d"],
+5: ["#fee5d9","#fcae91","#fb6a4a","#de2d26","#a50f15"],
+6: ["#fee5d9","#fcbba1","#fc9272","#fb6a4a","#de2d26","#a50f15"],
+7: ["#fee5d9","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#99000d"],
+8: ["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#99000d"],
+9: ["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"]
+},Greys: {
+3: ["#f0f0f0","#bdbdbd","#636363"],
+4: ["#f7f7f7","#cccccc","#969696","#525252"],
+5: ["#f7f7f7","#cccccc","#969696","#636363","#252525"],
+6: ["#f7f7f7","#d9d9d9","#bdbdbd","#969696","#636363","#252525"],
+7: ["#f7f7f7","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525"],
+8: ["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525"],
+9: ["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"]
+},PuOr: {
+3: ["#f1a340","#f7f7f7","#998ec3"],
+4: ["#e66101","#fdb863","#b2abd2","#5e3c99"],
+5: ["#e66101","#fdb863","#f7f7f7","#b2abd2","#5e3c99"],
+6: ["#b35806","#f1a340","#fee0b6","#d8daeb","#998ec3","#542788"],
+7: ["#b35806","#f1a340","#fee0b6","#f7f7f7","#d8daeb","#998ec3","#542788"],
+8: ["#b35806","#e08214","#fdb863","#fee0b6","#d8daeb","#b2abd2","#8073ac","#542788"],
+9: ["#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788"],
+10: ["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],
+11: ["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"]
+},BrBG: {
+3: ["#d8b365","#f5f5f5","#5ab4ac"],
+4: ["#a6611a","#dfc27d","#80cdc1","#018571"],
+5: ["#a6611a","#dfc27d","#f5f5f5","#80cdc1","#018571"],
+6: ["#8c510a","#d8b365","#f6e8c3","#c7eae5","#5ab4ac","#01665e"],
+7: ["#8c510a","#d8b365","#f6e8c3","#f5f5f5","#c7eae5","#5ab4ac","#01665e"],
+8: ["#8c510a","#bf812d","#dfc27d","#f6e8c3","#c7eae5","#80cdc1","#35978f","#01665e"],
+9: ["#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e"],
+10: ["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#c7eae5","#80cdc1","#35978f","#01665e","#003c30"],
+11: ["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e","#003c30"]
+},PRGn: {
+3: ["#af8dc3","#f7f7f7","#7fbf7b"],
+4: ["#7b3294","#c2a5cf","#a6dba0","#008837"],
+5: ["#7b3294","#c2a5cf","#f7f7f7","#a6dba0","#008837"],
+6: ["#762a83","#af8dc3","#e7d4e8","#d9f0d3","#7fbf7b","#1b7837"],
+7: ["#762a83","#af8dc3","#e7d4e8","#f7f7f7","#d9f0d3","#7fbf7b","#1b7837"],
+8: ["#762a83","#9970ab","#c2a5cf","#e7d4e8","#d9f0d3","#a6dba0","#5aae61","#1b7837"],
+9: ["#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837"],
+10: ["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],
+11: ["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"]
+},PiYG: {
+3: ["#e9a3c9","#f7f7f7","#a1d76a"],
+4: ["#d01c8b","#f1b6da","#b8e186","#4dac26"],
+5: ["#d01c8b","#f1b6da","#f7f7f7","#b8e186","#4dac26"],
+6: ["#c51b7d","#e9a3c9","#fde0ef","#e6f5d0","#a1d76a","#4d9221"],
+7: ["#c51b7d","#e9a3c9","#fde0ef","#f7f7f7","#e6f5d0","#a1d76a","#4d9221"],
+8: ["#c51b7d","#de77ae","#f1b6da","#fde0ef","#e6f5d0","#b8e186","#7fbc41","#4d9221"],
+9: ["#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221"],
+10: ["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],
+11: ["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"]
+},RdBu: {
+3: ["#ef8a62","#f7f7f7","#67a9cf"],
+4: ["#ca0020","#f4a582","#92c5de","#0571b0"],
+5: ["#ca0020","#f4a582","#f7f7f7","#92c5de","#0571b0"],
+6: ["#b2182b","#ef8a62","#fddbc7","#d1e5f0","#67a9cf","#2166ac"],
+7: ["#b2182b","#ef8a62","#fddbc7","#f7f7f7","#d1e5f0","#67a9cf","#2166ac"],
+8: ["#b2182b","#d6604d","#f4a582","#fddbc7","#d1e5f0","#92c5de","#4393c3","#2166ac"],
+9: ["#b2182b","#d6604d","#f4a582","#fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac"],
+10: ["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],
+11: ["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"]
+},RdGy: {
+3: ["#ef8a62","#ffffff","#999999"],
+4: ["#ca0020","#f4a582","#bababa","#404040"],
+5: ["#ca0020","#f4a582","#ffffff","#bababa","#404040"],
+6: ["#b2182b","#ef8a62","#fddbc7","#e0e0e0","#999999","#4d4d4d"],
+7: ["#b2182b","#ef8a62","#fddbc7","#ffffff","#e0e0e0","#999999","#4d4d4d"],
+8: ["#b2182b","#d6604d","#f4a582","#fddbc7","#e0e0e0","#bababa","#878787","#4d4d4d"],
+9: ["#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d"],
+10: ["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],
+11: ["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"]
+},RdYlBu: {
+3: ["#fc8d59","#ffffbf","#91bfdb"],
+4: ["#d7191c","#fdae61","#abd9e9","#2c7bb6"],
+5: ["#d7191c","#fdae61","#ffffbf","#abd9e9","#2c7bb6"],
+6: ["#d73027","#fc8d59","#fee090","#e0f3f8","#91bfdb","#4575b4"],
+7: ["#d73027","#fc8d59","#fee090","#ffffbf","#e0f3f8","#91bfdb","#4575b4"],
+8: ["#d73027","#f46d43","#fdae61","#fee090","#e0f3f8","#abd9e9","#74add1","#4575b4"],
+9: ["#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4"],
+10: ["#a50026","#d73027","#f46d43","#fdae61","#fee090","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],
+11: ["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"]
+},Spectral: {
+3: ["#fc8d59","#ffffbf","#99d594"],
+4: ["#d7191c","#fdae61","#abdda4","#2b83ba"],
+5: ["#d7191c","#fdae61","#ffffbf","#abdda4","#2b83ba"],
+6: ["#d53e4f","#fc8d59","#fee08b","#e6f598","#99d594","#3288bd"],
+7: ["#d53e4f","#fc8d59","#fee08b","#ffffbf","#e6f598","#99d594","#3288bd"],
+8: ["#d53e4f","#f46d43","#fdae61","#fee08b","#e6f598","#abdda4","#66c2a5","#3288bd"],
+9: ["#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd"],
+10: ["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],
+11: ["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"]
+},RdYlGn: {
+3: ["#fc8d59","#ffffbf","#91cf60"],
+4: ["#d7191c","#fdae61","#a6d96a","#1a9641"],
+5: ["#d7191c","#fdae61","#ffffbf","#a6d96a","#1a9641"],
+6: ["#d73027","#fc8d59","#fee08b","#d9ef8b","#91cf60","#1a9850"],
+7: ["#d73027","#fc8d59","#fee08b","#ffffbf","#d9ef8b","#91cf60","#1a9850"],
+8: ["#d73027","#f46d43","#fdae61","#fee08b","#d9ef8b","#a6d96a","#66bd63","#1a9850"],
+9: ["#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850"],
+10: ["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],
+11: ["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"]
+},Accent: {
+3: ["#7fc97f","#beaed4","#fdc086"],
+4: ["#7fc97f","#beaed4","#fdc086","#ffff99"],
+5: ["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0"],
+6: ["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f"],
+7: ["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17"],
+8: ["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"]
+},Dark2: {
+3: ["#1b9e77","#d95f02","#7570b3"],
+4: ["#1b9e77","#d95f02","#7570b3","#e7298a"],
+5: ["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e"],
+6: ["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02"],
+7: ["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d"],
+8: ["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"]
+},Paired: {
+3: ["#a6cee3","#1f78b4","#b2df8a"],
+4: ["#a6cee3","#1f78b4","#b2df8a","#33a02c"],
+5: ["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99"],
+6: ["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c"],
+7: ["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f"],
+8: ["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00"],
+9: ["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6"],
+10: ["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a"],
+11: ["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99"],
+12: ["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"]
+},Pastel1: {
+3: ["#fbb4ae","#b3cde3","#ccebc5"],
+4: ["#fbb4ae","#b3cde3","#ccebc5","#decbe4"],
+5: ["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6"],
+6: ["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc"],
+7: ["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd"],
+8: ["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec"],
+9: ["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"]
+},Pastel2: {
+3: ["#b3e2cd","#fdcdac","#cbd5e8"],
+4: ["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4"],
+5: ["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9"],
+6: ["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae"],
+7: ["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc"],
+8: ["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"]
+},Set1: {
+3: ["#e41a1c","#377eb8","#4daf4a"],
+4: ["#e41a1c","#377eb8","#4daf4a","#984ea3"],
+5: ["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00"],
+6: ["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33"],
+7: ["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628"],
+8: ["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf"],
+9: ["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999999"]
+},Set2: {
+3: ["#66c2a5","#fc8d62","#8da0cb"],
+4: ["#66c2a5","#fc8d62","#8da0cb","#e78ac3"],
+5: ["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854"],
+6: ["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f"],
+7: ["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494"],
+8: ["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"]
+},Set3: {
+3: ["#8dd3c7","#ffffb3","#bebada"],
+4: ["#8dd3c7","#ffffb3","#bebada","#fb8072"],
+5: ["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3"],
+6: ["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462"],
+7: ["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69"],
+8: ["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5"],
+9: ["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9"],
+10: ["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd"],
+11: ["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5"],
+12: ["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"]
+}};
diff --git a/gn2/wqflask/static/new/javascript/compare_traits_scatterplot.js b/gn2/wqflask/static/new/javascript/compare_traits_scatterplot.js
new file mode 100644
index 00000000..5c0ef16c
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/compare_traits_scatterplot.js
@@ -0,0 +1,121 @@
+// Generated by CoffeeScript 1.8.0
+var root;
+
+root = typeof exports !== "undefined" && exports !== null ? exports : this;
+
+root.create_scatterplot = function(json_ids, json_data) {
+ var data, h, halfh, halfw, indID, margin, mychart, totalh, totalw, w;
+ console.log("TESTING2");
+ h = 400;
+ w = 500;
+ margin = {
+ left: 60,
+ top: 40,
+ right: 40,
+ bottom: 40,
+ inner: 5
+ };
+ halfh = h + margin.top + margin.bottom;
+ totalh = halfh * 2;
+ halfw = w + margin.left + margin.right;
+ totalw = halfw * 2;
+ mychart = scatterplot().xvar(0).yvar(1).xlab("X").ylab("Y").height(h).width(w).margin(margin);
+ data = json_data;
+ indID = json_ids;
+ d3.select("div#comparison_scatterplot").datum({
+ data: data,
+ indID: indID
+ }).call(mychart);
+ return mychart.pointsSelect().on("mouseover", function(d) {
+ return d3.select(this).attr("r", mychart.pointsize() * 3);
+ }).on("mouseout", function(d) {
+ return d3.select(this).attr("r", mychart.pointsize());
+ });
+};
+
+root.create_scatterplots = function(trait_names, json_ids, json_data) {
+ var brush, brushend, brushmove, brushstart, chart, data, h, halfh, halfw, i, indID, margin, mychart, num_traits, svg, totalh, totalw, w, xscale, xshift, xvar, yscale, yshift, yvar, _i, _j, _k, _ref, _ref1, _ref2, _results;
+ console.log("json_data:", json_data);
+ console.log("trait_names:", trait_names);
+ num_traits = json_data.length;
+ console.log("num_traits:", num_traits);
+ h = 300;
+ w = 400;
+ margin = {
+ left: 60,
+ top: 40,
+ right: 40,
+ bottom: 40,
+ inner: 5
+ };
+ halfh = h + margin.top + margin.bottom;
+ totalh = halfh * (num_traits - 1);
+ halfw = w + margin.left + margin.right;
+ totalw = halfw;
+ xvar = [];
+ yvar = [];
+ xshift = [];
+ yshift = [];
+ for (i = _i = 0, _ref = num_traits - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {
+ xvar.push(i);
+ yvar.push(0);
+ xshift.push(0);
+ yshift.push(halfh * i);
+ }
+ console.log("xvar:", xvar);
+ console.log("yvar:", yvar);
+ svg = d3.select("div#comparison_scatterplot").append("svg").attr("height", totalh).attr("width", totalw);
+ mychart = [];
+ chart = [];
+ for (i = _j = 1, _ref1 = num_traits - 1; 1 <= _ref1 ? _j <= _ref1 : _j >= _ref1; i = 1 <= _ref1 ? ++_j : --_j) {
+ mychart[i - 1] = scatterplot().xvar(xvar[i]).yvar(yvar[i]).nxticks(6).height(h).width(w).margin(margin).pointsize(4).xlab("" + trait_names[i - 1]).ylab("" + trait_names[0]).title("" + trait_names[0] + " vs. " + trait_names[i - 1]);
+ data = json_data;
+ indID = json_ids;
+ chart[i - 1] = svg.append("g").attr("id", "chart" + (i - 1)).attr("transform", "translate(" + xshift[i] + "," + yshift[i - 1] + ")");
+ chart[i - 1].datum({
+ data: data,
+ indID: indID
+ }).call(mychart[i - 1]);
+ }
+ brush = [];
+ brushstart = function(i) {
+ return function() {
+ var j, _k, _ref2;
+ for (j = _k = 0, _ref2 = num_traits - 2; 0 <= _ref2 ? _k <= _ref2 : _k >= _ref2; j = 0 <= _ref2 ? ++_k : --_k) {
+ if (j !== i) {
+ chart[j].call(brush[j].clear());
+ }
+ }
+ return svg.selectAll("circle").attr("opacity", 0.6).classed("selected", false);
+ };
+ };
+ brushmove = function(i) {
+ return function() {
+ var e;
+ svg.selectAll("circle").classed("selected", false);
+ e = brush[i].extent();
+ return chart[i].selectAll("circle").classed("selected", function(d, j) {
+ var circ, cx, cy, selected;
+ circ = d3.select(this);
+ cx = circ.attr("cx");
+ cy = circ.attr("cy");
+ selected = e[0][0] <= cx && cx <= e[1][0] && e[0][1] <= cy && cy <= e[1][1];
+ if (selected) {
+ svg.selectAll("circle.pt" + j).classed("selected", true);
+ }
+ return selected;
+ });
+ };
+ };
+ brushend = function() {
+ return svg.selectAll("circle").attr("opacity", 1);
+ };
+ xscale = d3.scale.linear().domain([margin.left, margin.left + w]).range([margin.left, margin.left + w]);
+ yscale = d3.scale.linear().domain([margin.top, margin.top + h]).range([margin.top, margin.top + h]);
+ _results = [];
+ for (i = _k = 0, _ref2 = num_traits - 2; 0 <= _ref2 ? _k <= _ref2 : _k >= _ref2; i = 0 <= _ref2 ? ++_k : --_k) {
+ brush[i] = d3.svg.brush().x(xscale).y(yscale).on("brushstart", brushstart(i)).on("brush", brushmove(i)).on("brushend", brushend);
+ _results.push(chart[i].call(brush[i]));
+ }
+ return _results;
+};
diff --git a/gn2/wqflask/static/new/javascript/comparison_bar_chart.js b/gn2/wqflask/static/new/javascript/comparison_bar_chart.js
new file mode 100644
index 00000000..5e73807c
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/comparison_bar_chart.js
@@ -0,0 +1,25 @@
+generate_traces = function() {
+ traces = [];
+ for (i = 0, _len = js_data.traits.length; i < _len; i++) {
+ this_trace = {
+ x: js_data.samples,
+ y: js_data.sample_data[i],
+ name: js_data.traits[i],
+ type: 'bar',
+ bargap: 20
+ }
+
+ traces.push(this_trace)
+ }
+
+ return traces
+}
+
+create_bar_chart = function() {
+ var data = generate_traces()
+ var layout = {barmode: 'group', bargap: 5};
+
+ Plotly.newPlot('comp_bar_chart', data, layout);
+}
+
+create_bar_chart(); \ No newline at end of file
diff --git a/gn2/wqflask/static/new/javascript/corr_matrix.js b/gn2/wqflask/static/new/javascript/corr_matrix.js
new file mode 100644
index 00000000..ad0fc8b8
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/corr_matrix.js
@@ -0,0 +1,159 @@
+// Generated by CoffeeScript 1.8.0
+var iplotCorr, root;
+
+root = typeof exports !== "undefined" && exports !== null ? exports : this;
+
+iplotCorr = function(data, chartOpts) {
+ var cells, chartdivid, colorScale, corXscale, corYscale, corZscale, corcolors, corr, corr_tip, corrplot, cortitle, drawScatter, height, i, j, margin, nGroup, ncorrX, ncorrY, nind, nvar, pixel_height, pixel_width, rectcolor, scat_tip, scatcolors, scatterplot, scattitle, svg, totalh, totalw, width, zlim, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9;
+ height = (_ref = chartOpts != null ? chartOpts.height : void 0) != null ? _ref : 450;
+ width = (_ref1 = chartOpts != null ? chartOpts.width : void 0) != null ? _ref1 : height;
+ margin = (_ref2 = chartOpts != null ? chartOpts.margin : void 0) != null ? _ref2 : {
+ left: 70,
+ top: 40,
+ right: 5,
+ bottom: 70,
+ inner: 5
+ };
+ corcolors = (_ref3 = chartOpts != null ? chartOpts.corcolors : void 0) != null ? _ref3 : ["darkslateblue", "white", "crimson"];
+ zlim = (_ref4 = chartOpts != null ? chartOpts.zlim : void 0) != null ? _ref4 : [-1, 0, 1];
+ rectcolor = (_ref5 = chartOpts != null ? chartOpts.rectcolor : void 0) != null ? _ref5 : d3.rgb(230, 230, 230);
+ cortitle = (_ref6 = chartOpts != null ? chartOpts.cortitle : void 0) != null ? _ref6 : "";
+ scattitle = (_ref7 = chartOpts != null ? chartOpts.scattitle : void 0) != null ? _ref7 : "";
+ scatcolors = (_ref8 = chartOpts != null ? chartOpts.scatcolors : void 0) != null ? _ref8 : null;
+ chartdivid = (_ref9 = chartOpts != null ? chartOpts.chartdivid : void 0) != null ? _ref9 : 'chart';
+ totalh = height + margin.top + margin.bottom;
+ totalw = (width + margin.left + margin.right) * 2;
+ svg = d3.select("div#" + chartdivid).append("svg").attr("height", totalh).attr("width", totalw);
+ corrplot = svg.append("g").attr("id", "corplot").attr("transform", "translate(" + margin.left + "," + margin.top + ")");
+ scatterplot = svg.append("g").attr("id", "scatterplot").attr("transform", "translate(" + (margin.left * 2 + margin.right + width) + "," + margin.top + ")");
+ nind = data.indID.length;
+ nvar = data["var"].length;
+ ncorrX = data.cols.length;
+ ncorrY = data.rows.length;
+ corXscale = d3.scale.ordinal().domain(d3.range(ncorrX)).rangeBands([0, width]);
+ corYscale = d3.scale.ordinal().domain(d3.range(ncorrY)).rangeBands([0, height]);
+ corZscale = d3.scale.linear().domain(zlim).range(corcolors);
+ pixel_width = corXscale(1) - corXscale(0);
+ pixel_height = corYscale(0) - corYscale(1);
+ corr = [];
+ for (i in data.corr) {
+ for (j in data.corr[i]) {
+ corr.push({
+ row: i,
+ col: j,
+ value: data.corr[i][j]
+ });
+ }
+ corrplot.append("text").attr("class", "corrlabel_y").attr("y", corYscale(i) - pixel_height / 2).attr("x", -margin.left * 0.1).text(data["var"][data.rows[i]]).attr("dominant-baseline", "middle").attr("text-anchor", "end");
+ //corrplot.append("text").attr("class", "corrlabel_x").attr("x", corXscale(i) + pixel_width / 2).attr("y", height + margin.bottom * 0.2).text(data["var"][data.cols[i]]).attr("dominant-baseline", "middle").attr("text-anchor", "middle");
+
+ }
+ scatterplot.append("rect").attr("height", height).attr("width", width).attr("fill", rectcolor).attr("stroke", "black").attr("stroke-width", 1).attr("pointer-events", "none");
+ corr_tip = d3.tip().attr('class', 'd3-tip').html(function(d) {
+ return d3.format(".2f")(d.value);
+ }).direction('e').offset([0, 10]);
+ corrplot.call(corr_tip);
+
+ cells = corrplot.selectAll("empty").data(corr).enter().append("rect").attr("class", "cell").attr("x", function(d) {
+ return corXscale(d.col);
+ }).attr("y", function(d) {
+ return corYscale(d.row);
+ }).attr("width", corXscale.rangeBand()).attr("height", corYscale.rangeBand()).attr("fill", function(d) {
+ return corZscale(d.value);
+ }).attr("stroke", "none").attr("stroke-width", 2).on("mouseover", function(d) {
+ d3.select(this).attr("stroke", "black");
+ corr_tip.show(d);
+ //corrplot.append("text").attr("class", "corrlabel").attr("x", corXscale(d.col) + pixel_width / 2).attr("y", height + margin.bottom * 0.2).text(data["var"][data.cols[d.col]]).attr("dominant-baseline", "middle").attr("text-anchor", "middle");
+ //return corrplot.append("text").attr("class", "corrlabel_x").attr("y", corYscale(d.row) + pixel_height / 2).attr("x", -margin.left * 0.1).text(data["var"][data.rows[d.row]]).attr("dominant-baseline", "middle").attr("text-anchor", "end");
+ return corrplot.append("text").attr("class", "corrlabel_x").attr("x", corXscale(d.col) + pixel_width / 2).attr("y", height + margin.bottom * 0.2).text(data["var"][data.cols[d.col]]).attr("dominant-baseline", "middle").attr("text-anchor", "middle");
+ }).on("mouseout", function(d) {
+ corr_tip.hide(d);
+ d3.selectAll("text.corrlabel_x").remove();
+ return d3.select(this).attr("stroke", "none");
+ }).on("click", function(d) {
+ return drawScatter(d.col, d.row);
+ });
+ nGroup = d3.max(data.group);
+ if (!(scatcolors != null) || scatcolors.length < nGroup) {
+ if (nGroup === 1) {
+ scatcolors = [d3.rgb(150, 150, 150)];
+ } else if (nGroup <= 3) {
+ scatcolors = ["crimson", "green", "darkslateblue"];
+ } else {
+ if (nGroup <= 10) {
+ colorScale = d3.scale.category10();
+ } else {
+ colorScale = d3.scale.category20();
+ }
+ scatcolors = (function() {
+ var _results;
+ _results = [];
+ for (i in d3.range(nGroup)) {
+ _results.push(colorScale(i));
+ }
+ return _results;
+ })();
+ }
+ }
+ scat_tip = d3.tip().attr('class', 'd3-tip').html(function(d, i) {
+ return data.indID[i];
+ }).direction('e').offset([0, 10]);
+ scatterplot.call(scat_tip);
+ drawScatter = function(i, j) {
+ var xScale, xticks, yScale, yticks;
+ d3.selectAll("circle.points").remove();
+ d3.selectAll("text.axes").remove();
+ d3.selectAll("line.axes").remove();
+ console.log("data.dat:", data.dat);
+ console.log("data.cols:", data.cols);
+ xScale = d3.scale.linear().domain(d3.extent(data.dat[data.cols[i]])).range([margin.inner, width - margin.inner]);
+ yScale = d3.scale.linear().domain(d3.extent(data.dat[data.rows[j]])).range([height - margin.inner, margin.inner]);
+ scatterplot.append("text").attr("id", "xaxis").attr("class", "axes").attr("x", width / 2).attr("y", height + margin.bottom * 0.7).text(data["var"][data.cols[i]]).attr("dominant-baseline", "middle").attr("text-anchor", "middle").attr("fill", "slateblue");
+ scatterplot.append("text").attr("id", "yaxis").attr("class", "axes").attr("x", -margin.left * 0.8).attr("y", height / 2).text(data["var"][data.rows[j]]).attr("dominant-baseline", "middle").attr("text-anchor", "middle").attr("transform", "rotate(270," + (-margin.left * 0.8) + "," + (height / 2) + ")").attr("fill", "slateblue");
+ xticks = xScale.ticks(5);
+ yticks = yScale.ticks(5);
+ scatterplot.selectAll("empty").data(xticks).enter().append("text").attr("class", "axes").text(function(d) {
+ return formatAxis(xticks)(d);
+ }).attr("x", function(d) {
+ return xScale(d);
+ }).attr("y", height + margin.bottom * 0.3).attr("dominant-baseline", "middle").attr("text-anchor", "middle");
+ scatterplot.selectAll("empty").data(yticks).enter().append("text").attr("class", "axes").text(function(d) {
+ return formatAxis(yticks)(d);
+ }).attr("x", -margin.left * 0.1).attr("y", function(d) {
+ return yScale(d);
+ }).attr("dominant-baseline", "middle").attr("text-anchor", "end");
+ scatterplot.selectAll("empty").data(xticks).enter().append("line").attr("class", "axes").attr("x1", function(d) {
+ return xScale(d);
+ }).attr("x2", function(d) {
+ return xScale(d);
+ }).attr("y1", 0).attr("y2", height).attr("stroke", "white").attr("stroke-width", 1);
+ scatterplot.selectAll("empty").data(yticks).enter().append("line").attr("class", "axes").attr("y1", function(d) {
+ return yScale(d);
+ }).attr("y2", function(d) {
+ return yScale(d);
+ }).attr("x1", 0).attr("x2", width).attr("stroke", "white").attr("stroke-width", 1);
+ return scatterplot.selectAll("empty").data(d3.range(nind)).enter().append("circle").attr("class", "points").attr("cx", function(d) {
+ return xScale(data.dat[data.cols[i]][d]);
+ }).attr("cy", function(d) {
+ return yScale(data.dat[data.rows[j]][d]);
+ }).attr("r", function(d) {
+ var x, y;
+ x = data.dat[data.cols[i]][d];
+ y = data.dat[data.rows[j]][d];
+ if ((x != "") && (y != "")) {
+ return 3;
+ } else {
+ return null;
+ }
+ }).attr("stroke", "black").attr("stroke-width", 1).attr("fill", function(d) {
+ return scatcolors[data.group[d] - 1];
+ }).on("mouseover", scat_tip.show).on("mouseout", scat_tip.hide);
+ };
+ corrplot.append("rect").attr("height", height).attr("width", width).attr("fill", "none").attr("stroke", "black").attr("stroke-width", 1).attr("pointer-events", "none");
+ scatterplot.append("rect").attr("height", height).attr("width", width).attr("fill", "none").attr("stroke", "black").attr("stroke-width", 1).attr("pointer-events", "none");
+ corrplot.append("text").text(cortitle).attr("id", "corrtitle").attr("x", width / 2).attr("y", -margin.top / 2).attr("dominant-baseline", "middle").attr("text-anchor", "middle");
+ scatterplot.append("text").text(scattitle).attr("id", "scattitle").attr("x", width / 2).attr("y", -margin.top / 2).attr("dominant-baseline", "middle").attr("text-anchor", "middle");
+ return d3.select("div#caption").style("opacity", 1);
+};
+
+root.corr_matrix = iplotCorr;
diff --git a/gn2/wqflask/static/new/javascript/corr_scatter_plot.js b/gn2/wqflask/static/new/javascript/corr_scatter_plot.js
new file mode 100644
index 00000000..553423cf
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/corr_scatter_plot.js
@@ -0,0 +1,73 @@
+// Generated by CoffeeScript 1.8.0
+var Scatter_Plot, root;
+
+root = typeof exports !== "undefined" && exports !== null ? exports : this;
+
+Scatter_Plot = (function() {
+ function Scatter_Plot() {
+ var chart, data, g, height, i, main, margin, maxx, maxy, minx, miny, sample1, sample2, samplename, samples_1, samples_2, text, width, x, xAxis, y, yAxis;
+ data = new Array();
+ samples_1 = js_data.samples_1;
+ samples_2 = js_data.samples_2;
+ i = 0;
+ for (samplename in samples_1) {
+ sample1 = samples_1[samplename];
+ sample2 = samples_2[samplename];
+ data[i++] = [sample1.value, sample2.value];
+ }
+ margin = {
+ top: 100,
+ right: 15,
+ bottom: 60,
+ left: 60
+ };
+ width = js_data.width - margin.left - margin.right;
+ height = js_data.height - margin.top - margin.bottom;
+ minx = d3.min(data, function(d) {
+ return d[0];
+ }) * 0.95;
+ maxx = d3.max(data, function(d) {
+ return d[0];
+ }) * 1.05;
+ miny = d3.min(data, function(d) {
+ return d[1];
+ }) * 0.95;
+ maxy = d3.max(data, function(d) {
+ return d[1];
+ }) * 1.05;
+ x = d3.scale.linear().domain([minx, maxx]).range([0, width]);
+ y = d3.scale.linear().domain([miny, maxy]).range([height, 0]);
+ chart = d3.select("#scatter_plot").append("svg:svg").attr("width", width + margin.right + margin.left).attr("height", height + margin.top + margin.bottom).attr("class", "chart");
+ main = chart.append("g").attr("transform", "translate(" + margin.left + "," + margin.top + ")").attr("width", width).attr("height", height).attr("class", "main");
+ xAxis = d3.svg.axis().scale(x).orient("bottom");
+ main.append("g").attr("transform", "translate(0," + height + ")").attr("class", "main axis date").call(xAxis);
+ yAxis = d3.svg.axis().scale(y).orient("left");
+ main.append("g").attr("transform", "translate(0,0)").attr("class", "main axis date").call(yAxis);
+ g = main.append("svg:g");
+ g.selectAll("scatter-dots").data(data).enter().append("svg:circle").attr("cx", function(d) {
+ return x(d[0]);
+ }).attr("cy", function(d) {
+ return y(d[1]);
+ }).attr("fill", js_data.circle_color).attr("r", js_data.circle_radius);
+ main.append("line").attr("x1", x(minx)).attr("y1", y(js_data.slope * minx + js_data.intercept)).attr("x2", x(maxx * 0.995)).attr("y2", y(js_data.slope * maxx * 0.995 + js_data.intercept)).style("stroke", js_data.line_color).style("stroke-width", js_data.line_width);
+ chart.append("text").attr("x", width / 2).attr("y", margin.top / 2 - 25).text("Sample Correlation Scatterplot");
+ text = "";
+ text += "N=" + js_data.num_overlap;
+ chart.append("text").attr("x", margin.left).attr("y", margin.top / 2 - 5).text(text);
+ text = "";
+ text += "r=" + js_data.r_value + "\t";
+ text += "p(r)=" + js_data.p_value;
+ chart.append("text").attr("x", margin.left).attr("y", margin.top / 2 + 15).text(text);
+ text = "";
+ text += "slope=" + js_data.slope + "\t";
+ text += "intercept=" + js_data.intercept;
+ chart.append("text").attr("x", margin.left).attr("y", margin.top / 2 + 35).text(text);
+ chart.append("text").attr("x", width / 2).attr("y", height + margin.top + 35).text(js_data.trait_1);
+ chart.append("text").attr("x", 20).attr("y", height / 2 + margin.top + 30).attr("transform", "rotate(-90 20," + (height / 2 + margin.top + 30) + ")").text(js_data.trait_2);
+ }
+
+ return Scatter_Plot;
+
+})();
+
+root.Scatter_Plot = Scatter_Plot;
diff --git a/gn2/wqflask/static/new/javascript/create_corr_matrix.js b/gn2/wqflask/static/new/javascript/create_corr_matrix.js
new file mode 100644
index 00000000..c0c39fbc
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/create_corr_matrix.js
@@ -0,0 +1,94 @@
+var neg_color_scale = chroma.scale(['#91bfdb', '#ffffff']).domain([-1, -0.4]);
+var pos_color_scale = chroma.scale(['#ffffff', '#fc8d59']).domain([0.4, 1])
+$('.corr_cell').each( function () {
+ corr_value = parseFloat($(this).find('span.corr_value').text())
+ if (corr_value >= 0.5){
+ $(this).css('background-color', pos_color_scale(parseFloat(corr_value))._rgb)
+ }
+ else if (corr_value <= -0.5) {
+ $(this).css('background-color', neg_color_scale(parseFloat(corr_value))._rgb)
+ }
+ else {
+ $(this).css('background-color', 'white')
+ }
+});
+
+$('#short_labels').click( function (){
+ if ($('.short_check').css("display") == "none"){
+ $('.short_check').css("display", "inline-block")
+ } else {
+ $('.short_check').css("display", "none")
+ }
+ $('.shortName').each( function() {
+ if ($(this).css("display") == "none"){
+ $(this).css("display", "block");
+ }
+ else {
+ $(this).css("display", "none");
+ }
+ });
+});
+
+$('#long_labels').click( function (){
+ if ($('.long_check').css("display") == "none"){
+ $('.long_check').css("display", "inline-block")
+ } else {
+ $('.long_check').css("display", "none")
+ }
+ $('.verboseName').each( function() {
+ if ($(this).css("display") == "none"){
+ $(this).css("display", "block");
+ }
+ else {
+ $(this).css("display", "none");
+ }
+ });
+});
+
+select_all = function() {
+ $(".trait_checkbox").each(function() {
+ $(this).prop('checked', true);
+ });
+};
+
+deselect_all = function() {
+ $(".trait_checkbox").each(function() {
+ $(this).prop('checked', false);
+ });
+};
+
+change_buttons = function() {
+ num_checked = $('.trait_checkbox:checked').length;
+ if (num_checked === 0) {
+ $("#add").prop("disabled", true);
+ } else {
+ $("#add").prop("disabled", false);
+ }
+};
+
+add = function() {
+ var traits;
+ traits = $("input[name=pca_trait]:checked").map(function() {
+ return $(this).val();
+ }).get();
+
+ var traits_hash = md5(traits.toString());
+
+ $.ajax({
+ type: "POST",
+ url: "/collections/store_trait_list",
+ data: {
+ hash: traits_hash,
+ traits: traits.toString()
+ }
+ });
+
+ return $.colorbox({
+ href: "/collections/add?hash=" + traits_hash
+ });
+}
+
+$("#select_all").click(select_all);
+$("#deselect_all").click(deselect_all);
+$("#add").click(add);
+$(".btn, .trait_checkbox").click(change_buttons);
diff --git a/gn2/wqflask/static/new/javascript/create_datatable.js b/gn2/wqflask/static/new/javascript/create_datatable.js
new file mode 100644
index 00000000..541dfdf5
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/create_datatable.js
@@ -0,0 +1,117 @@
+create_table = function(tableId="trait_table", tableData = [], columnDefs = [], customSettings = {}) {
+
+ loadDataTable(tableId=tableId, tableData=tableData, customSettings, firstRun=true)
+
+ var widthChange = 0; // For storing the change in width so overall table width can be adjusted by that amount
+ function loadDataTable(tableId, tableData, customSettings, firstRun=false){
+ if (!firstRun){
+ columnDefs = setUserColumnsDefWidths(tableId, columnDefs);
+ }
+
+ tableSettings = {
+ "drawCallback": function( settings ) {
+ $('#' + tableId + ' tr').off().on("click", function(event) {
+ if (event.target.type !== 'checkbox' && event.target.tagName.toLowerCase() !== 'a') {
+ var obj =$(this).find('input');
+ obj.prop('checked', !obj.is(':checked'));
+ }
+ if ($(this).hasClass("selected") && event.target.tagName.toLowerCase() !== 'a'){
+ $(this).removeClass("selected")
+ } else if (event.target.tagName.toLowerCase() !== 'a') {
+ $(this).addClass("selected")
+ }
+ change_buttons()
+ });
+ },
+ "columns": columnDefs,
+ "sDom": "iti",
+ "destroy": true,
+ "autoWidth": false,
+ "bSortClasses": false,
+ "scrollY": "100vh",
+ "scrollX": "100%",
+ "scrollCollapse": true,
+ "scroller": true,
+ "iDisplayLength": -1,
+ "initComplete": function (settings) {
+ // Add JQueryUI resizable functionality to each th in the ScrollHead table
+ $('#' + tableId + '_wrapper .dataTables_scrollHead thead th').resizable({
+ handles: "e",
+ alsoResize: '#' + tableId + '_wrapper .dataTables_scrollHead table', //Not essential but makes the resizing smoother
+ resize: function( event, ui ) {
+ widthChange = ui.size.width - ui.originalSize.width;
+ },
+ stop: function () {
+ saveColumnSettings(tableId, theTable);
+ loadDataTable(tableId, tableData, customSettings, firstRun=false);
+ }
+ });
+ }
+ }
+
+ if (tableData.length > 0){
+ tableSettings["data"] = tableData
+ }
+
+ // Replace default settings with custom settings or add custom settings if not already set in default settings
+ $.each(customSettings, function(key, value) {
+ tableSettings[key] = value
+ });
+
+ if (!firstRun){
+ $('#' + tableId + '_container').css("width", String($('#' + tableId).width() + widthChange + 17) + "px"); // Change the container width by the change in width of the adjusted column, so the overall table size adjusts properly
+
+ let checkedRows = getCheckedRows(tableId);
+ theTable = $('#' + tableId).DataTable(tableSettings);
+ if (checkedRows.length > 0){
+ recheckRows(theTable, checkedRows);
+ }
+ } else {
+ theTable = $('#' + tableId).DataTable(tableSettings);
+ theTable.draw();
+ $('#' + tableId + '_container').css("width", String($('#' + tableId).width() + 17) + "px");
+ theTable.columns.adjust().draw();
+ }
+ }
+
+ theTable.on( 'order.dt search.dt draw.dt', function () {
+ theTable.column(1, {search:'applied', order:'applied'}).nodes().each( function (cell, i) {
+ cell.innerHTML = i+1;
+ } );
+ } ).draw();
+
+ window.addEventListener('resize', function(){
+ theTable.columns.adjust();
+ });
+
+ $('#' + tableId + '_searchbox').on( 'keyup', function () {
+ theTable.search($(this).val()).draw();
+ } );
+
+ $('.toggle-vis').on('click', function (e) {
+ e.preventDefault();
+
+ function toggleColumn(column) {
+ // Toggle column visibility
+ column.visible( ! column.visible() );
+ if (column.visible()){
+ $(this).removeClass("active");
+ } else {
+ $(this).addClass("active");
+ }
+ }
+
+ // Get the column API object
+ var targetCols = $(this).attr('data-column').split(",")
+ for (let i = 0; i < targetCols.length; i++){
+ var column = theTable.column( targetCols[i] );
+ toggleColumn(column);
+ }
+ } );
+
+ $('#redraw').on('click', function (e) {
+ e.preventDefault();
+ trait_table.columns().visible( true );
+ $('.toggle-vis.active').removeClass('active');
+ });
+}
diff --git a/gn2/wqflask/static/new/javascript/create_heatmap.js b/gn2/wqflask/static/new/javascript/create_heatmap.js
new file mode 100644
index 00000000..f3ae2a46
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/create_heatmap.js
@@ -0,0 +1,14 @@
+// Generated by CoffeeScript 1.8.0
+var create_heatmap;
+
+create_heatmap = function() {
+ var data, h, mychart, w;
+ h = 500;
+ w = 1200;
+ mychart = lodheatmap().height(h).width(w);
+ data = js_data.json_data;
+ console.log("data:", data);
+ return d3.select("div#chart").datum(data).call(mychart);
+};
+
+create_heatmap();
diff --git a/gn2/wqflask/static/new/javascript/create_lodchart.js b/gn2/wqflask/static/new/javascript/create_lodchart.js
new file mode 100644
index 00000000..778eed3a
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/create_lodchart.js
@@ -0,0 +1,50 @@
+//var create_lod_chart;
+
+create_lod_chart = function() {
+ var additive, chrrect, data, h, halfh, margin, mychart, totalh, totalw, w;
+ h = 500;
+ w = 1200;
+ margin = {
+ left: 60,
+ top: 40,
+ right: 40,
+ bottom: 40,
+ inner: 5
+ };
+ halfh = h + margin.top + margin.bottom;
+ totalh = halfh * 2;
+ totalw = w + margin.left + margin.right;
+ if ('additive' in js_data) {
+ additive = js_data.additive;
+ } else {
+ additive = false;
+ }
+ console.log("js_data:", js_data);
+ mychart = lodchart().lodvarname("lod.hk").height(h).width(w).margin(margin).ylab(js_data.result_score_type + " score").manhattanPlot(js_data.manhattan_plot);
+ data = js_data.json_data;
+ d3.select("div#topchart").datum(data).call(mychart);
+ chrrect = mychart.chrSelect();
+ chrrect.on("mouseover", function() {
+ return d3.select(this).attr("fill", "#E9CFEC");
+ }).on("mouseout", function(d, i) {
+ return d3.select(this).attr("fill", function() {
+ if (i % 2) {
+ return "#F1F1F9";
+ }
+ return "#FBFBFF";
+ });
+ });
+ return mychart.markerSelect().on("click", function(d) {
+ var r;
+ r = d3.select(this).attr("r");
+ return d3.select(this).transition().duration(500).attr("r", r * 3).transition().duration(500).attr("r", r);
+ });
+};
+
+create_lod_chart()
+
+/*
+$(function() {
+ return root.create_lod_chart = create_lod_chart;
+});
+*/ \ No newline at end of file
diff --git a/gn2/wqflask/static/new/javascript/create_manhattan_plot.js b/gn2/wqflask/static/new/javascript/create_manhattan_plot.js
new file mode 100644
index 00000000..30af484d
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/create_manhattan_plot.js
@@ -0,0 +1,68 @@
+// Generated by CoffeeScript 1.8.0
+var create_manhattan_plot;
+
+create_manhattan_plot = function() {
+ var chrrect, data, h, halfh, margin, mychart, totalh, totalw, w;
+ h = 500;
+ w = 1200;
+ margin = {
+ left: 60,
+ top: 40,
+ right: 40,
+ bottom: 40,
+ inner: 5
+ };
+ halfh = h + margin.top + margin.bottom;
+ totalh = halfh * 2;
+ totalw = w + margin.left + margin.right;
+ console.log("js_data:", js_data);
+ mychart = lodchart().lodvarname("lod.hk").height(h).width(w).margin(margin).ylab("LOD score").manhattanPlot(js_data.manhattan_plot);
+ data = js_data.json_data;
+ d3.select("div#topchart").datum(data).call(mychart);
+ chrrect = mychart.chrSelect();
+ chrrect.on("mouseover", function() {
+ return d3.select(this).attr("fill", "#E9CFEC");
+ }).on("mouseout", function(d, i) {
+ return d3.select(this).attr("fill", function() {
+ if (i % 2) {
+ return "#F1F1F9";
+ }
+ return "#FBFBFF";
+ });
+ });
+ return mychart.markerSelect().on("click", function(d) {
+ var r;
+ r = d3.select(this).attr("r");
+ return d3.select(this).transition().duration(500).attr("r", r * 3).transition().duration(500).attr("r", r);
+ });
+};
+
+create_manhattan_plot();
+
+$("#export").click((function(_this) {
+ return function() {
+ var filename, form, svg, svg_xml;
+ svg = $("#topchart").find("svg")[0];
+ svg_xml = (new XMLSerializer).serializeToString(svg);
+ console.log("svg_xml:", svg_xml);
+ filename = "manhattan_plot_" + js_data.this_trait;
+ form = $("#exportform");
+ form.find("#data").val(svg_xml);
+ form.find("#filename").val(filename);
+ return form.submit();
+ };
+})(this));
+
+$("#export_pdf").click((function(_this) {
+ return function() {
+ var filename, form, svg, svg_xml;
+ svg = $("#topchart").find("svg")[0];
+ svg_xml = (new XMLSerializer).serializeToString(svg);
+ console.log("svg_xml:", svg_xml);
+ filename = "manhattan_plot_" + js_data.this_trait;
+ form = $("#exportpdfform");
+ form.find("#data").val(svg_xml);
+ form.find("#filename").val(filename);
+ return form.submit();
+ };
+})(this));
diff --git a/gn2/wqflask/static/new/javascript/ctl_graph.js b/gn2/wqflask/static/new/javascript/ctl_graph.js
new file mode 100644
index 00000000..bd950592
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/ctl_graph.js
@@ -0,0 +1,193 @@
+window.onload=function() {
+ // id of Cytoscape Web container div
+ //var div_id = "cytoscapeweb";
+
+ var cy = cytoscape({
+ container: $('#cytoscapeweb'), // container to render in
+
+ elements: elements_list,
+
+ style: [ // the stylesheet for the graph
+ {
+ selector: 'node',
+ style: {
+ 'background-color': '#666',
+ 'label': 'data(symbol)',
+ 'font-size': 10
+ }
+ },
+
+ {
+ selector: 'edge',
+ style: {
+ 'width': 'data(width)',
+ 'line-color': 'data(color)',
+ 'target-arrow-color': '#ccc',
+ 'target-arrow-shape': 'none',
+ 'font-size': 8,
+ 'curve-style': 'bezier'
+ }
+ }
+ ],
+
+ zoom: 12,
+ layout: { name: 'circle',
+ fit: true, // whether to fit the viewport to the graph
+ padding: 30 // the padding on fit
+ //idealEdgeLength: function( edge ){ return edge.data['correlation']*10; },
+ },
+
+
+ zoomingEnabled: true,
+ userZoomingEnabled: true,
+ panningEnabled: true,
+ userPanningEnabled: true,
+ boxSelectionEnabled: false,
+ selectionType: 'single',
+
+ // rendering options:
+ styleEnabled: true
+ });
+
+ var eles = cy.$() // var containing all elements, so elements can be restored after being removed
+
+ var defaults = {
+ zoomFactor: 0.05, // zoom factor per zoom tick
+ zoomDelay: 45, // how many ms between zoom ticks
+ minZoom: 0.1, // min zoom level
+ maxZoom: 10, // max zoom level
+ fitPadding: 30, // padding when fitting
+ panSpeed: 10, // how many ms in between pan ticks
+ panDistance: 10, // max pan distance per tick
+ panDragAreaSize: 75, // the length of the pan drag box in which the vector for panning is calculated (bigger = finer control of pan speed and direction)
+ panMinPercentSpeed: 0.25, // the slowest speed we can pan by (as a percent of panSpeed)
+ panInactiveArea: 8, // radius of inactive area in pan drag box
+ panIndicatorMinOpacity: 0.5, // min opacity of pan indicator (the draggable nib); scales from this to 1.0
+ zoomOnly: false, // a minimal version of the ui only with zooming (useful on systems with bad mousewheel resolution)
+ fitSelector: undefined, // selector of elements to fit
+ animateOnFit: function(){ // whether to animate on fit
+ return false;
+ },
+ fitAnimationDuration: 1000, // duration of animation on fit
+
+ // icon class names
+ sliderHandleIcon: 'fa fa-minus',
+ zoomInIcon: 'fa fa-plus',
+ zoomOutIcon: 'fa fa-minus',
+ resetIcon: 'fa fa-expand'
+ };
+
+ cy.panzoom( defaults );
+
+ function create_qtips(cy){
+ cy.nodes().qtip({
+ content: function(){
+ gn_link = '<b>'+'<a href="' + gn2_url + '/show_trait?trait_id=' + this.data().sid + '&dataset=' + this.data().dataset + '" >'+this.data().id +'</a>'+'</b><br>'
+ ncbi_link = '<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=gene&cmd=Retrieve&dopt=Graphics&list_uids=' + this.data().geneid + '" >NCBI<a>'+'<br>'
+ omim_link = '<a href="http://www.ncbi.nlm.nih.gov/omim/' + this.data().omim + '" >OMIM<a>'+'<br>'
+ qtip_content = gn_link + ncbi_link + omim_link
+ return qtip_content
+ },
+ position: {
+ my: 'top center',
+ at: 'bottom center'
+ },
+ style: {
+ classes: 'qtip-bootstrap',
+ tip: {
+ width: 16,
+ height: 8
+ }
+ }
+ });
+
+ cy.edges().qtip({
+ content: function(){
+ edge_ID = '<b>Edge: ' + this.data().id + '</b><br>'
+ lod_score = 'LOD: ' + this.data().lod + '<br>'
+ return edge_ID + lod_score
+ },
+ position: {
+ my: 'top center',
+ at: 'bottom center'
+ },
+ style: {
+ classes: 'qtip-bootstrap',
+ tip: {
+ width: 16,
+ height: 8
+ }
+ }
+ });
+ }
+
+ create_qtips(cy)
+
+ $('#slide').change(function() {
+ eles.restore()
+
+ console.log(eles)
+
+ // nodes_to_restore = eles.filter("node[max_corr >= " + $(this).val() + "], edge[correlation >= " + $(this).val() + "][correlation <= -" + $(this).val() + "]")
+ // nodes_to_restore.restore()
+
+ // edges_to_restore = eles.filter("edge[correlation >= " + $(this).val() + "][correlation <= -" + $(this).val() + "]")
+ // edges_to_restore.restore()
+
+ //cy.$("node[max_corr >= " + $(this).val() + "]").restore();
+ //cy.$("edge[correlation >= " + $(this).val() + "][correlation <= -" + $(this).val() + "]").restore();
+
+ cy.$("node[max_corr < " + $(this).val() + "]").remove();
+ cy.$("edge[correlation < " + $(this).val() + "][correlation > -" + $(this).val() + "]").remove();
+
+ cy.layout({ name: $('select[name=layout_select]').val(),
+ fit: true, // whether to fit the viewport to the graph
+ padding: 25 // the padding on fit
+ });
+
+ });
+
+ $('#reset_graph').click(function() {
+ eles.restore()
+ $('#slide').val(0)
+ cy.layout({ name: $('select[name=layout_select]').val(),
+ fit: true, // whether to fit the viewport to the graph
+ padding: 25 // the padding on fit
+ });
+ });
+
+ $('select[name=focus_select]').change(function() {
+ focus_trait = $(this).val()
+
+ eles.restore()
+ cy.$('edge[source != "' + focus_trait + '"][target != "' + focus_trait + '"]').remove()
+
+ cy.layout({ name: $('select[name=layout_select]').val(),
+ fit: true, // whether to fit the viewport to the graph
+ padding: 25 // the padding on fit
+ });
+ });
+
+ $('select[name=layout_select]').change(function() {
+ layout_type = $(this).val()
+ console.log("LAYOUT:", layout_type)
+ cy.layout({ name: layout_type,
+ fit: true, // whether to fit the viewport to the graph
+ padding: 25 // the padding on fit
+ });
+ });
+
+ $("a#image_link").click(function(e) {
+ var pngData = cy.png();
+
+ $(this).attr('href', pngData);
+ $(this).attr('download', 'network_graph.png');
+
+ console.log("TESTING:", image_link)
+
+ });
+
+
+};
+
+
diff --git a/gn2/wqflask/static/new/javascript/curvechart.js b/gn2/wqflask/static/new/javascript/curvechart.js
new file mode 100644
index 00000000..48bf6bf3
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/curvechart.js
@@ -0,0 +1,353 @@
+// Generated by CoffeeScript 1.8.0
+var curvechart;
+
+curvechart = function() {
+ var axispos, chart, commonX, curvesSelect, height, margin, nxticks, nyticks, rectcolor, rotate_ylab, strokecolor, strokecolorhilit, strokewidth, strokewidthhilit, title, titlepos, width, xlab, xlim, xscale, xticks, ylab, ylim, yscale, yticks;
+ width = 800;
+ height = 500;
+ margin = {
+ left: 60,
+ top: 40,
+ right: 40,
+ bottom: 40,
+ inner: 5
+ };
+ axispos = {
+ xtitle: 25,
+ ytitle: 30,
+ xlabel: 5,
+ ylabel: 5
+ };
+ titlepos = 20;
+ xlim = null;
+ ylim = null;
+ nxticks = 5;
+ xticks = null;
+ nyticks = 5;
+ yticks = null;
+ rectcolor = "#e6e6e6";
+ strokecolor = null;
+ strokecolorhilit = null;
+ strokewidth = 2;
+ strokewidthhilit = 2;
+ title = "";
+ xlab = "X";
+ ylab = "Y";
+ rotate_ylab = null;
+ yscale = d3.scale.linear();
+ xscale = d3.scale.linear();
+ curvesSelect = null;
+ commonX = true;
+ chart = function(selection) {
+ return selection.each(function(data) {
+ var curve, curves, g, gEnter, group, i, indID, indtip, j, lastpoint, ngroup, points, pointsg, svg, titlegrp, tmp, v, xaxis, xrange, xs, yaxis, yrange, ys, _i, _j, _len, _ref, _ref1, _ref2, _ref3, _results;
+ indID = (_ref = data != null ? data.indID : void 0) != null ? _ref : null;
+ indID = indID != null ? indID : (function() {
+ _results = [];
+ for (var _i = 1, _ref1 = data.data.length; 1 <= _ref1 ? _i <= _ref1 : _i >= _ref1; 1 <= _ref1 ? _i++ : _i--){ _results.push(_i); }
+ return _results;
+ }).apply(this);
+ group = (_ref2 = data != null ? data.group : void 0) != null ? _ref2 : (function() {
+ var _results1;
+ _results1 = [];
+ for (i in data.data) {
+ _results1.push(1);
+ }
+ return _results1;
+ })();
+ ngroup = d3.max(group);
+ group = (function() {
+ var _j, _len, _results1;
+ _results1 = [];
+ for (_j = 0, _len = group.length; _j < _len; _j++) {
+ g = group[_j];
+ _results1.push(g - 1);
+ }
+ return _results1;
+ })();
+ strokecolor = strokecolor != null ? strokecolor : selectGroupColors(ngroup, "pastel");
+ strokecolor = expand2vector(strokecolor, ngroup);
+ strokecolorhilit = strokecolorhilit != null ? strokecolorhilit : selectGroupColors(ngroup, "dark");
+ strokecolorhilit = expand2vector(strokecolorhilit, ngroup);
+ if (commonX) {
+ data = (function() {
+ var _results1;
+ _results1 = [];
+ for (i in data.data) {
+ _results1.push({
+ x: data.x,
+ y: data.data[i]
+ });
+ }
+ return _results1;
+ })();
+ } else {
+ data = data.data;
+ }
+ xlim = xlim != null ? xlim : d3.extent(pullVarAsArray(data, "x"));
+ ylim = ylim != null ? ylim : d3.extent(pullVarAsArray(data, "y"));
+ for (i in data) {
+ tmp = data[i];
+ data[i] = [];
+ for (j in tmp.x) {
+ if (!((tmp.x[j] == null) || (tmp.y[j] == null))) {
+ data[i].push({
+ x: tmp.x[j],
+ y: tmp.y[j]
+ });
+ }
+ }
+ }
+ svg = d3.select(this).selectAll("svg").data([data]);
+ gEnter = svg.enter().append("svg").append("g");
+ svg.attr("width", width + margin.left + margin.right).attr("height", height + margin.top + margin.bottom);
+ g = svg.select("g");
+ g.append("rect").attr("x", margin.left).attr("y", margin.top).attr("height", height).attr("width", width).attr("fill", rectcolor).attr("stroke", "none");
+ xrange = [margin.left + margin.inner, margin.left + width - margin.inner];
+ yrange = [margin.top + height - margin.inner, margin.top + margin.inner];
+ xscale.domain(xlim).range(xrange);
+ yscale.domain(ylim).range(yrange);
+ xs = d3.scale.linear().domain(xlim).range(xrange);
+ ys = d3.scale.linear().domain(ylim).range(yrange);
+ yticks = yticks != null ? yticks : ys.ticks(nyticks);
+ xticks = xticks != null ? xticks : xs.ticks(nxticks);
+ titlegrp = g.append("g").attr("class", "title").append("text").attr("x", margin.left + width / 2).attr("y", margin.top - titlepos).text(title);
+ xaxis = g.append("g").attr("class", "x axis");
+ xaxis.selectAll("empty").data(xticks).enter().append("line").attr("x1", function(d) {
+ return xscale(d);
+ }).attr("x2", function(d) {
+ return xscale(d);
+ }).attr("y1", margin.top).attr("y2", margin.top + height).attr("fill", "none").attr("stroke", "white").attr("stroke-width", 1).style("pointer-events", "none");
+ xaxis.selectAll("empty").data(xticks).enter().append("text").attr("x", function(d) {
+ return xscale(d);
+ }).attr("y", margin.top + height + axispos.xlabel).text(function(d) {
+ return formatAxis(xticks)(d);
+ });
+ xaxis.append("text").attr("class", "title").attr("x", margin.left + width / 2).attr("y", margin.top + height + axispos.xtitle).text(xlab);
+ rotate_ylab = rotate_ylab != null ? rotate_ylab : ylab.length > 1;
+ yaxis = g.append("g").attr("class", "y axis");
+ yaxis.selectAll("empty").data(yticks).enter().append("line").attr("y1", function(d) {
+ return yscale(d);
+ }).attr("y2", function(d) {
+ return yscale(d);
+ }).attr("x1", margin.left).attr("x2", margin.left + width).attr("fill", "none").attr("stroke", "white").attr("stroke-width", 1).style("pointer-events", "none");
+ yaxis.selectAll("empty").data(yticks).enter().append("text").attr("y", function(d) {
+ return yscale(d);
+ }).attr("x", margin.left - axispos.ylabel).text(function(d) {
+ return formatAxis(yticks)(d);
+ });
+ yaxis.append("text").attr("class", "title").attr("y", margin.top + height / 2).attr("x", margin.left - axispos.ytitle).text(ylab).attr("transform", rotate_ylab ? "rotate(270," + (margin.left - axispos.ytitle) + "," + (margin.top + height / 2) + ")" : "");
+ indtip = d3.tip().attr('class', 'd3-tip').html(function(d) {
+ return indID[d];
+ }).direction('e').offset([0, 10]);
+ svg.call(indtip);
+ curve = d3.svg.line().x(function(d) {
+ return xscale(d.x);
+ }).y(function(d) {
+ return yscale(d.y);
+ });
+ curves = g.append("g").attr("id", "curves");
+ curvesSelect = curves.selectAll("empty").data(d3.range(data.length)).enter().append("path").datum(function(d) {
+ return data[d];
+ }).attr("d", curve).attr("class", function(d, i) {
+ return "path" + i;
+ }).attr("fill", "none").attr("stroke", function(d, i) {
+ return strokecolor[group[i]];
+ }).attr("stroke-width", strokewidth).on("mouseover.panel", function(d, i) {
+ var circle;
+ d3.select(this).attr("stroke", strokecolorhilit[group[i]]).moveToFront();
+ circle = d3.select("circle#hiddenpoint" + i);
+ return indtip.show(i, circle.node());
+ }).on("mouseout.panel", function(d, i) {
+ d3.select(this).attr("stroke", strokecolor[group[i]]).moveToBack();
+ return indtip.hide();
+ });
+ lastpoint = (function() {
+ var _results1;
+ _results1 = [];
+ for (i in data) {
+ _results1.push({
+ x: null,
+ y: null
+ });
+ }
+ return _results1;
+ })();
+ for (i in data) {
+ _ref3 = data[i];
+ for (_j = 0, _len = _ref3.length; _j < _len; _j++) {
+ v = _ref3[_j];
+ if ((v.x != null) && (v.y != null)) {
+ lastpoint[i] = v;
+ }
+ }
+ }
+ pointsg = g.append("g").attr("id", "invisiblepoints");
+ points = pointsg.selectAll("empty").data(lastpoint).enter().append("circle").attr("id", function(d, i) {
+ return "hiddenpoint" + i;
+ }).attr("cx", function(d) {
+ return xscale(d.x);
+ }).attr("cy", function(d) {
+ return yscale(d.y);
+ }).attr("r", 1).attr("opacity", 0);
+ return g.append("rect").attr("x", margin.left).attr("y", margin.top).attr("height", height).attr("width", width).attr("fill", "none").attr("stroke", "black").attr("stroke-width", "none");
+ });
+ };
+ chart.width = function(value) {
+ if (!arguments.length) {
+ return width;
+ }
+ width = value;
+ return chart;
+ };
+ chart.height = function(value) {
+ if (!arguments.length) {
+ return height;
+ }
+ height = value;
+ return chart;
+ };
+ chart.margin = function(value) {
+ if (!arguments.length) {
+ return margin;
+ }
+ margin = value;
+ return chart;
+ };
+ chart.axispos = function(value) {
+ if (!arguments.length) {
+ return axispos;
+ }
+ axispos = value;
+ return chart;
+ };
+ chart.titlepos = function(value) {
+ if (!arguments.length) {
+ return titlepos;
+ }
+ titlepos;
+ return chart;
+ };
+ chart.xlim = function(value) {
+ if (!arguments.length) {
+ return xlim;
+ }
+ xlim = value;
+ return chart;
+ };
+ chart.nxticks = function(value) {
+ if (!arguments.length) {
+ return nxticks;
+ }
+ nxticks = value;
+ return chart;
+ };
+ chart.xticks = function(value) {
+ if (!arguments.length) {
+ return xticks;
+ }
+ xticks = value;
+ return chart;
+ };
+ chart.ylim = function(value) {
+ if (!arguments.length) {
+ return ylim;
+ }
+ ylim = value;
+ return chart;
+ };
+ chart.nyticks = function(value) {
+ if (!arguments.length) {
+ return nyticks;
+ }
+ nyticks = value;
+ return chart;
+ };
+ chart.yticks = function(value) {
+ if (!arguments.length) {
+ return yticks;
+ }
+ yticks = value;
+ return chart;
+ };
+ chart.rectcolor = function(value) {
+ if (!arguments.length) {
+ return rectcolor;
+ }
+ rectcolor = value;
+ return chart;
+ };
+ chart.strokecolor = function(value) {
+ if (!arguments.length) {
+ return strokecolor;
+ }
+ strokecolor = value;
+ return chart;
+ };
+ chart.strokecolorhilit = function(value) {
+ if (!arguments.length) {
+ return strokecolorhilit;
+ }
+ strokecolorhilit = value;
+ return chart;
+ };
+ chart.strokewidth = function(value) {
+ if (!arguments.length) {
+ return strokewidth;
+ }
+ strokewidth = value;
+ return chart;
+ };
+ chart.strokewidthhilit = function(value) {
+ if (!arguments.length) {
+ return strokewidthhilit;
+ }
+ strokewidthhilit = value;
+ return chart;
+ };
+ chart.commonX = function(value) {
+ if (!arguments.length) {
+ return commonX;
+ }
+ commonX = value;
+ return chart;
+ };
+ chart.title = function(value) {
+ if (!arguments.length) {
+ return title;
+ }
+ title = value;
+ return chart;
+ };
+ chart.xlab = function(value) {
+ if (!arguments.length) {
+ return xlab;
+ }
+ xlab = value;
+ return chart;
+ };
+ chart.ylab = function(value) {
+ if (!arguments.length) {
+ return ylab;
+ }
+ ylab = value;
+ return chart;
+ };
+ chart.rotate_ylab = function(value) {
+ if (!arguments.length) {
+ return rotate_ylab;
+ }
+ rotate_ylab = value;
+ return chart;
+ };
+ chart.yscale = function() {
+ return yscale;
+ };
+ chart.xscale = function() {
+ return xscale;
+ };
+ chart.curvesSelect = function() {
+ return curvesSelect;
+ };
+ return chart;
+};
diff --git a/gn2/wqflask/static/new/javascript/d3panels.min.js b/gn2/wqflask/static/new/javascript/d3panels.min.js
new file mode 100644
index 00000000..dfc10643
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/d3panels.min.js
@@ -0,0 +1 @@
+!function(){var d3panels={version:"1.7.1"};"use strict";d3panels.formatAxis=function(d){var extra_digits=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;var gap,ndig;if(d[0]!=null){gap=d[1]-d[0]}else if(d.length>2){gap=d[2]-d[1]}else{gap=d[1]}ndig=Math.floor(d3panels.log10(Math.abs(gap)));if(ndig>0){ndig=0}ndig=Math.abs(ndig)+extra_digits;return function(val){if(val!=null&&val!=="NA"){return d3.format("."+ndig+"f")(val)}return"NA"}};d3panels.unique=function(x){var k,len,output,v;output={};for(k=0,len=x.length;k<len;k++){v=x[k];if(v!=null){output[v]=v}}output=function(){var results;results=[];for(v in output){results.push(output[v])}return results}();return d3panels.forceAsArray(output)};d3panels.pullVarAsArray=function(data,variable){var i,results;results=[];for(i in data){results.push(data[i][variable])}return results};d3panels.reorgByChr=function(uniquechr,chr,vector){var c,i,k,len,result;if(chr.length!==vector.length){d3panels.displayError("reorgByChr: chr.length ("+chr.length+") != vector.length ("+vector.length+")")}result={};for(i=k=0,len=uniquechr.length;k<len;i=++k){c=uniquechr[i];result[c]=function(){var results;results=[];for(i in vector){if(chr[i]===c){results.push(vector[i])}}return results}()}return result};d3panels.reorgLodData=function(data){var i;data.posByChr=d3panels.reorgByChr(data.chrname,data.chr,data.pos);data.lodByChr=d3panels.reorgByChr(data.chrname,data.chr,data.lod);if(data.poslabel!=null){data.poslabelByChr=d3panels.reorgByChr(data.chrname,data.chr,data.poslabel)}if(data.marker!=null){data.markerinfo=function(){var results;results=[];for(i in data.marker){if(data.marker[i]!==""){results.push({name:data.marker[i],chr:data.chr[i],pos:data.pos[i],lod:data.lod[i]})}}return results}()}return data};d3panels.calc_chrscales=function(plot_width,left_margin,gap,chr,start,end){var reverse=arguments.length>6&&arguments[6]!==undefined?arguments[6]:false;var chr_end_pixels,chr_length,chr_start_pixels,domain,i,k,n_chr,range,ref,right,tot_chr_length,tot_pixels,xscale;n_chr=chr.length;chr_length=function(){var results;results=[];for(i in end){results.push(end[i]-start[i])}return results}();tot_chr_length=chr_length.reduce(function(t,s){return t+s});tot_pixels=plot_width-gap*n_chr;chr_start_pixels=[left_margin+gap/2];chr_end_pixels=[left_margin+gap/2+tot_pixels/tot_chr_length*chr_length[0]];for(i=k=1,ref=n_chr-1;1<=ref?k<=ref:k>=ref;i=1<=ref?++k:--k){chr_start_pixels.push(chr_end_pixels[i-1]+gap);chr_end_pixels.push(chr_start_pixels[i]+tot_pixels/tot_chr_length*chr_length[i])}right=plot_width+left_margin*2;xscale={};for(i in chr){domain=[start[i],end[i]];range=[chr_start_pixels[i],chr_end_pixels[i]];if(reverse){domain.reverse();range=[right-range[1],right-range[0]]}xscale[chr[i]]=d3.scaleLinear().domain(domain).range(range)}return xscale};d3panels.selectGroupColors=function(ngroup,palette){var cat20,pastel1,pastel20,set1;if(ngroup===0){return[]}set1=["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999999"];pastel1=["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"];cat20=["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"];pastel20=["#8fc7f4","#fed7f8","#ffbf8e","#fffbb8","#8ce08c","#d8ffca","#f68788","#ffd8d6","#d4a7fd","#f5f0f5","#cc968b","#f4dcd4","#f3b7f2","#f7f6f2","#bfbfbf","#f7f7f7","#fcfd82","#fbfbcd","#87feff","#defaf5"];if(palette==="dark"){if(ngroup===1){return["slateblue"]}if(ngroup===2){return["MediumVioletRed","slateblue"]}if(ngroup===3){return["MediumVioletRed","MediumSeaGreen","slateblue"]}if(ngroup<=9){return set1.slice(0,ngroup)}return cat20.slice(0,ngroup)}else{if(ngroup===1){return["#bebebe"]}if(ngroup===2){return["lightpink","lightblue"]}if(ngroup<=9){return pastel1.slice(0,ngroup)}return pastel20.slice(0,ngroup)}};d3panels.expand2vector=function(input,n){var i;if(input==null){return input}if(Array.isArray(input)&&input.length>=n){return input}if(!Array.isArray(input)){input=[input]}if(input.length>1&&n>1){input=function(){var results;results=[];for(i in d3.range(n)){results.push(input[i%input.length])}return results}()}if(input.length===1&&n>1){input=function(){var results;results=[];for(i in d3.range(n)){results.push(input[0])}return results}()}return input};d3panels.median=function(x){var n,xv;if(x==null){return null}x=function(){var k,len,results;results=[];for(k=0,len=x.length;k<len;k++){xv=x[k];if(xv!=null){results.push(xv)}}return results}();n=x.length;if(!(n>0)){return null}x.sort(function(a,b){return a-b});if(n%2===1){return x[(n-1)/2]}return(x[n/2]+x[n/2-1])/2};d3panels.pad_vector=function(x){var pad=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;if(pad==null){return[x[0]-(x[1]-x[0])].concat(x).concat([x[x.length-1]+(x[x.length-1]-x[x.length-2])])}return[x[0]-pad].concat(x).concat(x[x.length-1]+pad)};d3panels.calc_midpoints=function(x){var i,k,ref,results;results=[];for(i=k=0,ref=x.length-2;0<=ref?k<=ref:k>=ref;i=0<=ref?++k:--k){results.push((x[i]+x[i+1])/2)}return results};d3panels.calc_cell_rect=function(cells,xmid,ymid){var bottom,cell,k,left,len,results,right,top;results=[];for(k=0,len=cells.length;k<len;k++){cell=cells[k];left=xmid[cell.xindex];right=xmid[1+cell.xindex];top=ymid[cell.yindex];bottom=ymid[1+cell.yindex];cell.left=d3.min([left,right]);cell.width=Math.abs(right-left);cell.top=d3.min([top,bottom]);results.push(cell.height=Math.abs(bottom-top))}return results};d3panels.calc_chrcell_rect=function(cells,xmid,ymid){var bottom,cell,k,left,len,results,right,top;results=[];for(k=0,len=cells.length;k<len;k++){cell=cells[k];left=xmid[cell.chr][cell.posindex];right=xmid[cell.chr][1+cell.posindex];top=ymid[cell.lodindex];bottom=ymid[1+cell.lodindex];cell.left=d3.min([left,right]);cell.width=Math.abs(right-left);cell.top=d3.min([top,bottom]);results.push(cell.height=Math.abs(bottom-top))}return results};d3panels.calc_2dchrcell_rect=function(cells,xmid,ymid){var bottom,cell,k,left,len,results,right,top;results=[];for(k=0,len=cells.length;k<len;k++){cell=cells[k];left=xmid[cell.chrx][cell.xindexByChr];right=xmid[cell.chrx][1+cell.xindexByChr];top=ymid[cell.chry][cell.yindexByChr];bottom=ymid[cell.chry][1+cell.yindexByChr];cell.left=d3.min([left,right]);cell.width=Math.abs(right-left);cell.top=d3.min([top,bottom]);results.push(cell.height=Math.abs(bottom-top))}return results};d3panels.maxdiff=function(x){var d,i,k,ref,result;if(x.length<2){return null}result=x[1]-x[0];if(x.length<3){return result}for(i=k=2,ref=x.length;2<=ref?k<ref:k>ref;i=2<=ref?++k:--k){d=x[i]-x[i-1];if(d>result){result=d}}return result};d3panels.matrixMin=function(mat){var i,j,result;result=mat[0][0];for(i in mat){for(j in mat[i]){if(!(result!=null)||result>mat[i][j]&&mat[i][j]!=null){result=mat[i][j]}}}return result};d3panels.matrixMax=function(mat){var i,j,result;result=mat[0][0];for(i in mat){for(j in mat[i]){if(!(result!=null)||result<mat[i][j]&&mat[i][j]!=null){result=mat[i][j]}}}return result};d3panels.matrixMaxAbs=function(mat){var i,j,result;result=Math.abs(mat[0][0]);for(i in mat){for(j in mat[i]){if(!(result!=null)||result<Math.abs(mat[i][j])&&mat[i][j]!=null){result=Math.abs(mat[i][j])}}}return result};d3panels.matrixExtent=function(mat){return[d3panels.matrixMin(mat),d3panels.matrixMax(mat)]};d3panels.forceAsArray=function(x){if(x==null){return x}if(Array.isArray(x)){return x}return[x]};d3panels.missing2null=function(vec){var missingvalues=arguments.length>1&&arguments[1]!==undefined?arguments[1]:["NA",""];return vec.map(function(value){if(missingvalues.indexOf(value)>-1){return null}else{return value}})};d3panels.displayError=function(message){var divid=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;var div;div="div.error";if(divid!=null){div+="#"+divid}if(d3.select(div).empty()){d3.select("body").insert("div",":first-child").attr("class","error")}return d3.select(div).append("p").text(message)};d3panels.sumArray=function(vec){var x;vec=function(){var k,len,results;results=[];for(k=0,len=vec.length;k<len;k++){x=vec[k];if(x!=null){results.push(x)}}return results}();if(!(vec.length>0)){return null}return vec.reduce(function(a,b){return a*1+b*1})};d3panels.calc_crosstab=function(data){var col,cs,i,k,l,ncol,nrow,ref,ref1,result,row,rs;nrow=data.ycat.length;ncol=data.xcat.length;result=function(){var k,ref,results;results=[];for(row=k=0,ref=nrow;0<=ref?k<=ref:k>=ref;row=0<=ref?++k:--k){results.push(function(){var l,ref1,results1;results1=[];for(col=l=0,ref1=ncol;0<=ref1?l<=ref1:l>=ref1;col=0<=ref1?++l:--l){results1.push(0)}return results1}())}return results}();for(i in data.x){result[data.y[i]][data.x[i]]+=1}rs=d3panels.rowSums(result);cs=d3panels.colSums(result);for(i=k=0,ref=ncol;0<=ref?k<ref:k>ref;i=0<=ref?++k:--k){result[nrow][i]=cs[i]}for(i=l=0,ref1=nrow;0<=ref1?l<ref1:l>ref1;i=0<=ref1?++l:--l){result[i][ncol]=rs[i]}result[nrow][ncol]=d3panels.sumArray(rs);return result};d3panels.rowSums=function(mat){var k,len,results,x;results=[];for(k=0,len=mat.length;k<len;k++){x=mat[k];results.push(d3panels.sumArray(x))}return results};d3panels.transpose=function(mat){var i,j,k,ref,results;results=[];for(j=k=0,ref=mat[0].length;0<=ref?k<ref:k>ref;j=0<=ref?++k:--k){results.push(function(){var l,ref1,results1;results1=[];for(i=l=0,ref1=mat.length;0<=ref1?l<ref1:l>ref1;i=0<=ref1?++l:--l){results1.push(mat[i][j])}return results1}())}return results};d3panels.colSums=function(mat){return d3panels.rowSums(d3panels.transpose(mat))};d3panels.log2=function(x){if(x==null){return x}return Math.log(x)/Math.log(2)};d3panels.log10=function(x){if(x==null){return x}return Math.log(x)/Math.log(10)};d3panels.abs=function(x){if(x==null){return x}return Math.abs(x)};d3panels.mean_by_group=function(g,y){var i,means,n;means={};n={};for(i in g){if(n[g[i]]!=null){if(y[i]!=null){means[g[i]]+=y[i]}if(y[i]!=null){n[g[i]]+=1}}else{if(y[i]!=null){means[g[i]]=y[i]}if(y[i]!=null){n[g[i]]=1}}}for(i in means){means[i]/=n[i]}return means};d3panels.sd_by_group=function(g,y){var dev,i,means,n,sds;means=d3panels.mean_by_group(g,y);sds={};n={};for(i in g){dev=y[i]-means[g[i]];if(n[g[i]]!=null){if(y[i]!=null){sds[g[i]]+=dev*dev}if(y[i]!=null){n[g[i]]+=1}}else{if(y[i]!=null){sds[g[i]]=dev*dev}if(y[i]!=null){n[g[i]]=1}}}for(i in sds){sds[i]=n[i]<2?null:Math.sqrt(sds[i]/(n[i]-1))}return sds};d3panels.count_groups=function(g,y){var i,n;n={};for(i in g){if(n[g[i]]!=null){if(y[i]!=null){n[g[i]]+=1}}else{if(y[i]!=null){n[g[i]]=1}}}return n};d3panels.ci_by_group=function(g,y){var m=arguments.length>2&&arguments[2]!==undefined?arguments[2]:2;var ci,dev,i,means,n,sds;means=d3panels.mean_by_group(g,y);sds={};n={};for(i in g){dev=y[i]-means[g[i]];if(n[g[i]]!=null){if(y[i]!=null){sds[g[i]]+=dev*dev}if(y[i]!=null){n[g[i]]+=1}}else{if(y[i]!=null){sds[g[i]]=dev*dev}if(y[i]!=null){n[g[i]]=1}}}for(i in sds){sds[i]=n[i]<2?null:Math.sqrt(sds[i]/(n[i]-1))}ci={};for(i in means){ci[i]={mean:means[i],low:n[i]>0?means[i]-m*sds[i]/Math.sqrt(n[i]):means[i],high:n[i]>0?means[i]+m*sds[i]/Math.sqrt(n[i]):means[i]}}return ci};d3panels.pad_ylim=function(ylim){var p=arguments.length>1&&arguments[1]!==undefined?arguments[1]:.025;var d;d=ylim[1]-ylim[0];return[ylim[0]-d*p,ylim[1]+d*p]};d3panels.add_chrname_start_end=function(data){var c,i,k,l,len,len1,ref,ref1,these_pos;if(data.chrname==null){data.chrname=d3panels.unique(data.chr)}data.chrname=d3panels.forceAsArray(data.chrname);if(data.chrstart==null){data.chrstart=[];ref=data.chrname;for(k=0,len=ref.length;k<len;k++){c=ref[k];these_pos=function(){var results;results=[];for(i in data.chr){if(data.chr[i]===c){results.push(data.pos[i])}}return results}();data.chrstart.push(d3.min(these_pos))}}if(data.chrend==null){data.chrend=[];ref1=data.chrname;for(l=0,len1=ref1.length;l<len1;l++){c=ref1[l];these_pos=function(){var results;results=[];for(i in data.chr){if(data.chr[i]===c){results.push(data.pos[i])}}return results}();data.chrend.push(d3.max(these_pos))}}data.start=d3panels.forceAsArray(data.start);data.end=d3panels.forceAsArray(data.end);return data};d3panels.calc_breaks=function(number,low,high){var d,i,results;if(low>=high){d3panels.displayError("calc_breaks: should have low < high");if(low>high){var _ref=[high,low];low=_ref[0];high=_ref[1]}if(low===high){low-=.5;high+=.5}}if(number<2){d3panels.displayError("calc_breaks: number should be >= 2");number=2}d=(high-low)/(number-1);results=[];for(i in d3.range(number)){results.push(low+d*i)}return results};d3panels.calc_freq=function(values,breaks){var return_counts=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;var br,i,k,len,n,ref,result,v,z;v=values.slice(0);v.sort(function(a,b){return+a-b});br=breaks.slice(0);br.sort(function(a,b){return+a-b});br[0]-=1e-6;br[br.length-1]+=1e-6;result=function(){var k,len,ref,results;ref=d3.range(br.length-1);results=[];for(k=0,len=ref.length;k<len;k++){i=ref[k];results.push(0)}return results}();n=v.length;v=function(){var k,len,results;results=[];for(k=0,len=v.length;k<len;k++){z=v[k];if(z>br[0]&&z<br[br.length-1]){results.push(z)}}return results}();if(v.length<n){d3panels.displayError("calc_freq: values out of range of breaks")}n=v.length;ref=d3.range(br.length-1);for(k=0,len=ref.length;k<len;k++){i=ref[k];result[i]=function(){var l,len1,results;results=[];for(l=0,len1=v.length;l<len1;l++){z=v[l];if(z>=br[i]&&z<br[i+1]){results.push(z)}}return results}().length;if(!return_counts){result[i]/=n*(br[i+1]-br[i])}}return result};d3panels.calc_hist_path=function(freq,breaks){var i,result;if(freq.length!==breaks.length-1){d3panels.displayError("freq.length ("+freq.length+") should be breaks.length - 1 ("+(breaks.length-1)+")")}result=[{x:breaks[0],y:0}];for(i in freq){result.push({x:breaks[i],y:freq[i]});result.push({x:breaks[+i+1],y:freq[i]})}result.push({x:breaks[breaks.length-1],y:0});return result};d3panels.index_of_nearest=function(d,vec){var abs_diff;abs_diff=vec.map(function(val){return Math.abs(val-d)});return abs_diff.indexOf(d3.min(abs_diff))};d3panels.check_listarg_v_default=function(arg,defaults){var key;for(key in defaults){if(arg[key]==null){arg[key]=defaults[key]}}return arg};d3panels.object_position=function(object){var obj,x,y;obj=object.node().getBoundingClientRect();x=obj.left/2+obj.right/2;y=obj.top/2+obj.bottom/2;return{x:x,y:y}};"use strict";d3panels.lod2dheatmap=function(chartOpts){var cellSelect,cells,celltip,chart,chrGap,colors,equalCells,height,hilitcolor,margin,nullcolor,oneAtTop,ref,ref1,ref10,ref11,ref2,ref3,ref4,ref5,ref6,ref7,ref8,ref9,svg,tipclass,width,xscale,yscale,zlim,zscale,zthresh;if(chartOpts==null){chartOpts={}}width=(ref=chartOpts!=null?chartOpts.width:void 0)!=null?ref:800;height=(ref1=chartOpts!=null?chartOpts.height:void 0)!=null?ref1:800;margin=(ref2=chartOpts!=null?chartOpts.margin:void 0)!=null?ref2:{left:60,top:40,right:40,bottom:60};chrGap=(ref3=chartOpts!=null?chartOpts.chrGap:void 0)!=null?ref3:6;equalCells=(ref4=chartOpts!=null?chartOpts.equalCells:void 0)!=null?ref4:false;oneAtTop=(ref5=chartOpts!=null?chartOpts.oneAtTop:void 0)!=null?ref5:false;colors=(ref6=chartOpts!=null?chartOpts.colors:void 0)!=null?ref6:["slateblue","white","crimson"];nullcolor=(ref7=chartOpts!=null?chartOpts.nullcolor:void 0)!=null?ref7:"#e6e6e6";zlim=(ref8=chartOpts!=null?chartOpts.zlim:void 0)!=null?ref8:null;zthresh=(ref9=chartOpts!=null?chartOpts.zthresh:void 0)!=null?ref9:null;hilitcolor=(ref10=chartOpts!=null?chartOpts.hilitcolor:void 0)!=null?ref10:"black";tipclass=(ref11=chartOpts!=null?chartOpts.tipclass:void 0)!=null?ref11:"tooltip";xscale=null;yscale=null;zscale=null;celltip=null;cells=null;svg=null;cellSelect=null;chart=function chart(selection,data){var cellg,chr,i,indexWithinChr,j,k,l,len,len1,len2,m,myframe,n_pos,posByChr,ref12,ref13,ref14,tooltipfunc,x,xmid_scaled,y,ymid_scaled,zmax,zmin;margin=d3panels.check_listarg_v_default(margin,{left:60,top:40,right:40,bottom:60});if(data.chr==null){d3panels.displayError("lod2dheatmap: data.chr is missing")}if(data.pos==null){d3panels.displayError("lod2dheatmap: data.pos is missing")}if(data.lod==null){d3panels.displayError("lod2dheatmap: data.lod is missing")}n_pos=data.chr.length;if(data.pos.length!==n_pos){d3panels.displayError("lod2dheatmap: data.pos.length ("+data.pos.length+") != data.chr.length ("+n_pos+")")}if(data.lod.length!==n_pos){d3panels.displayError("lod2dheatmap: data.lod.length ("+data.lod.length+") != data.chr.length ("+n_pos+")")}for(i in data.lod){if(data.lod[i].length!==n_pos){d3panels.displayError("lod2dheatmap: data.lod["+i+"].length ("+data.lod[i].length+") != data.chr.length ("+n_pos+")")}}if(data.poslabel!=null){if(data.poslabel.length!==n_pos){d3panels.displayError("lod2dheatmap: data.poslabel.length ("+data.poslabel.length+") != data.chr.length ("+n_pos+")")}}else{data.poslabel=function(){var results;results=[];for(i in data.chr){results.push(data.chr[i]+"@"+d3panels.formatAxis(data.pos)(data.pos[i]))}return results}()}if(data.chrname==null){data.chrname=d3panels.unique(data.chr)}data.chrname=d3panels.forceAsArray(data.chrname);if(equalCells){data.pos=[];ref12=data.chrname;for(k=0,len=ref12.length;k<len;k++){chr=ref12[k];data.pos=data.pos.concat(function(){var results;results=[];for(i in data.chr){if(data.chr[i]===chr){results.push(+i)}}return results}())}}data=d3panels.add_chrname_start_end(data);if(equalCells){chrGap=(width-margin.left-margin.right-2*data.chrname.length)/data.chr.length+2}chartOpts.chrGap=chrGap;chartOpts.width=width;chartOpts.height=height;chartOpts.margin=margin;myframe=d3panels.chr2dpanelframe(chartOpts);myframe(selection,{chr:data.chrname,start:data.chrstart,end:data.chrend});svg=myframe.svg();xscale=myframe.xscale();yscale=myframe.yscale();posByChr=d3panels.reorgByChr(data.chrname,data.chr,data.pos);xmid_scaled={};ymid_scaled={};ref13=data.chrname;for(l=0,len1=ref13.length;l<len1;l++){chr=ref13[l];xmid_scaled[chr]=d3panels.calc_midpoints(d3panels.pad_vector(function(){var len2,m,ref14,results;ref14=posByChr[chr];results=[];for(m=0,len2=ref14.length;m<len2;m++){x=ref14[m];results.push(xscale[chr](x))}return results}(),chrGap-2));ymid_scaled[chr]=d3panels.calc_midpoints(d3panels.pad_vector(function(){var len2,m,ref14,results;ref14=posByChr[chr];results=[];for(m=0,len2=ref14.length;m<len2;m++){y=ref14[m];results.push(yscale[chr](y))}return results}(),oneAtTop?chrGap-2:2-chrGap))}zmin=d3panels.matrixMin(data.lod);zmax=d3panels.matrixMaxAbs(data.lod);zlim=zlim!=null?zlim:[-zmax,0,zmax];if(zlim.length!==colors.length){d3panels.displayError("lod2dheatmap: zlim.length ("+zlim.length+") != colors.length ("+colors.length+")")}zscale=d3.scaleLinear().domain(zlim).range(colors);zthresh=zthresh!=null?zthresh:zmin-1;indexWithinChr=[];ref14=data.chrname;for(m=0,len2=ref14.length;m<len2;m++){chr=ref14[m];indexWithinChr=indexWithinChr.concat(function(){var results;results=[];for(i in posByChr[chr]){results.push(+i)}return results}())}cells=[];for(i in data.chr){for(j in data.chr){if(Math.abs(data.lod[i][j])>=zthresh){cells.push({lod:data.lod[i][j],chrx:data.chr[i],chry:data.chr[j],poslabelx:data.poslabel[i],poslabely:data.poslabel[j],xindex:i,yindex:j,xindexByChr:indexWithinChr[i],yindexByChr:indexWithinChr[j]})}}}d3panels.calc_2dchrcell_rect(cells,xmid_scaled,ymid_scaled);cellg=svg.append("g").attr("id","cells");cellSelect=cellg.selectAll("empty").data(cells).enter().append("rect").attr("x",function(d){return d.left}).attr("y",function(d){return d.top}).attr("width",function(d){return d.width}).attr("height",function(d){return d.height}).attr("class",function(d,i){return"cell"+i}).attr("fill",function(d){if(d.lod!=null){return zscale(d.lod)}else{return nullcolor}}).attr("stroke","none").attr("stroke-width","1").on("mouseover",function(d){return d3.select(this).attr("stroke",hilitcolor).raise()}).on("mouseout",function(){return d3.select(this).attr("stroke","none")});tooltipfunc=function tooltipfunc(d){var z;z=d3.format(".2f")(Math.abs(d.lod));return"("+d.poslabelx+","+d.poslabely+") &rarr; "+z};return celltip=d3panels.tooltip_create(d3.select("body"),cellg.selectAll("rect"),{tipclass:tipclass},tooltipfunc)};chart.xscale=function(){return xscale};chart.yscale=function(){return yscale};chart.zscale=function(){return zscale};chart.cells=function(){return cellSelect};chart.celltip=function(){return celltip};chart.svg=function(){return svg};chart.remove=function(){svg.remove();d3panels.tooltip_destroy(celltip);return null};return chart};"use strict";d3panels.panelframe=function(chartOpts){var axispos,box,boxcolor,boxwidth,chart,height,margin,nxticks,nyticks,plot_height,plot_width,rectcolor,ref,ref1,ref10,ref11,ref12,ref13,ref14,ref15,ref16,ref17,ref18,ref19,ref2,ref20,ref21,ref22,ref23,ref24,ref25,ref26,ref3,ref4,ref5,ref6,ref7,ref8,ref9,rotate_ylab,svg,title,titlepos,v_over_h,width,xNA,xNA_size,xlab,xlabels,xlim,xlineOpts,xlines,xscale,xscale_wnull,xticklab,xticks,yNA,yNA_size,ylab,ylabels,ylim,ylineOpts,ylines,yscale,yscale_wnull,yticklab,yticks;if(chartOpts==null){chartOpts={}}width=(ref=chartOpts!=null?chartOpts.width:void 0)!=null?ref:800;height=(ref1=chartOpts!=null?chartOpts.height:void 0)!=null?ref1:500;margin=(ref2=chartOpts!=null?chartOpts.margin:void 0)!=null?ref2:{left:60,top:40,right:40,bottom:40,inner:3};axispos=(ref3=chartOpts!=null?chartOpts.axispos:void 0)!=null?ref3:{xtitle:25,ytitle:45,xlabel:5,ylabel:5};titlepos=(ref4=chartOpts!=null?chartOpts.titlepos:void 0)!=null?ref4:20;title=(ref5=chartOpts!=null?chartOpts.title:void 0)!=null?ref5:"";xlab=(ref6=chartOpts!=null?chartOpts.xlab:void 0)!=null?ref6:"X";ylab=(ref7=chartOpts!=null?chartOpts.ylab:void 0)!=null?ref7:"Y";rotate_ylab=(ref8=chartOpts!=null?chartOpts.rotate_ylab:void 0)!=null?ref8:null;xNA=(ref9=chartOpts!=null?chartOpts.xNA:void 0)!=null?ref9:false;yNA=(ref10=chartOpts!=null?chartOpts.yNA:void 0)!=null?ref10:false;xNA_size=(ref11=chartOpts!=null?chartOpts.xNA_size:void 0)!=null?ref11:{width:20,gap:10};yNA_size=(ref12=chartOpts!=null?chartOpts.yNA_size:void 0)!=null?ref12:{width:20,gap:10};xlim=(ref13=chartOpts!=null?chartOpts.xlim:void 0)!=null?ref13:[0,1];ylim=(ref14=chartOpts!=null?chartOpts.ylim:void 0)!=null?ref14:[0,1];nxticks=(ref15=chartOpts!=null?chartOpts.nxticks:void 0)!=null?ref15:5;xticks=(ref16=chartOpts!=null?chartOpts.xticks:void 0)!=null?ref16:null;xticklab=(ref17=chartOpts!=null?chartOpts.xticklab:void 0)!=null?ref17:null;nyticks=(ref18=chartOpts!=null?chartOpts.nyticks:void 0)!=null?ref18:5;yticks=(ref19=chartOpts!=null?chartOpts.yticks:void 0)!=null?ref19:null;yticklab=(ref20=chartOpts!=null?chartOpts.yticklab:void 0)!=null?ref20:null;rectcolor=(ref21=chartOpts!=null?chartOpts.rectcolor:void 0)!=null?ref21:"#e6e6e6";boxcolor=(ref22=chartOpts!=null?chartOpts.boxcolor:void 0)!=null?ref22:"black";boxwidth=(ref23=chartOpts!=null?chartOpts.boxwidth:void 0)!=null?ref23:2;xlineOpts=(ref24=chartOpts!=null?chartOpts.xlineOpts:void 0)!=null?ref24:{color:"white",width:2};ylineOpts=(ref25=chartOpts!=null?chartOpts.ylineOpts:void 0)!=null?ref25:{color:"white",width:2};v_over_h=(ref26=chartOpts!=null?chartOpts.v_over_h:void 0)!=null?ref26:false;xscale=null;yscale=null;xNA=xNA;yNA=yNA;xlines=null;ylines=null;xlabels=null;ylabels=null;plot_width=null;plot_height=null;box=null;svg=null;xscale_wnull=null;yscale_wnull=null;chart=function chart(selection){var boxes,boxes2include,d,g,i,inner_height,inner_width,xNA_xpos,xaxis,xrange,yNA_ypos,yaxis,ylabpos_x,ylabpos_y,yrange;margin=d3panels.check_listarg_v_default(margin,{left:60,top:40,right:40,bottom:40,inner:3});axispos=d3panels.check_listarg_v_default(axispos,{xtitle:25,ytitle:45,xlabel:5,ylabel:5});xNA_size=d3panels.check_listarg_v_default(xNA_size,{width:20,gap:10});yNA_size=d3panels.check_listarg_v_default(yNA_size,{width:20,gap:10});xlineOpts=d3panels.check_listarg_v_default(xlineOpts,{color:"white",width:2});ylineOpts=d3panels.check_listarg_v_default(ylineOpts,{color:"white",width:2});svg=selection.append("svg");svg.attr("width",width).attr("height",height).attr("class","d3panels");g=svg.append("g").attr("id","frame");if(!xNA){xNA_size={width:0,gap:0}}if(!yNA){yNA_size={width:0,gap:0}}plot_width=width-(margin.left+margin.right);plot_height=height-(margin.top+margin.bottom);inner_width=width-(margin.right+margin.left+xNA_size.width+xNA_size.gap);inner_height=height-(margin.top+margin.bottom+yNA_size.width+yNA_size.gap);boxes={left:[margin.left+xNA_size.width+xNA_size.gap,margin.left,margin.left,margin.left+xNA_size.width+xNA_size.gap],width:[inner_width,xNA_size.width,xNA_size.width,inner_width],top:[margin.top,margin.top,height-(margin.bottom+yNA_size.width),height-(margin.bottom+yNA_size.width)],height:[inner_height,inner_height,yNA_size.width,yNA_size.width]};xNA_xpos=xNA?margin.left+xNA_size.width/2:-5e4;yNA_ypos=yNA?height-margin.bottom-yNA_size.width/2:-5e4;xrange=[boxes.left[0],boxes.left[0]+boxes.width[0]];yrange=[boxes.top[0]+boxes.height[0],boxes.top[0]];for(i in boxes.left){if(boxes.width[i]>0&&boxes.height[i]>0){g.append("rect").attr("x",boxes.left[i]).attr("y",boxes.top[i]).attr("height",boxes.height[i]).attr("width",boxes.width[i]).attr("fill",rectcolor).attr("stroke","none").attr("shape-rendering","crispEdges")}}g.append("g").attr("class","title").append("text").text(title).attr("x",(width-margin.left-margin.right)/2+margin.left).attr("y",titlepos);rotate_ylab=rotate_ylab!=null?rotate_ylab:ylab.length>1;if(v_over_h){yaxis=g.append("g").attr("class","y axis");xaxis=g.append("g").attr("class","x axis")}else{xaxis=g.append("g").attr("class","x axis");yaxis=g.append("g").attr("class","y axis")}xaxis.append("text").attr("class","title").text(xlab).attr("x",(width-margin.left-margin.right)/2+margin.left).attr("y",plot_height+margin.top+axispos.xtitle);ylabpos_y=(height-margin.top-margin.bottom)/2+margin.top;ylabpos_x=margin.left-axispos.ytitle;yaxis.append("text").attr("class","title").text(ylab).attr("y",ylabpos_y).attr("x",ylabpos_x).attr("transform",rotate_ylab?"rotate(270,"+ylabpos_x+","+ylabpos_y+")":"");xscale=d3.scaleLinear().domain(xlim).range([xrange[0]+margin.inner,xrange[1]-margin.inner]);yscale=d3.scaleLinear().domain(ylim).range([yrange[0]-margin.inner,yrange[1]+margin.inner]);xscale_wnull=function xscale_wnull(val){if(val==null){return xNA_xpos}return xscale(val)};yscale_wnull=function yscale_wnull(val){if(val==null){return yNA_ypos}return yscale(val)};xticks=xticks!=null?xticks:xscale.ticks(nxticks);if(xticklab!=null&&xticklab.length!==xticks.length){d3panels.displayError("panelframe: xticklab.length ("+xticklab.length+") != xticks.length ("+xticks.length+")")}if(!(xticklab!=null&&xticklab.length===xticks.length)){xticklab=function(){var j,len,results;results=[];for(j=0,len=xticks.length;j<len;j++){d=xticks[j];results.push(d3panels.formatAxis(xticks)(d))}return results}()}if(xNA){xticks=[null].concat(xticks)}if(xNA){xticklab=["NA"].concat(xticklab)}yticks=yticks!=null?yticks:yscale.ticks(nyticks);if(yticklab!=null&&yticklab.length!==yticks.length){d3panels.displayError("panelframe: yticklab.length ("+yticklab.length+") != yticks.length ("+yticks.length+")")}if(!(yticklab!=null&&yticklab.length===yticks.length)){yticklab=function(){var j,len,results;results=[];for(j=0,len=yticks.length;j<len;j++){d=yticks[j];results.push(d3panels.formatAxis(yticks)(d))}return results}()}if(yNA){yticks=[null].concat(yticks)}if(yNA){yticklab=["NA"].concat(yticklab)}ylines=yaxis.append("g").attr("id","ylines").selectAll("empty").data(yticks.concat(yticks)).enter().append("line").attr("y1",function(d){return yscale_wnull(d)}).attr("y2",function(d){return yscale_wnull(d)}).attr("x1",function(d,i){if(i<yticks.length){return xrange[0]}return margin.left}).attr("x2",function(d,i){if(i<yticks.length){return xrange[1]}return margin.left+xNA_size.width}).attr("fill","none").attr("stroke",ylineOpts.color).attr("stroke-width",ylineOpts.width).attr("shape-rendering","crispEdges").style("pointer-events","none");xlines=xaxis.append("g").attr("id","xlines").selectAll("empty").data(xticks.concat(xticks)).enter().append("line").attr("x1",function(d){return xscale_wnull(d)}).attr("x2",function(d){return xscale_wnull(d)}).attr("y1",function(d,i){if(i<xticks.length){return yrange[0]}return height-margin.bottom}).attr("y2",function(d,i){if(i<xticks.length){return yrange[1]}return height-margin.bottom-yNA_size.width}).attr("fill","none").attr("stroke",xlineOpts.color).attr("stroke-width",xlineOpts.width).attr("shape-rendering","crispEdges").style("pointer-events","none");xlabels=xaxis.append("g").attr("id","xlabels").selectAll("empty").data(xticklab).enter().append("text").attr("x",function(d,i){return xscale_wnull(xticks[i])}).attr("y",height-margin.bottom+axispos.xlabel).text(function(d){return d});ylabels=yaxis.append("g").attr("id","ylabels").selectAll("empty").data(yticklab).enter().append("text").attr("y",function(d,i){return yscale_wnull(yticks[i])}).attr("x",margin.left-axispos.ylabel).text(function(d){return d});boxes2include=function(){var results;results=[];for(i in boxes.left){if(boxes.width[i]>0&&boxes.height[i]>0){results.push(i)}}return results}();box=svg.append("g").attr("id","box");return box.selectAll("empty").data(boxes2include).enter().append("rect").attr("x",function(i){return boxes.left[i]}).attr("y",function(i){return boxes.top[i]}).attr("height",function(i){return boxes.height[i]}).attr("width",function(i){return boxes.width[i]}).attr("fill","none").attr("stroke",boxcolor).attr("stroke-width",boxwidth).attr("shape-rendering","crispEdges")};chart.xscale=function(){return xscale_wnull};chart.yscale=function(){return yscale_wnull};chart.xNA=function(){return xNA};chart.yNA=function(){return yNA};chart.xlines=function(){return xlines};chart.ylines=function(){return ylines};chart.xlabels=function(){return xlabels};chart.ylabels=function(){return ylabels};chart.plot_width=function(){return plot_width};chart.plot_height=function(){return plot_height};chart.width=function(){return width};chart.height=function(){return height};chart.margin=function(){return margin};chart.box=function(){return box};chart.svg=function(){return svg};chart.remove=function(){svg.remove();return null};return chart};"use strict";d3panels.chrpanelframe=function(chartOpts){var altrectcolor,axispos,box,boxcolor,boxwidth,chart,chrGap,chrSelect,chrlinecolor,chrlines,chrlinewidth,height,horizontal,margin,nyticks,rectcolor,ref,ref1,ref10,ref11,ref12,ref13,ref14,ref15,ref16,ref17,ref18,ref19,ref2,ref20,ref21,ref22,ref3,ref4,ref5,ref6,ref7,ref8,ref9,rotate_ylab,svg,title,titlepos,width,xlab,xlabels,xlineOpts,xscale,ylab,ylabels,ylim,ylineOpts,yscale,yticklab,yticks;if(chartOpts==null){chartOpts={}}width=(ref=chartOpts!=null?chartOpts.width:void 0)!=null?ref:800;height=(ref1=chartOpts!=null?chartOpts.height:void 0)!=null?ref1:500;margin=(ref2=chartOpts!=null?chartOpts.margin:void 0)!=null?ref2:{left:60,top:40,right:40,bottom:40};axispos=(ref3=chartOpts!=null?chartOpts.axispos:void 0)!=null?ref3:{xtitle:25,ytitle:45,xlabel:5,ylabel:5};titlepos=(ref4=chartOpts!=null?chartOpts.titlepos:void 0)!=null?ref4:20;title=(ref5=chartOpts!=null?chartOpts.title:void 0)!=null?ref5:"";xlab=(ref6=chartOpts!=null?chartOpts.xlab:void 0)!=null?ref6:null;ylab=(ref7=chartOpts!=null?chartOpts.ylab:void 0)!=null?ref7:"LOD score";rotate_ylab=(ref8=chartOpts!=null?chartOpts.rotate_ylab:void 0)!=null?ref8:null;ylim=(ref9=chartOpts!=null?chartOpts.ylim:void 0)!=null?ref9:[0,1];nyticks=(ref10=chartOpts!=null?chartOpts.nyticks:void 0)!=null?ref10:5;yticks=(ref11=chartOpts!=null?chartOpts.yticks:void 0)!=null?ref11:null;yticklab=(ref12=chartOpts!=null?chartOpts.yticklab:void 0)!=null?ref12:null;rectcolor=(ref13=chartOpts!=null?chartOpts.rectcolor:void 0)!=null?ref13:"#e6e6e6";altrectcolor=(ref14=chartOpts!=null?chartOpts.altrectcolor:void 0)!=null?ref14:"#d4d4d4";chrlinecolor=(ref15=chartOpts!=null?chartOpts.chrlinecolor:void 0)!=null?ref15:"";chrlinewidth=(ref16=chartOpts!=null?chartOpts.chrlinewidth:void 0)!=null?ref16:2;boxcolor=(ref17=chartOpts!=null?chartOpts.boxcolor:void 0)!=null?ref17:"black";boxwidth=(ref18=chartOpts!=null?chartOpts.boxwidth:void 0)!=null?ref18:2;xlineOpts=(ref19=chartOpts!=null?chartOpts.xlineOpts:void 0)!=null?ref19:{color:"#d4d4d4",width:2};ylineOpts=(ref20=chartOpts!=null?chartOpts.ylineOpts:void 0)!=null?ref20:{color:"white",width:2};chrGap=(ref21=chartOpts!=null?chartOpts.chrGap:void 0)!=null?ref21:6;horizontal=(ref22=chartOpts.horizontal)!=null?ref22:false;xscale=null;yscale=null;xlabels=null;ylabels=null;chrSelect=null;chrlines=null;box=null;svg=null;chart=function chart(selection,data){var c,d,g,plot_height,plot_width,thechr,xaxis,xlines,xticks,yaxis,ylabpos_x,ylabpos_y,ylines;margin=d3panels.check_listarg_v_default(margin,{left:60,top:40,right:40,bottom:60});axispos=d3panels.check_listarg_v_default(axispos,{xtitle:25,ytitle:45,xlabel:5,ylabel:5});xlineOpts=d3panels.check_listarg_v_default(xlineOpts,{color:"white",width:2});ylineOpts=d3panels.check_listarg_v_default(ylineOpts,{color:"white",width:2});if(data.chr==null){d3panels.displayError("chrpanelframe: data.chr is missing")}if(data.end==null){d3panels.displayError("chrpanelframe: data.end is missing")}if(xlab==null){xlab=data.chr.length===1?"Position":"Chromosome"}svg=selection.append("svg");svg.attr("width",width).attr("height",height).attr("class","d3panels");g=svg.append("g").attr("id","frame");plot_width=width-(margin.left+margin.right);plot_height=height-(margin.top+margin.bottom);if(!(data!=null?data.start:void 0)){data.start=function(){var j,len,ref23,results;ref23=data.chr;results=[];for(j=0,len=ref23.length;j<len;j++){c=ref23[j];results.push(0)}return results}()}if(data.chr.length!==data.start.length){d3panels.displayError("chrpanelframe: data.start.length ("+data.start.length+") != data.chr.length ("+data.chr.length+")")}if(data.chr.length!==data.end.length){d3panels.displayError("chrpanelframe: data.end.length ("+data.end.length+") != data.chr.length ("+data.chr.length+")")}if(horizontal){xscale=d3panels.calc_chrscales(plot_height,margin.top,chrGap,data.chr,data.start,data.end);yscale=d3.scaleLinear().domain(ylim.reverse()).range([plot_width+margin.left,margin.left])}else{xscale=d3panels.calc_chrscales(plot_width,margin.left,chrGap,data.chr,data.start,data.end);yscale=d3.scaleLinear().domain(ylim).range([plot_height+margin.top,margin.top])}g.append("rect").attr("x",margin.left).attr("width",plot_width).attr("y",margin.top).attr("height",plot_height).attr("fill",rectcolor).attr("shape-rendering","crispEdges");if(altrectcolor!==""){chrSelect=g.append("g").selectAll("empty").data(data.chr).enter().append("rect").attr("x",function(d,i){if(horizontal){return margin.left}return xscale[d](data.start[i])-chrGap/2}).attr("width",function(d,i){if(horizontal){return plot_width}return xscale[d](data.end[i])-xscale[d](data.start[i])+chrGap}).attr("y",function(d,i){if(horizontal){return xscale[d](data.start[i])-chrGap/2}return margin.top}).attr("height",function(d,i){if(horizontal){return xscale[d](data.end[i])-xscale[d](data.start[i])+chrGap}return plot_height}).attr("fill",function(d,i){if(i%2===0){return rectcolor}return altrectcolor}).attr("shape-rendering","crispEdges")}g.append("g").attr("class","title").append("text").text(title).attr("x",(width-margin.left-margin.right)/2+margin.left).attr("y",titlepos);if(horizontal){rotate_ylab=rotate_ylab!=null?rotate_ylab:xlab.length>1}else{rotate_ylab=rotate_ylab!=null?rotate_ylab:ylab.length>1}xaxis=g.append("g").attr("class",function(){if(horizontal){return"y axis"}return"x axis"});yaxis=g.append("g").attr("class",function(){if(horizontal){return"x axis"}return"y axis"});xaxis.append("text").attr("class","title").text(function(){if(horizontal){return ylab}return xlab}).attr("x",(width-margin.left-margin.right)/2+margin.left).attr("y",plot_height+margin.top+axispos.xtitle);ylabpos_y=(height-margin.top-margin.bottom)/2+margin.top;ylabpos_x=margin.left-axispos.ytitle;yaxis.append("text").attr("class","title").text(function(){if(horizontal){return xlab}return ylab}).attr("y",ylabpos_y).attr("x",ylabpos_x).attr("transform",rotate_ylab?"rotate(270,"+ylabpos_x+","+ylabpos_y+")":"");if(data.chr.length>1){xlabels=xaxis.append("g").attr("id","xlabels").selectAll("empty").data(data.chr).enter().append("text").attr("x",function(d,i){if(horizontal){return margin.left-axispos.ylabel}return(xscale[d](data.start[i])+xscale[d](data.end[i]))/2}).attr("y",function(d,i){if(horizontal){return(xscale[d](data.start[i])+xscale[d](data.end[i]))/2}return height-margin.bottom+axispos.xlabel}).text(function(d){return d})}else{thechr=data.chr[0];xticks=xscale[thechr].ticks(5);xlabels=xaxis.append("g").attr("id","xlabels").selectAll("empty").data(xticks).enter().append("text").attr("x",function(d){if(horizontal){return margin.left-axispos.ylabel}return xscale[thechr](d)}).attr("y",function(d,i){if(horizontal){return xscale[thechr](d)}return height-margin.bottom+axispos.xlabel}).text(function(d){return d});xlines=xaxis.append("g").attr("id","xlines").selectAll("empty").data(xticks).enter().append("line").attr("x1",function(d){if(horizontal){return margin.left}return xscale[thechr](d)}).attr("x2",function(d){if(horizontal){return margin.left+plot_width}return xscale[thechr](d)}).attr("y1",function(d,i){if(horizontal){return xscale[thechr](d)}return margin.top}).attr("y2",function(d,i){if(horizontal){return xscale[thechr](d)}return plot_height+margin.top}).attr("fill","none").attr("stroke",xlineOpts.color).attr("stroke-width",xlineOpts.width).attr("shape-rendering","crispEdges").style("pointer-events","none")}yticks=yticks!=null?yticks:yscale.ticks(nyticks);if(yticklab!=null&&yticklab.length!==yticks.length){displayError("chrpanelframe: yticklab.length ("+yticklab.length+") != yticks.length ("+yticks.length+")")}if(!(yticklab!=null&&yticklab.length===yticks.length)){yticklab=function(){var j,len,results;results=[];for(j=0,len=yticks.length;j<len;j++){d=yticks[j];results.push(d3panels.formatAxis(yticks)(d))}return results}()}ylines=yaxis.append("g").attr("id","ylines").selectAll("empty").data(yticks.concat(yticks)).enter().append("line").attr("y1",function(d){if(horizontal){return margin.top}return yscale(d)}).attr("y2",function(d){if(horizontal){return margin.top+plot_height}return yscale(d)}).attr("x1",function(d,i){if(horizontal){return yscale(d)}return margin.left}).attr("x2",function(d,i){if(horizontal){return yscale(d)}return plot_width+margin.left}).attr("fill","none").attr("stroke",ylineOpts.color).attr("stroke-width",ylineOpts.width).attr("shape-rendering","crispEdges").style("pointer-events","none");ylabels=yaxis.append("g").attr("id","ylabels").selectAll("empty").data(yticklab).enter().append("text").attr("y",function(d,i){if(horizontal){return height-margin.bottom+axispos.xlabel}return yscale(yticks[i])}).attr("x",function(d,i){if(horizontal){return yscale(yticks[i])}return margin.left-axispos.ylabel}).text(function(d){return d});if(chrlinecolor!==""&&data.chr.length>1){chrlines=svg.append("g").attr("id","chrlines");chrlines.selectAll("empty").data(data.chr.slice(0,+(data.chr.length-2)+1||9e9)).enter().append("line").attr("x1",function(d,i){if(horizontal){return margin.left}return xscale[d](data.end[i])+chrGap/2}).attr("x2",function(d,i){if(horizontal){return margin.left+plot_width}return xscale[d](data.end[i])+chrGap/2}).attr("y1",function(d,i){if(horizontal){return xscale[d](data.end[i])+chrGap/2}return margin.top}).attr("y2",function(d,i){if(horizontal){return xscale[d](data.end[i])+chrGap/2}return margin.top+plot_height}).attr("stroke",chrlinecolor).attr("stroke-width",chrlinewidth).attr("shape-rendering","crispEdges")}return box=svg.append("rect").attr("class","box").attr("x",margin.left).attr("y",margin.top).attr("height",plot_height).attr("width",plot_width).attr("fill","none").attr("stroke",boxcolor).attr("stroke-width",boxwidth).attr("shape-rendering","crispEdges")};chart.xscale=function(){return xscale};chart.yscale=function(){return yscale};chart.xlabels=function(){return xlabels};chart.ylabels=function(){return ylabels};chart.chrSelect=function(){return chrSelect};chart.chrlines=function(){return chrlines};chart.plot_width=function(){return plot_width};chart.plot_height=function(){return plot_height};chart.width=function(){return width};chart.height=function(){return height};chart.margin=function(){return margin};chart.box=function(){return box};chart.svg=function(){return svg};chart.remove=function(){svg.remove();return null};return chart};"use strict";d3panels.chr2dpanelframe=function(chartOpts){var altrectcolor,axispos,box,boxcolor,boxwidth,chart,chrGap,chrSelect,chrlinecolor,chrlines,chrlinewidth,height,margin,oneAtTop,rectcolor,ref,ref1,ref10,ref11,ref12,ref13,ref14,ref15,ref16,ref2,ref3,ref4,ref5,ref6,ref7,ref8,ref9,rotate_ylab,svg,title,titlepos,width,xlab,xlabels,xscale,ylab,ylabels,yscale;if(chartOpts==null){chartOpts={}}width=(ref=chartOpts!=null?chartOpts.width:void 0)!=null?ref:800;height=(ref1=chartOpts!=null?chartOpts.height:void 0)!=null?ref1:800;margin=(ref2=chartOpts!=null?chartOpts.margin:void 0)!=null?ref2:{left:60,top:40,right:40,bottom:60};axispos=(ref3=chartOpts!=null?chartOpts.axispos:void 0)!=null?ref3:{xtitle:25,ytitle:45,xlabel:5,ylabel:5};titlepos=(ref4=chartOpts!=null?chartOpts.titlepos:void 0)!=null?ref4:20;title=(ref5=chartOpts!=null?chartOpts.title:void 0)!=null?ref5:"";xlab=(ref6=chartOpts!=null?chartOpts.xlab:void 0)!=null?ref6:"Chromosome";ylab=(ref7=chartOpts!=null?chartOpts.ylab:void 0)!=null?ref7:"Chromosome";rotate_ylab=(ref8=chartOpts!=null?chartOpts.rotate_ylab:void 0)!=null?ref8:null;rectcolor=(ref9=chartOpts!=null?chartOpts.rectcolor:void 0)!=null?ref9:"#e6e6e6";altrectcolor=(ref10=chartOpts!=null?chartOpts.altrectcolor:void 0)!=null?ref10:"#d4d4d4";chrlinecolor=(ref11=chartOpts!=null?chartOpts.chrlinecolor:void 0)!=null?ref11:"";chrlinewidth=(ref12=chartOpts!=null?chartOpts.chrlinewidth:void 0)!=null?ref12:2;boxcolor=(ref13=chartOpts!=null?chartOpts.boxcolor:void 0)!=null?ref13:"black";boxwidth=(ref14=chartOpts!=null?chartOpts.boxwidth:void 0)!=null?ref14:2;chrGap=(ref15=chartOpts!=null?chartOpts.chrGap:void 0)!=null?ref15:6;oneAtTop=(ref16=chartOpts!=null?chartOpts.oneAtTop:void 0)!=null?ref16:false;xscale=null;yscale=null;xlabels=null;ylabels=null;chrSelect=null;chrlines=null;box=null;svg=null;chart=function chart(selection,data){var c,chrRect,chrx,chry,g,j,k,len,len1,plot_height,plot_width,ref17,ref18,x,xaxis,y,yaxis,ylabpos_x,ylabpos_y;margin=d3panels.check_listarg_v_default(margin,{left:60,top:40,right:40,bottom:60});axispos=d3panels.check_listarg_v_default(axispos,{xtitle:25,ytitle:45,xlabel:5,ylabel:5});if(data.chr==null){d3panels.displayError("chr2dpanelframe: data.chr is missing")}if(data.end==null){d3panels.displayError("chr2dpanelframe: data.end is missing")}svg=selection.append("svg");svg.attr("width",width).attr("height",height).attr("class","d3panels");g=svg.append("g").attr("id","frame");plot_width=width-(margin.left+margin.right);plot_height=height-(margin.top+margin.bottom);if(!(data!=null?data.start:void 0)){data.start=function(){var j,len,ref17,results;ref17=data.chr;results=[];for(j=0,len=ref17.length;j<len;j++){c=ref17[j];results.push(0)}return results}()}if(data.chr.length!==data.start.length){d3panels.displayError("chr2dpanelframe: data.start.length ("+data.start.length+") != data.chr.length ("+data.chr.length+")")}if(data.chr.length!==data.end.length){d3panels.displayError("chr2dpanelframe: data.end.length ("+data.end.length+") != data.chr.length ("+data.chr.length+")")}xscale=d3panels.calc_chrscales(plot_width,margin.left,chrGap,data.chr,data.start,data.end);yscale=d3panels.calc_chrscales(plot_height,margin.top,chrGap,data.chr,data.start,data.end,!oneAtTop);g.append("rect").attr("x",margin.left).attr("width",plot_width).attr("y",margin.top).attr("height",plot_height).attr("fill",rectcolor).attr("shape-rendering","crispEdges");chrRect=[];ref17=data.chr;for(x=j=0,len=ref17.length;j<len;x=++j){chrx=ref17[x];ref18=data.chr;for(y=k=0,len1=ref18.length;k<len1;y=++k){chry=ref18[y];chrRect.push({chrx:chrx,xi:x,chry:chry,yi:y,odd:(x+y)%2})}}if(altrectcolor!==""){chrSelect=g.append("g").selectAll("empty").data(chrRect).enter().append("rect").attr("x",function(d){return xscale[d.chrx](data.start[d.xi])-chrGap/2}).attr("width",function(d){return xscale[d.chrx](data.end[d.xi])-xscale[d.chrx](data.start[d.xi])+chrGap}).attr("y",function(d){if(oneAtTop){return yscale[d.chry](data.start[d.yi])-chrGap/2}return yscale[d.chry](data.end[d.yi])-chrGap/2}).attr("height",function(d){if(oneAtTop){return yscale[d.chry](data.end[d.yi])-yscale[d.chry](data.start[d.yi])+chrGap}return yscale[d.chry](data.start[d.yi])-yscale[d.chry](data.end[d.yi])+chrGap}).attr("fill",function(d,i){if(!d.odd){return rectcolor}return altrectcolor}).attr("shape-rendering","crispEdges")}g.append("g").attr("class","title").append("text").text(title).attr("x",(width-margin.left-margin.right)/2+margin.left).attr("y",titlepos);rotate_ylab=rotate_ylab!=null?rotate_ylab:ylab.length>1;xaxis=g.append("g").attr("class","x axis");yaxis=g.append("g").attr("class","y axis");xaxis.append("text").attr("class","title").text(function(){return xlab}).attr("x",(width-margin.left-margin.right)/2+margin.left).attr("y",plot_height+margin.top+axispos.xtitle);ylabpos_y=(height-margin.top-margin.bottom)/2+margin.top;ylabpos_x=margin.left-axispos.ytitle;yaxis.append("text").attr("class","title").text(function(){return ylab}).attr("y",ylabpos_y).attr("x",ylabpos_x).attr("transform",rotate_ylab?"rotate(270,"+ylabpos_x+","+ylabpos_y+")":"");xlabels=xaxis.append("g").attr("id","xlabels").selectAll("empty").data(data.chr).enter().append("text").attr("x",function(d,i){return(xscale[d](data.start[i])+xscale[d](data.end[i]))/2}).attr("y",height-margin.bottom+axispos.xlabel).text(function(d){return d});ylabels=yaxis.append("g").attr("id","ylabels").selectAll("empty").data(data.chr).enter().append("text").attr("y",function(d,i){return(yscale[d](data.start[i])+yscale[d](data.end[i]))/2}).attr("x",margin.left-axispos.ylabel).text(function(d){return d});if(chrlinecolor!==""&&data.chr.length>1){chrlines=svg.append("g").attr("id","chrlines");chrlines.selectAll("empty").data(data.chr.slice(0,+(data.chr.length-2)+1||9e9)).enter().append("line").attr("x1",function(d,i){return xscale[d](data.end[i])+chrGap/2}).attr("x2",function(d,i){return xscale[d](data.end[i])+chrGap/2}).attr("y1",margin.top).attr("y2",margin.top+plot_height).attr("stroke",chrlinecolor).attr("stroke-width",chrlinewidth).attr("shape-rendering","crispEdges");chrlines.selectAll("empty").data(data.chr.slice(0,+(data.chr.length-2)+1||9e9)).enter().append("line").attr("y1",function(d,i){if(oneAtTop){return yscale[d](data.end[i])+chrGap/2}return yscale[d](data.end[i])-chrGap/2}).attr("y2",function(d,i){if(oneAtTop){return yscale[d](data.end[i])+chrGap/2}return yscale[d](data.end[i])-chrGap/2}).attr("x1",margin.left).attr("x2",margin.left+plot_width).attr("stroke",chrlinecolor).attr("stroke-width",chrlinewidth).attr("shape-rendering","crispEdges")}return box=svg.append("rect").attr("class","box").attr("x",margin.left).attr("y",margin.top).attr("height",plot_height).attr("width",plot_width).attr("fill","none").attr("stroke",boxcolor).attr("stroke-width",boxwidth).attr("shape-rendering","crispEdges")};chart.xscale=function(){return xscale};chart.yscale=function(){return yscale};chart.xlabels=function(){return xlabels};chart.ylabels=function(){return ylabels};chart.chrSelect=function(){return chrSelect};chart.chrlines=function(){return chrlines};chart.plot_width=function(){return plot_width};chart.plot_height=function(){return plot_height};chart.width=function(){return width};chart.height=function(){return height};chart.margin=function(){return margin};chart.box=function(){return box};chart.svg=function(){return svg};chart.remove=function(){svg.remove();return null};return chart};"use strict";d3panels.cichart=function(chartOpts){var chart,horizontal,ref,ref1,ref10,ref11,ref2,ref3,ref4,ref5,ref6,ref7,ref8,ref9,segcolor,segments,segstrokewidth,segwidth,svg,tip,tipclass,v_over_h,vertsegcolor,xcatlabels,xlab,xlineOpts,xscale,ylab,ylim,yscale;if(chartOpts==null){chartOpts={}}xcatlabels=(ref=chartOpts!=null?chartOpts.xcatlabels:void 0)!=null?ref:null;segwidth=(ref1=chartOpts!=null?chartOpts.segwidth:void 0)!=null?ref1:.4;segcolor=(ref2=chartOpts!=null?chartOpts.segcolor:void 0)!=null?ref2:"slateblue";segstrokewidth=(ref3=chartOpts!=null?chartOpts.segstrokewidth:void 0)!=null?ref3:"3";vertsegcolor=(ref4=chartOpts!=null?chartOpts.vertsegcolor:void 0)!=null?ref4:"slateblue";xlab=(ref5=chartOpts!=null?chartOpts.xlab:void 0)!=null?ref5:"Group";ylab=(ref6=chartOpts!=null?chartOpts.ylab:void 0)!=null?ref6:"Response";ylim=(ref7=chartOpts!=null?chartOpts.ylim:void 0)!=null?ref7:null;xlineOpts=(ref8=chartOpts!=null?chartOpts.xlineOpts:void 0)!=null?ref8:{color:"#CDCDCD",width:5};horizontal=(ref9=chartOpts!=null?chartOpts.horizontal:void 0)!=null?ref9:false;v_over_h=(ref10=chartOpts!=null?chartOpts.v_over_h:void 0)!=null?ref10:horizontal;tipclass=(ref11=chartOpts!=null?chartOpts.tipclass:void 0)!=null?ref11:"tooltip";xscale=null;yscale=null;segments=null;tip=null;svg=null;chart=function chart(selection,data){var direction,high,i,low,mean,myframe,ncat,segmentGroup,tipfunc,xlim,xticks,xval,yval;xlineOpts=d3panels.check_listarg_v_default(xlineOpts,{color:"#CDCDCD",width:5});if(data.mean==null){d3panels.displayError("cichart: data.mean is missing")}if(data.low==null){d3panels.displayError("cichart: data.low is missing")}if(data.high==null){d3panels.displayError("cichart: data.high is missing")}mean=data.mean;low=data.low;high=data.high;ncat=mean.length;if(ncat!==low.length){d3panels.displayError("cichart: low.length ["+low.length+"] != mean.length ["+ncat+"]")}if(ncat!==high.length){d3panels.displayError("cichart: high.length ["+high.length+"] != mean.length ["+ncat+"]")}xticks=function(){var results;results=[];for(i in mean){results.push(+i+1)}return results}();xcatlabels=xcatlabels!=null?xcatlabels:xticks;if(xcatlabels.length!==mean.length){d3panels.displayError("cichart: xcatlabels.length ["+xcatlabels.length+"] != mean.length ["+ncat+"]")}ylim=ylim!=null?ylim:d3panels.pad_ylim(d3.extent(low.concat(high)));xlim=[.5,mean.length+.5];segcolor=d3panels.expand2vector(d3panels.forceAsArray(segcolor),mean.length);vertsegcolor=d3panels.expand2vector(d3panels.forceAsArray(vertsegcolor),mean.length);if(horizontal){chartOpts.ylim=xlim.reverse();chartOpts.xlim=ylim;chartOpts.xlab=ylab;chartOpts.ylab=xlab;chartOpts.xlineOpts=chartOpts.ylineOpts;chartOpts.ylineOpts=xlineOpts;chartOpts.yNA=chartOpts.xNA;chartOpts.xNA=chartOpts.yNA;chartOpts.yticks=xticks;chartOpts.yticklab=xcatlabels;chartOpts.v_over_h=v_over_h}else{chartOpts.ylim=ylim;chartOpts.xlim=xlim;chartOpts.xlab=xlab;chartOpts.ylab=ylab;chartOpts.ylineOpts=chartOpts.ylineOpts;chartOpts.xlineOpts=xlineOpts;chartOpts.xticks=xticks;chartOpts.xticklab=xcatlabels;chartOpts.v_over_h=v_over_h}myframe=d3panels.panelframe(chartOpts);myframe(selection);svg=myframe.svg();xscale=myframe.xscale();yscale=myframe.yscale();segmentGroup=svg.append("g").attr("id","segments");segments=segmentGroup.selectAll("empty").data(low).enter().append("line").attr("x1",function(d,i){if(!horizontal){return xscale(i+1)}return xscale(d)}).attr("x2",function(d,i){if(!horizontal){return xscale(i+1)}return xscale(high[i])}).attr("y1",function(d,i){if(!horizontal){return yscale(d)}return yscale(i+1)}).attr("y2",function(d,i){if(!horizontal){return yscale(high[i])}return yscale(i+1)}).attr("fill","none").attr("stroke",function(d,i){return vertsegcolor[i]}).attr("stroke-width",segstrokewidth).attr("shape-rendering","crispEdges");yval=mean.concat(low,high);xval=function(){var results;results=[];for(i in yval){results.push(+(i%ncat)+1)}return results}();segments=segmentGroup.selectAll("empty").data(yval).enter().append("line").attr("x1",function(d,i){if(horizontal){return xscale(d)}else{if(i<ncat){return xscale(xval[i]-segwidth/2)}return xscale(xval[i]-segwidth/3)}}).attr("x2",function(d,i){if(horizontal){return xscale(d)}else{if(i<ncat){return xscale(xval[i]+segwidth/2)}return xscale(xval[i]+segwidth/3)}}).attr("y1",function(d,i){if(horizontal){if(i<ncat){return yscale(xval[i]-segwidth/2)}return yscale(xval[i]-segwidth/3)}else{return yscale(d)}}).attr("y2",function(d,i){if(horizontal){if(i<ncat){return yscale(xval[i]+segwidth/2)}return yscale(xval[i]+segwidth/3)}else{return yscale(d)}}).attr("fill","none").attr("stroke",function(d,i){return segcolor[i%mean.length]}).attr("stroke-width",segstrokewidth).attr("shape-rendering","crispEdges");direction=horizontal?"north":"east";tipfunc=function tipfunc(d,i){var f,index;index=i%mean.length;f=d3panels.formatAxis([low[index],mean[index]],1);return f(mean[index])+" ("+f(low[index])+" - "+f(high[index])+")"};tip=d3panels.tooltip_create(d3.select("body"),segments,{direction:direction,tipclass:tipclass},tipfunc);return myframe.box().raise()};chart.yscale=function(){return yscale};chart.xscale=function(){return xscale};chart.segments=function(){return segments};chart.tip=function(){return tip};chart.svg=function(){return svg};chart.remove=function(){svg.remove();d3panels.tooltip_destroy(tip);return null};return chart};"use strict";d3panels.crosstab=function(chartOpts){var bordercolor,cellPad,chart,colrect,fontsize,height,hilitcolor,margin,rectcolor,ref,ref1,ref2,ref3,ref4,ref5,ref6,ref7,ref8,ref9,rowrect,svg,title,titlepos,width;if(chartOpts==null){chartOpts={}}width=(ref=chartOpts!=null?chartOpts.width:void 0)!=null?ref:600;height=(ref1=chartOpts!=null?chartOpts.height:void 0)!=null?ref1:300;margin=(ref2=chartOpts!=null?chartOpts.margin:void 0)!=null?ref2:{left:60,top:80,right:40,bottom:20};cellPad=(ref3=chartOpts!=null?chartOpts.cellPad:void 0)!=null?ref3:null;titlepos=(ref4=chartOpts!=null?chartOpts.titlepos:void 0)!=null?ref4:50;title=(ref5=chartOpts!=null?chartOpts.title:void 0)!=null?ref5:"";fontsize=(ref6=chartOpts!=null?chartOpts.fontsize:void 0)!=null?ref6:null;rectcolor=(ref7=chartOpts!=null?chartOpts.rectcolor:void 0)!=null?ref7:"#e6e6e6";hilitcolor=(ref8=chartOpts!=null?chartOpts.hilitcolor:void 0)!=null?ref8:"#e9cfec";bordercolor=(ref9=chartOpts!=null?chartOpts.bordercolor:void 0)!=null?ref9:"black";rowrect=null;colrect=null;svg=null;chart=function chart(selection,data){var borders,cell,cellHeight,cellWidth,cells,collab,denom,i,j,k,l,n,ncol,nrow,plot_height,plot_width,rect,ref10,ref11,ref12,ref13,ref14,ref15,ref16,ref17,rowlab,tab,titles,values,xscale,xv,yscale,yv;margin=d3panels.check_listarg_v_default(margin,{left:60,top:40,right:40,bottom:60});if(data.x==null){d3panels.displayError("crosstab: data.x is missing")}if(data.y==null){d3panels.displayError("crosstab: data.y is missing")}n=data.x.length;if(data.y.length!==n){d3panels.displayError("crosstab: data.x.length ["+data.x.length+"] != data.y.length ["+data.y.length+"]")}data.xcat=(ref10=data!=null?data.xcat:void 0)!=null?ref10:function(){var k,len,ref11,results;ref11=d3.range(d3.max(data.x));results=[];for(k=0,len=ref11.length;k<len;k++){xv=ref11[k];results.push(xv+1)}return results}();data.ycat=(ref11=data!=null?data.ycat:void 0)!=null?ref11:function(){var k,len,ref12,results;ref12=d3.range(d3.max(data.y));results=[];for(k=0,len=ref12.length;k<len;k++){yv=ref12[k];results.push(yv+1)}return results}();ncol=data.xcat.length;if(d3.max(data.x)>ncol||d3.min(data.x)<=0){d3panels.displayError("crosstab: data.x should be in range 1-"+ncol+" [was "+d3.min(data.x)+" - "+d3.max(data.x)+"]")}nrow=data.ycat.length;if(d3.max(data.y)>nrow||d3.min(data.y)<=0){d3panels.displayError("crosstab: data.y should be in range 1-"+nrow+" [was "+d3.min(data.y)+" - "+d3.max(data.y)+"]")}data.x=function(){var k,len,ref12,results;ref12=data.x;results=[];for(k=0,len=ref12.length;k<len;k++){xv=ref12[k];results.push(xv-1)}return results}();data.y=function(){var k,len,ref12,results;ref12=data.y;results=[];for(k=0,len=ref12.length;k<len;k++){yv=ref12[k];results.push(yv-1)}return results}();tab=d3panels.calc_crosstab(data);data.xlabel=(ref12=data!=null?data.xlabel:void 0)!=null?ref12:"";data.ylabel=(ref13=data!=null?data.ylabel:void 0)!=null?ref13:"";cells=[];for(i=k=0,ref14=nrow;0<=ref14?k<=ref14:k>=ref14;i=0<=ref14?++k:--k){for(j=l=0,ref15=ncol;0<=ref15?l<=ref15:l>=ref15;j=0<=ref15?++l:--l){cell={value:tab[i][j],row:i,col:j,shaded:false,rowpercent:"",colpercent:""};if(i<nrow-1&&(j<ncol-1||j===ncol)){cell.shaded=true}if(j<ncol-1&&(i<nrow-1||i===nrow)){cell.shaded=true}if(i<nrow-1){denom=tab[nrow][j]-tab[nrow-1][j];cell.colpercent=denom>0?Math.round(100*tab[i][j]/denom)+"%":"—"}else if(i===nrow-1){denom=tab[nrow][j];cell.colpercent=denom>0?"("+Math.round(100*tab[i][j]/denom)+"%)":"—"}else{cell.colpercent=cell.value}if(j<ncol-1){denom=tab[i][ncol]-tab[i][ncol-1];cell.rowpercent=denom>0?Math.round(100*tab[i][j]/denom)+"%":"—"}else if(j===ncol-1){denom=tab[i][ncol];cell.rowpercent=denom>0?"("+Math.round(100*tab[i][j]/denom)+"%)":"—"}else{cell.rowpercent=cell.value}cells.push(cell)}}plot_width=width-margin.left-margin.right;plot_height=height-margin.top-margin.bottom;cellWidth=plot_width/(ncol+2);cellHeight=plot_height/(nrow+2);fontsize=fontsize!=null?fontsize:cellHeight*.5;cellPad=cellPad!=null?cellPad:cellWidth*.1;xscale=d3.scaleBand().domain(function(){var results=[];for(var m=0,ref16=ncol+1;0<=ref16?m<=ref16:m>=ref16;0<=ref16?m++:m--){results.push(m)}return results}.apply(this)).range([margin.left,width-margin.right]);yscale=d3.scaleBand().domain(function(){var results=[];for(var m=0,ref17=nrow+1;0<=ref17?m<=ref17:m>=ref17;0<=ref17?m++:m--){results.push(m)}return results}.apply(this)).range([margin.top,height-margin.bottom]);svg=selection.append("svg").attr("width",width).attr("height",height).attr("class","d3panels");rect=svg.append("g").attr("id","value_rect");rect.selectAll("empty").data(cells).enter().append("rect").attr("x",function(d){return xscale(d.col+1)}).attr("y",function(d){return yscale(d.row+1)}).attr("width",cellWidth).attr("height",cellHeight).attr("fill",function(d){if(d.shaded){return rectcolor}else{return"none"}}).attr("stroke",function(d){if(d.shaded){return rectcolor}else{return"none"}}).attr("stroke-width",0).style("pointer-events","none").attr("shape-rendering","crispEdges");values=svg.append("g").attr("id","values");values.selectAll("empty").data(cells).enter().append("text").attr("x",function(d){return xscale(d.col+1)+cellWidth-cellPad}).attr("y",function(d){return yscale(d.row+1)+cellHeight/2}).text(function(d){return d.value}).attr("class",function(d){return"crosstab row"+d.row+" col"+d.col}).style("font-size",fontsize).style("pointer-events","none");colrect=svg.append("g").attr("id","colrect");colrect.selectAll("empty").data(data.xcat.concat("Total")).enter().append("rect").attr("x",function(d,i){return xscale(i+1)}).attr("y",yscale(0)).attr("width",cellWidth).attr("height",cellHeight).attr("fill","white").attr("stroke","white").attr("shape-rendering","crispEdges").on("mouseover",function(d,i){d3.select(this).attr("fill",hilitcolor).attr("stroke",hilitcolor);return values.selectAll(".col"+i).text(function(d){return d.colpercent})}).on("mouseout",function(d,i){d3.select(this).attr("fill","white").attr("stroke","white");return values.selectAll("text.col"+i).text(function(d){return d.value})});collab=svg.append("g").attr("id","collab");collab.selectAll("empty").data(data.xcat.concat("Total")).enter().append("text").attr("x",function(d,i){return xscale(i+1)+cellWidth-cellPad}).attr("y",yscale(0)+cellHeight/2).text(function(d){return d}).attr("class","crosstab").style("font-size",fontsize).style("pointer-events","none");rowrect=svg.append("g").attr("id","rowrect");rowrect.selectAll("empty").data(data.ycat.concat("Total")).enter().append("rect").attr("x",xscale(0)).attr("y",function(d,i){return yscale(i+1)}).attr("width",cellWidth).attr("height",cellHeight).attr("fill","white").attr("stroke","white").attr("shape-rendering","crispEdges").on("mouseover",function(d,i){d3.select(this).attr("fill",hilitcolor).attr("stroke",hilitcolor);return values.selectAll(".row"+i).text(function(d){return d.rowpercent})}).on("mouseout",function(d,i){d3.select(this).attr("fill","white").attr("stroke","white");return values.selectAll(".row"+i).text(function(d){return d.value})});rowlab=svg.append("g").attr("id","rowlab");rowlab.selectAll("empty").data(data.ycat.concat("Total")).enter().append("text").attr("x",xscale(0)+cellWidth-cellPad).attr("y",function(d,i){return yscale(i+1)+cellHeight/2}).text(function(d){return d}).attr("class","crosstab").style("font-size",fontsize).style("pointer-events","none");borders=svg.append("g").attr("id","borders");borders.append("rect").attr("x",xscale(1)).attr("y",yscale(1)).attr("width",cellWidth*ncol).attr("height",cellHeight*nrow).attr("fill","none").attr("stroke",bordercolor).attr("stroke-width",2).style("pointer-events","none").attr("shape-rendering","crispEdges");borders.append("rect").attr("x",xscale(ncol+1)).attr("y",yscale(nrow+1)).attr("width",cellWidth).attr("height",cellHeight).attr("fill","none").attr("stroke",bordercolor).attr("stroke-width",2).style("pointer-events","none").attr("shape-rendering","crispEdges");titles=svg.append("g").attr("id","titles");titles.append("text").attr("class","crosstabtitle").attr("x",margin.left+(ncol+1)*cellWidth/2).attr("y",margin.top-cellHeight/2).text(data.xlabel).style("font-size",fontsize).style("font-weight","bold");titles.append("text").attr("class","crosstab").attr("x",xscale(0)+cellWidth-cellPad).attr("y",yscale(0)+cellHeight/2).text(data.ylabel).style("font-size",fontsize).style("font-weight","bold");return titles.append("text").attr("class","crosstabtitle").attr("x",margin.left+(width-margin.left-margin.right)/2).attr("y",margin.top-titlepos).text(title).style("font-size",fontsize)};chart.rowrect=function(){return rowrect};chart.colrect=function(){return colrect};chart.svg=function(){return svg};chart.remove=function(){svg.remove();return null};return chart};"use strict";d3panels.curvechart=function(chartOpts){var chart,curves,indtip,linecolor,linecolorhilit,linewidth,linewidthhilit,ref,ref1,ref2,ref3,ref4,ref5,ref6,svg,tipclass,xlim,xscale,ylim,yscale;if(chartOpts==null){chartOpts={}}xlim=(ref=chartOpts!=null?chartOpts.xlim:void 0)!=null?ref:null;ylim=(ref1=chartOpts!=null?chartOpts.ylim:void 0)!=null?ref1:null;linecolor=(ref2=chartOpts!=null?chartOpts.linecolor:void 0)!=null?ref2:null;linecolorhilit=(ref3=chartOpts!=null?chartOpts.linecolorhilit:void 0)!=null?ref3:null;linewidth=(ref4=chartOpts!=null?chartOpts.linewidth:void 0)!=null?ref4:2;linewidthhilit=(ref5=chartOpts!=null?chartOpts.linewidthhilit:void 0)!=null?ref5:2;tipclass=(ref6=chartOpts!=null?chartOpts.tipclass:void 0)!=null?ref6:"tooltip";xscale=null;yscale=null;curves=null;indtip=null;svg=null;chart=function chart(selection,data){var add_curves,i,j,myframe,n_ind,ref7,x,y;if(data.x==null){d3panels.displayError("curvechart: data.x is missing")}if(data.y==null){d3panels.displayError("curvechart: data.y is missing")}x=data.x;y=data.y;n_ind=y.length;if(x.length===1&&y.length>1){for(j=i=2,ref7=n_ind;2<=ref7?i<=ref7:i>=ref7;j=2<=ref7?++i:--i){x.push(x[0])}}if(x.length!==n_ind){d3panels.displayError("curvechart: data.x.length ("+x.length+") != data.y.length ("+n_ind+")")}xlim=xlim!=null?xlim:d3panels.matrixExtent(x);ylim=ylim!=null?ylim:d3panels.matrixExtent(y);chartOpts.xlim=xlim;chartOpts.ylim=ylim;chartOpts.xNA=false;chartOpts.yNA=false;myframe=d3panels.panelframe(chartOpts);myframe(selection);svg=myframe.svg();xscale=myframe.xscale();yscale=myframe.yscale();add_curves=d3panels.add_curves({linecolor:linecolor,linecolorhilit:linecolorhilit,linewidth:linewidth,linewidthhilit:linewidthhilit,tipclass:tipclass});add_curves(myframe,data);curves=add_curves.curves();indtip=add_curves.indtip();return myframe.box().raise()};chart.xscale=function(){return xscale};chart.yscale=function(){return yscale};chart.curves=function(){return curves};chart.indtip=function(){return indtip};chart.svg=function(){return svg};chart.remove=function(){svg.remove();d3panels.tooltip_destroy(indtip);return null};return chart};"use strict";var indexOf=[].indexOf;d3panels.dotchart=function(chartOpts){var chart,horizontal,indtip,jitter,pointcolor,points,pointsize,pointstroke,ref,ref1,ref10,ref11,ref12,ref13,ref14,ref15,ref16,ref2,ref3,ref4,ref5,ref6,ref7,ref8,ref9,svg,tipclass,v_over_h,xNA,xNA_size,xcategories,xcatlabels,xlab,xlineOpts,xscale,yNA,yNA_size,ylab,ylim,yscale;if(chartOpts==null){chartOpts={}}xcategories=(ref=chartOpts!=null?chartOpts.xcategories:void 0)!=null?ref:null;xcatlabels=(ref1=chartOpts!=null?chartOpts.xcatlabels:void 0)!=null?ref1:null;xNA=(ref2=chartOpts!=null?chartOpts.xNA:void 0)!=null?ref2:{handle:true,force:false};yNA=(ref3=chartOpts!=null?chartOpts.yNA:void 0)!=null?ref3:{handle:true,force:false};xNA_size=(ref4=chartOpts!=null?chartOpts.xNA_size:void 0)!=null?ref4:{width:20,gap:10};yNA_size=(ref5=chartOpts!=null?chartOpts.yNA_size:void 0)!=null?ref5:{width:20,gap:10};ylim=(ref6=chartOpts!=null?chartOpts.ylim:void 0)!=null?ref6:null;xlab=(ref7=chartOpts!=null?chartOpts.xlab:void 0)!=null?ref7:"Group";ylab=(ref8=chartOpts!=null?chartOpts.ylab:void 0)!=null?ref8:"Response";xlineOpts=(ref9=chartOpts!=null?chartOpts.xlineOpts:void 0)!=null?ref9:{color:"#cdcdcd",width:5};pointcolor=(ref10=chartOpts!=null?chartOpts.pointcolor:void 0)!=null?ref10:null;pointstroke=(ref11=chartOpts!=null?chartOpts.pointstroke:void 0)!=null?ref11:"black";pointsize=(ref12=chartOpts!=null?chartOpts.pointsize:void 0)!=null?ref12:3;jitter=(ref13=chartOpts!=null?chartOpts.jitter:void 0)!=null?ref13:"beeswarm";tipclass=(ref14=chartOpts!=null?chartOpts.tipclass:void 0)!=null?ref14:"tooltip";horizontal=(ref15=chartOpts!=null?chartOpts.horizontal:void 0)!=null?ref15:false;v_over_h=(ref16=chartOpts!=null?chartOpts.v_over_h:void 0)!=null?ref16:horizontal;xscale=null;yscale=null;xNA=xNA;yNA=yNA;points=null;indtip=null;svg=null;chart=function chart(selection,data){var force,g,group,i,indID,jitter_width,myframe,ngroup,pointGroup,ref17,ref18,ref19,ref20,scaledPoints,u,x,xlim,xv,y;xNA=d3panels.check_listarg_v_default(xNA,{handle:true,force:false});yNA=d3panels.check_listarg_v_default(yNA,{handle:true,force:false});xNA_size=d3panels.check_listarg_v_default(xNA,{width:20,gap:10});yNA_size=d3panels.check_listarg_v_default(yNA,{width:20,gap:10});if(data.x==null){d3panels.displayError("dotchart: data.x is missing")}if(data.y==null){d3panels.displayError("dotchart: data.y is missing")}x=d3panels.missing2null(data.x);y=d3panels.missing2null(data.y);indID=(ref17=data!=null?data.indID:void 0)!=null?ref17:function(){var results=[];for(var j=1,ref18=x.length;1<=ref18?j<=ref18:j>=ref18;1<=ref18?j++:j--){results.push(j)}return results}.apply(this);if(x.length!==y.length){d3panels.displayError("dotchart: length(x) ["+x.length+"] != length(y) ["+y.length+"]")}if(indID.length!==x.length){d3panels.displayError("dotchart: length(indID) ["+indID.length+"] != length(x) ["+x.length+"]")}group=(ref19=data!=null?data.group:void 0)!=null?ref19:function(){var j,len,results;results=[];for(j=0,len=x.length;j<len;j++){i=x[j];results.push(1)}return results}();group=d3panels.expand2vector(group,x.length);ngroup=d3.max(group);group=function(){var j,len,results;results=[];for(j=0,len=group.length;j<len;j++){g=group[j];results.push(g!=null?g-1:g)}return results}();if(d3panels.sumArray(function(){var j,len,results;results=[];for(j=0,len=group.length;j<len;j++){g=group[j];results.push(g<0||g>ngroup-1)}return results}())>0){d3panels.displayError("dotchart: group values out of range");console.log("ngroup: "+ngroup);console.log("distinct groups: "+d3panels.unique(group))}if(group.length!==x.length){d3panels.displayError("dotchart: group.length ("+group.length+") != x.length ("+x.length+")")}pointcolor=pointcolor!=null?pointcolor:d3panels.selectGroupColors(ngroup,"dark");pointcolor=d3panels.expand2vector(pointcolor,ngroup);if(pointcolor.length<ngroup){d3panels.displayError("add_points: pointcolor.length ("+pointcolor.length+") < ngroup ("+ngroup+")")}xcategories=xcategories!=null?xcategories:d3panels.unique(x);xcategories=d3panels.forceAsArray(xcategories);xcatlabels=xcatlabels!=null?xcatlabels:xcategories;xcatlabels=d3panels.forceAsArray(xcatlabels);if(xcatlabels.length!==xcategories.length){d3panels.displayError("dotchart: xcatlabels.length ["+xcatlabels.length+"] != xcategories.length ["+xcategories.length+"]")}if(d3panels.sumArray(function(){var j,len,results;results=[];for(j=0,len=x.length;j<len;j++){xv=x[j];results.push(xv!=null&&!(indexOf.call(xcategories,xv)>=0))}return results}())>0){d3panels.displayError("dotchart: Some x values not in xcategories");console.log("xcategories:");console.log(xcategories);console.log("x:");console.log(x);for(i in x){if(x[i]!=null&&!(ref20=x[i],indexOf.call(xcategories,ref20)>=0)){x[i]=null}}}ylim=ylim!=null?ylim:d3panels.pad_ylim(d3.extent(y));xlim=[d3.min(xcategories)-.5,d3.max(xcategories)+.5];xNA.handle=xNA.force||xNA.handle&&!x.every(function(v){return v!=null});yNA.handle=yNA.force||yNA.handle&&!y.every(function(v){return v!=null});if(horizontal){chartOpts.ylim=xlim.reverse();chartOpts.xlim=ylim;chartOpts.xlab=ylab;chartOpts.ylab=xlab;chartOpts.xlineOpts=chartOpts.ylineOpts;chartOpts.ylineOpts=xlineOpts;chartOpts.yNA=xNA.handle;chartOpts.xNA=yNA.handle;chartOpts.xNA_size=yNA_size;chartOpts.yNA_size=xNA_size;chartOpts.yticks=xcategories;chartOpts.yticklab=xcatlabels;chartOpts.v_over_h=v_over_h}else{chartOpts.ylim=ylim;chartOpts.xlim=xlim;chartOpts.xlab=xlab;chartOpts.ylab=ylab;chartOpts.ylineOpts=chartOpts.ylineOpts;chartOpts.xlineOpts=xlineOpts;chartOpts.xNA=xNA.handle;chartOpts.yNA=yNA.handle;chartOpts.xNA_size=xNA_size;chartOpts.yNA_size=yNA_size;chartOpts.xticks=xcategories;chartOpts.xticklab=xcatlabels;chartOpts.v_over_h=v_over_h}myframe=d3panels.panelframe(chartOpts);myframe(selection);svg=myframe.svg();xscale=myframe.xscale();yscale=myframe.yscale();if(horizontal){scaledPoints=function(){var results;results=[];for(i in x){results.push({x:xscale(y[i]),y:yscale(x[i])})}return results}()}else{scaledPoints=function(){var results;results=[];for(i in x){results.push({x:xscale(x[i]),y:yscale(y[i])})}return results}()}pointGroup=svg.append("g").attr("id","points");points=pointGroup.selectAll("empty").data(scaledPoints).enter().append("circle").attr("class",function(d,i){return"pt"+i}).attr("r",pointsize).attr("fill",function(d,i){return pointcolor[group[i]]}).attr("stroke",pointstroke).attr("stroke-width","1").attr("cx",function(d){return d.x}).attr("cy",function(d){return d.y});indtip=d3panels.tooltip_create(d3.select("body"),points,{tipclass:tipclass},function(d,i){return indID[i]});if(jitter==="random"){jitter_width=.2;u=function(){var results;results=[];for(i in scaledPoints){results.push((Math.random()-.5)*jitter_width)}return results}();if(horizontal){points.attr("cy",function(d,i){if(x[i]!=null){return yscale(x[i]+u[i])}return yscale(x[i])+u[i]/jitter_width*xNA_size.width/2})}else{points.attr("cx",function(d,i){if(x[i]!=null){return xscale(x[i]+u[i])}return xscale(x[i])+u[i]/jitter_width*xNA_size.width/2})}}else if(jitter==="beeswarm"){if(horizontal){d3.range(scaledPoints.length).map(function(i){return scaledPoints[i].fx=scaledPoints[i].x});force=d3.forceSimulation(scaledPoints).force("y",d3.forceY(function(d){return d.y})).force("collide",d3.forceCollide(pointsize*1.1)).stop()}else{d3.range(scaledPoints.length).map(function(i){return scaledPoints[i].fy=scaledPoints[i].y});force=d3.forceSimulation(scaledPoints).force("x",d3.forceX(function(d){return d.x})).force("collide",d3.forceCollide(pointsize*1.1)).stop()}(function(){var results=[];for(var j=0;j<=30;j++){results.push(j)}return results}).apply(this).map(function(d){force.tick();return points.attr("cx",function(d){return d.x}).attr("cy",function(d){return d.y})})}else if(jitter!=="none"){d3panels.displayError('dotchart: jitter should be "beeswarm", "random", or "none"')}return myframe.box().raise()};chart.xscale=function(){return xscale};chart.yscale=function(){return yscale};chart.xNA=function(){return xNA.handle};chart.yNA=function(){return yNA.handle};chart.points=function(){return points};chart.indtip=function(){return indtip};chart.svg=function(){return svg};chart.remove=function(){svg.remove();d3panels.tooltip_destroy(indtip);return null};return chart};"use strict";d3panels.heatmap=function(chartOpts){var cellSelect,cells,celltip,chart,colors,hilitcolor,margin,nullcolor,ref,ref1,ref2,ref3,ref4,ref5,ref6,ref7,ref8,svg,tipclass,xlim,xscale,ylim,yscale,zlim,zscale,zthresh;if(chartOpts==null){chartOpts={}}margin=(ref=chartOpts!=null?chartOpts.margin:void 0)!=null?ref:{left:60,top:40,right:40,bottom:40,inner:0};xlim=(ref1=chartOpts!=null?chartOpts.xlim:void 0)!=null?ref1:null;ylim=(ref2=chartOpts!=null?chartOpts.ylim:void 0)!=null?ref2:null;nullcolor=(ref3=chartOpts!=null?chartOpts.nullcolor:void 0)!=null?ref3:"#e6e6e6";colors=(ref4=chartOpts!=null?chartOpts.colors:void 0)!=null?ref4:["slateblue","white","crimson"];zlim=(ref5=chartOpts!=null?chartOpts.zlim:void 0)!=null?ref5:null;zthresh=(ref6=chartOpts!=null?chartOpts.zthresh:void 0)!=null?ref6:null;hilitcolor=(ref7=chartOpts!=null?chartOpts.hilitcolor:void 0)!=null?ref7:"black";tipclass=(ref8=chartOpts!=null?chartOpts.tipclass:void 0)!=null?ref8:"tooltip";xscale=null;yscale=null;zscale=null;cells=null;celltip=null;svg=null;cellSelect=null;chart=function chart(selection,data){var cell,cellrect,i,j,myframe,nx,ny,ref10,ref9,tooltipfunc,xlabels,xmid,xmid_scaled,xv,ylabels,ymid,ymid_scaled,yv,zmax,zmin;margin=d3panels.check_listarg_v_default(margin,{left:60,top:40,right:40,bottom:40,inner:0});if(!(data.x!=null||data.xcat!=null)){d3panels.displayError("heatmap: data.x is missing")}if(!(data.y!=null||data.ycat!=null)){d3panels.displayError("heatmap: data.y is missing")}if(data.z==null){d3panels.displayError("heatmap: data.z is missing")}if(data.xcat!=null){data.x=function(){var results;results=[];for(i in data.xcat){results.push(+i)}return results}();xlim=xlim!=null?xlim:[-.5,data.x.length-.5];chartOpts.xticks=data.x;chartOpts.xlineOpts={color:"none",width:0};chartOpts.xlab=(ref9=chartOpts!=null?chartOpts.xlab:void 0)!=null?ref9:""}if(data.ycat!=null){data.y=function(){var results;results=[];for(i in data.ycat){results.push(+i)}return results}();ylim=ylim!=null?ylim:[-.5,data.x.length-.5];chartOpts.yticks=data.y;chartOpts.ylineOpts={color:"none",width:0};chartOpts.ylab=(ref10=chartOpts!=null?chartOpts.ylab:void 0)!=null?ref10:""}nx=data.x.length;ny=data.y.length;if(data.z.length!==nx){d3panels.displayError("heatmap: data.x.length ("+nx+") != data.z.length ("+data.z.length+")")}for(i in data.z){if(data.z[i].length!==ny){d3panels.displayError("heatmap: data.y.length ("+ny+") != data.z["+i+"].length ("+data.z[i].length+")")}}cells=[];for(i in data.z){for(j in data.z[i]){cells.push({x:data.x[i],y:data.y[j],z:data.z[i][j],xindex:+i,yindex:+j})}}xmid=d3panels.calc_midpoints(d3panels.pad_vector(data.x));ymid=d3panels.calc_midpoints(d3panels.pad_vector(data.y));xlim=xlim!=null?xlim:d3.extent(xmid);ylim=ylim!=null?ylim:d3.extent(ymid);zmin=d3panels.matrixMin(data.z);zmax=d3panels.matrixMaxAbs(data.z);zlim=zlim!=null?zlim:[-zmax,0,zmax];if(zlim.length!==colors.length){d3panels.displayError("heatmap: zlim.length ("+zlim.length+") != colors.length ("+colors.length+")")}zscale=d3.scaleLinear().domain(zlim).range(colors);zthresh=zthresh!=null?zthresh:zmin-1;cells=function(){var k,len,results;results=[];for(k=0,len=cells.length;k<len;k++){cell=cells[k];if(Math.abs(cell.z)>=zthresh){results.push(cell)}}return results}();chartOpts.margin=margin;chartOpts.xlim=xlim;chartOpts.ylim=ylim;chartOpts.xNA=false;chartOpts.yNA=false;myframe=d3panels.panelframe(chartOpts);myframe(selection);svg=myframe.svg();xscale=myframe.xscale();yscale=myframe.yscale();xlabels=myframe.xlabels();ylabels=myframe.ylabels();xmid_scaled=function(){var k,len,results;results=[];for(k=0,len=xmid.length;k<len;k++){xv=xmid[k];results.push(xscale(xv))}return results}();ymid_scaled=function(){var k,len,results;results=[];for(k=0,len=ymid.length;k<len;k++){yv=ymid[k];results.push(yscale(yv))}return results}();d3panels.calc_cell_rect(cells,xmid_scaled,ymid_scaled);cellrect=svg.append("g").attr("id","cells");cellSelect=cellrect.selectAll("empty").data(cells).enter().append("rect").attr("x",function(d){return d.left}).attr("y",function(d){return d.top}).attr("width",function(d){return d.width}).attr("height",function(d){return d.height}).attr("class",function(d,i){return"cell"+i}).attr("fill",function(d){if(d.z!=null){return zscale(d.z)}else{return nullcolor}}).attr("stroke","none").attr("stroke-width","1").attr("shape-rendering","crispEdges").on("mouseover",function(d){d3.select(this).attr("stroke",hilitcolor).raise();if(data.xcat!=null){svg.select("text#xlab"+d.x).attr("opacity",1)}if(data.ycat!=null){return svg.select("text#ylab"+d.y).attr("opacity",1)}}).on("mouseout",function(d){d3.select(this).attr("stroke","none");if(data.xcat!=null){svg.select("text#xlab"+d.x).attr("opacity",0)}if(data.ycat!=null){return svg.select("text#ylab"+d.y).attr("opacity",0)}});tooltipfunc=function tooltipfunc(d,i){var x,y,z;x=d3panels.formatAxis(data.x)(d.x);y=d3panels.formatAxis(data.y)(d.y);z=d3panels.formatAxis([0,zmax/100])(d.z);if(data.xcat!=null&&data.ycat!=null){return""+z}if(data.xcat!=null){return"("+y+") &rarr; "+z}if(data.ycat!=null){return"("+x+") &rarr; "+z}return"("+x+", "+y+") &rarr; "+z};celltip=d3panels.tooltip_create(d3.select("body"),cellrect.selectAll("rect"),{tipclass:tipclass},tooltipfunc);if(data.xcat!=null){xlabels.text(function(d,i){return data.xcat[i]}).attr("opacity",0).attr("id",function(d,i){return"xlab"+data.x[i]})}if(data.ycat!=null){ylabels.text(function(d,i){return data.ycat[i]}).attr("opacity",0).attr("id",function(d,i){return"ylab"+data.y[i]})}return myframe.box().raise()};chart.xscale=function(){return xscale};chart.yscale=function(){return yscale};chart.zscale=function(){return zscale};chart.cells=function(){return cellSelect};chart.celltip=function(){return celltip};chart.svg=function(){return svg};chart.remove=function(){svg.remove();d3panels.tooltip_destroy(celltip);return null};return chart};"use strict";d3panels.lodchart=function(chartOpts){var chart,chrSelect,linecolor,linewidth,markerSelect,markertip,pointcolor,pointsize,pointstroke,ref,ref1,ref2,ref3,ref4,ref5,ref6,_svg,tipclass,_xscale,ylim,_yscale;if(chartOpts==null){chartOpts={}}linecolor=(ref=chartOpts!=null?chartOpts.linecolor:void 0)!=null?ref:"darkslateblue";linewidth=(ref1=chartOpts!=null?chartOpts.linewidth:void 0)!=null?ref1:2;pointcolor=(ref2=chartOpts!=null?chartOpts.pointcolor:void 0)!=null?ref2:"#e9cfec";pointsize=(ref3=chartOpts!=null?chartOpts.pointsize:void 0)!=null?ref3:0;pointstroke=(ref4=chartOpts!=null?chartOpts.pointstroke:void 0)!=null?ref4:"black";ylim=(ref5=chartOpts!=null?chartOpts.ylim:void 0)!=null?ref5:null;tipclass=(ref6=chartOpts!=null?chartOpts.tipclass:void 0)!=null?ref6:"tooltip";_xscale=null;_yscale=null;chrSelect=null;markerSelect=null;markertip=null;_svg=null;chart=function chart(selection,data){var add2chart,i,myframe,self_chart;if(data.chr==null){d3panels.displayError("lodchart: data.chr is missing")}if(data.pos==null){d3panels.displayError("lodchart: data.pos is missing")}if(data.lod==null){d3panels.displayError("lodchart: data.lod is missing")}if(data.marker==null){d3panels.displayError("lodchart: data.marker is missing")}if(data.pos.length!==data.chr.length){d3panels.displayError("lodchart: data.pos.length ("+data.pos.length+") != data.chr.length ("+data.chr.length+")")}if(data.lod.length!==data.chr.length){d3panels.displayError("lodchart: data.lod.length ("+data.lod.length+") != data.chr.length ("+data.chr.length+")")}if(data.marker==null){data.marker=[function(){var results;results=[];for(i in data.chr){results.push("")}return results}()]}if(data.marker.length!==data.chr.length){d3panels.displayError("lodchart: data.marker.length ("+data.marker.length+") != data.chr.length ("+data.chr.length+")")}data=d3panels.add_chrname_start_end(data);data=d3panels.reorgLodData(data);chartOpts.ylim=ylim!=null?ylim:[0,d3.max(data.lod)*1.05];myframe=d3panels.chrpanelframe(chartOpts);myframe(selection,{chr:data.chrname,start:data.chrstart,end:data.chrend});_svg=myframe.svg();_xscale=myframe.xscale();_yscale=myframe.yscale();chrSelect=myframe.chrSelect();self_chart={svg:function svg(){return _svg},xscale:function xscale(){return _xscale},yscale:function yscale(){return _yscale}};add2chart=d3panels.add_lodcurve(chartOpts);add2chart(self_chart,data);markerSelect=add2chart.markerSelect();markertip=add2chart.markertip();return myframe.box().raise()};chart.xscale=function(){return _xscale};chart.yscale=function(){return _yscale};chart.chrSelect=function(){return chrSelect};chart.markerSelect=function(){return markerSelect};chart.markertip=function(){return markertip};chart.svg=function(){return _svg};chart.remove=function(){_svg.remove();d3panels.tooltip_destroy(markertip);return null};return chart};"use strict";d3panels.add_lodcurve=function(chartOpts){var chart,g,horizontal,linecolor,linedash,linewidth,markerSelect,markertip,pointcolor,pointsize,pointstroke,ref,ref1,ref2,ref3,ref4,ref5,ref6,ref7,tipclass;if(chartOpts==null){chartOpts={}}linecolor=(ref=chartOpts!=null?chartOpts.linecolor:void 0)!=null?ref:"darkslateblue";linewidth=(ref1=chartOpts!=null?chartOpts.linewidth:void 0)!=null?ref1:2;linedash=(ref2=chartOpts!=null?chartOpts.linedash:void 0)!=null?ref2:"";pointcolor=(ref3=chartOpts!=null?chartOpts.pointcolor:void 0)!=null?ref3:"#e9cfec";pointsize=(ref4=chartOpts!=null?chartOpts.pointsize:void 0)!=null?ref4:0;pointstroke=(ref5=chartOpts!=null?chartOpts.pointstroke:void 0)!=null?ref5:"black";tipclass=(ref6=chartOpts!=null?chartOpts.tipclass:void 0)!=null?ref6:"tooltip";horizontal=(ref7=chartOpts!=null?chartOpts.horizontal:void 0)!=null?ref7:false;markerSelect=null;markertip=null;g=null;chart=function chart(prevchart,data){var bigpointsize,chr,curves,hiddenpoints,i,j,len,lodcurve,markerpoints,ref8,svg,xscale,yscale;if(data.chr==null){d3panels.displayError("add_lodcurve: data.chr is missing")}if(data.pos==null){d3panels.displayError("add_lodcurve: data.pos is missing")}if(data.lod==null){d3panels.displayError("add_lodcurve: data.lod is missing")}if(data.marker==null){d3panels.displayError("add_lodcurve: data.marker is missing")}if(data.pos.length!==data.chr.length){d3panels.displayError("add_lodcurve: data.pos.length ("+data.pos.length+") != data.chr.length ("+data.chr.length+")")}if(data.lod.length!==data.chr.length){d3panels.displayError("add_lodcurve: data.lod.length ("+data.lod.length+") != data.chr.length ("+data.chr.length+")")}if(data.marker==null){data.marker=[function(){var results;results=[];for(i in data.chr){results.push("")}return results}()]}if(data.marker.length!==data.chr.length){d3panels.displayError("add_lodcurve: data.marker.length ("+data.lod.length+") != data.chr.length ("+data.chr.length+")")}data=d3panels.add_chrname_start_end(data);if(!(data.posByChr!=null&&data.lodByChr!=null&&data.markerinfo!=null)){data=d3panels.reorgLodData(data)}svg=prevchart.svg();g=svg.append("g").attr("id","lod_curve");xscale=prevchart.xscale();yscale=prevchart.yscale();lodcurve=function lodcurve(chr){return d3.line().x(function(d,i){if(horizontal){return yscale(data.lodByChr[chr][i])}return xscale[chr](d)}).y(function(d,i){if(horizontal){return xscale[chr](d)}return yscale(data.lodByChr[chr][i])})};if(linewidth>0){curves=g.append("g").attr("id","curves");ref8=data.chrname;for(j=0,len=ref8.length;j<len;j++){chr=ref8[j];curves.append("path").datum(data.posByChr[chr]).attr("d",lodcurve(chr)).attr("stroke",linecolor).attr("fill","none").attr("stroke-width",linewidth).attr("stroke-dasharray",linedash).style("pointer-events","none")}}if(pointsize>0){markerpoints=g.append("g").attr("id","markerpoints_visible");markerpoints.selectAll("empty").data(data.markerinfo).enter().append("circle").attr("cx",function(d){if(horizontal){return yscale(d.lod)}return xscale[d.chr](d.pos)}).attr("cy",function(d){if(horizontal){return xscale[d.chr](d.pos)}return yscale(d.lod)}).attr("r",function(d){if(d.lod!=null){return pointsize}else{return null}}).attr("fill",pointcolor).attr("stroke",pointstroke).attr("pointer-events","hidden")}hiddenpoints=g.append("g").attr("id","markerpoints_hidden");bigpointsize=d3.max([2*pointsize,3]);markerSelect=hiddenpoints.selectAll("empty").data(data.markerinfo).enter().append("circle").attr("cx",function(d){if(horizontal){return yscale(d.lod)}return xscale[d.chr](d.pos)}).attr("cy",function(d){if(horizontal){return xscale[d.chr](d.pos)}return yscale(d.lod)}).attr("id",function(d){return d.name}).attr("r",function(d){if(d.lod!=null){return bigpointsize}else{return null}}).attr("opacity",0).attr("fill",pointcolor).attr("stroke",pointstroke).attr("stroke-width","1").on("mouseover",function(d){return d3.select(this).attr("opacity",1)}).on("mouseout",function(){return d3.select(this).attr("opacity",0)});return markertip=d3panels.tooltip_create(d3.select("body"),markerSelect,{tipclass:tipclass},function(d,i){return[d.name," LOD = "+d3.format(".2f")(d.lod)]})};chart.markerSelect=function(){return markerSelect};chart.markertip=function(){return markertip};chart.remove=function(){g.remove();d3panels.tooltip_destroy(markertip);return null};return chart};"use strict";d3panels.add_curves=function(chartOpts){var chart,curveGroup,curves,indtip,linecolor,linecolorhilit,linewidth,linewidthhilit,ref,ref1,ref2,ref3,ref4,tipclass;if(chartOpts==null){chartOpts={}}linecolor=(ref=chartOpts!=null?chartOpts.linecolor:void 0)!=null?ref:null;linecolorhilit=(ref1=chartOpts!=null?chartOpts.linecolorhilit:void 0)!=null?ref1:null;linewidth=(ref2=chartOpts!=null?chartOpts.linewidth:void 0)!=null?ref2:2;linewidthhilit=(ref3=chartOpts!=null?chartOpts.linewidthhilit:void 0)!=null?ref3:2;tipclass=(ref4=chartOpts!=null?chartOpts.tipclass:void 0)!=null?ref4:"tooltip";curves=null;indtip=null;curveGroup=null;chart=function chart(prevchart,data){var curvefunc,dataByPoint,g,group,i,indID,j,k,n_ind,ngroup,ref5,ref6,ref7,svg,x,xscale,y,yscale;if(data.x==null){d3panels.displayError("add_curves: data.x is missing")}if(data.y==null){d3panels.displayError("add_curves: data.y is missing")}x=function(){var k,len,ref5,results;ref5=data.x;results=[];for(k=0,len=ref5.length;k<len;k++){x=ref5[k];results.push(d3panels.missing2null(x))}return results}();y=function(){var k,len,ref5,results;ref5=data.y;results=[];for(k=0,len=ref5.length;k<len;k++){y=ref5[k];results.push(d3panels.missing2null(y))}return results}();n_ind=y.length;if(x.length===1&&y.length>1){for(j=k=2,ref5=n_ind;2<=ref5?k<=ref5:k>=ref5;j=2<=ref5?++k:--k){x.push(x[0])}}if(x.length!==n_ind){d3panels.displayError("add_curves: data.x.length ("+x.length+") != data.y.length ("+n_ind+")")}indID=(ref6=data!=null?data.indID:void 0)!=null?ref6:function(){var results=[];for(var l=1;1<=n_ind?l<=n_ind:l>=n_ind;1<=n_ind?l++:l--){results.push(l)}return results}.apply(this);if(indID.length!==n_ind){d3panels.displayError("add_curves: data.indID.length ("+indID.length+") != data.y.length ("+n_ind+")")}group=(ref7=data!=null?data.group:void 0)!=null?ref7:function(){var results;results=[];for(i in y){results.push(1)}return results}();group=d3panels.expand2vector(group,n_ind);ngroup=d3.max(group);group=function(){var l,len,results;results=[];for(l=0,len=group.length;l<len;l++){g=group[l];results.push(g!=null?g-1:g)}return results}();if(d3panels.sumArray(function(){var l,len,results;results=[];for(l=0,len=group.length;l<len;l++){g=group[l];results.push(g<0||g>ngroup-1)}return results}())>0){d3panels.displayError("add_curves: group values out of range");console.log("distinct groups: "+d3panels.unique(group))}if(group.length!==n_ind){d3panels.displayError("add_curves: data.group.length ("+group.length+") != data.y.length ("+n_ind+")")}for(i in y){if(x[i].length!==y[i].length){d3panels.displayError("add_curves: length(x) ("+x[i].length+") != length(y) ("+y[i].length+") for individual "+indID[i]+" (index "+(i+1)+")")}}linecolor=linecolor!=null?linecolor:d3panels.selectGroupColors(ngroup,"pastel");linecolor=d3panels.expand2vector(linecolor,ngroup);linecolorhilit=linecolorhilit!=null?linecolorhilit:d3panels.selectGroupColors(ngroup,"dark");linecolorhilit=d3panels.expand2vector(linecolorhilit,ngroup);svg=prevchart.svg();xscale=prevchart.xscale();yscale=prevchart.yscale();dataByPoint=[];for(i in y){dataByPoint.push(function(){var results;results=[];for(j in y[i]){if(x[i][j]!=null&&y[i][j]!=null){results.push({x:x[i][j],y:y[i][j]})}}return results}())}curvefunc=d3.line().x(function(d){return xscale(d.x)}).y(function(d){return yscale(d.y)});curveGroup=svg.append("g").attr("id","curves");curves=curveGroup.selectAll("empty").data(d3.range(n_ind)).enter().append("path").datum(function(d){return dataByPoint[d]}).attr("d",curvefunc).attr("class",function(d,i){return"path"+i}).attr("fill","none").attr("stroke",function(d,i){return linecolor[group[i]]}).attr("stroke-width",linewidth).on("mouseover.panel",function(d,i){return d3.select(this).attr("stroke",linecolorhilit[group[i]]).attr("stroke-width",linewidthhilit).raise()}).on("mouseout.panel",function(d,i){return d3.select(this).attr("stroke",linecolor[group[i]]).attr("stroke-width",linewidth)});indtip=d3panels.tooltip_create(d3.select("body"),curves,{tipclass:tipclass},function(d,i){return indID[i]});return prevchart.box().raise()};chart.curves=function(){return curves};chart.indtip=function(){return indtip};chart.remove=function(){curveGroup.remove();d3panels.tooltip_destroy(indtip);return null};return chart};"use strict";d3panels.add_points=function(chartOpts){var chart,indtip,jitter,pointGroup,pointcolor,points,pointsize,pointstroke,ref,ref1,ref2,ref3,ref4,tipclass;if(chartOpts==null){chartOpts={}}pointcolor=(ref=chartOpts!=null?chartOpts.pointcolor:void 0)!=null?ref:null;pointsize=(ref1=chartOpts!=null?chartOpts.pointsize:void 0)!=null?ref1:3;pointstroke=(ref2=chartOpts!=null?chartOpts.pointstroke:void 0)!=null?ref2:"black";jitter=(ref3=chartOpts!=null?chartOpts.jitter:void 0)!=null?ref3:"beeswarm";tipclass=(ref4=chartOpts!=null?chartOpts.tipclass:void 0)!=null?ref4:"tooltip";points=null;indtip=null;pointGroup=null;chart=function chart(prevchart,data){var force,g,group,i,indID,ngroup,ref5,ref6,ref7,scaledPoints,svg,ux,uy,x,xscale,xwid,y,yscale,ywid;if(data.x==null){d3panels.displayError("add_points: data.x is missing")}if(data.y==null){d3panels.displayError("add_points: data.y is missing")}x=d3panels.missing2null(data.x);y=d3panels.missing2null(data.y);if(x.length!==y.length){d3panels.displayError("add_points: x.length ("+x.length+") != y.length ("+y.length+")")}indID=(ref5=data!=null?data.indID:void 0)!=null?ref5:null;indID=indID!=null?indID:function(){var results=[];for(var j=1,ref6=x.length;1<=ref6?j<=ref6:j>=ref6;1<=ref6?j++:j--){results.push(j)}return results}.apply(this);if(indID.length!==x.length){d3panels.displayError("add_points: indID.length ("+indID.length+") != x.length ("+x.length+")")}group=(ref7=data!=null?data.group:void 0)!=null?ref7:function(){var j,len,results;results=[];for(j=0,len=x.length;j<len;j++){i=x[j];results.push(1)}return results}();group=d3panels.expand2vector(group,x.length);ngroup=d3.max(group);group=function(){var j,len,results;results=[];for(j=0,len=group.length;j<len;j++){g=group[j];results.push(g!=null?g-1:g)}return results}();if(d3panels.sumArray(function(){var j,len,results;results=[];for(j=0,len=group.length;j<len;j++){g=group[j];results.push(g<0||g>ngroup-1)}return results}())>0){d3panels.displayError("add_points: group values out of range");console.log("ngroup: "+ngroup);console.log("distinct groups: "+d3panels.unique(group))}if(group.length!==x.length){d3panels.displayError("add_points: group.length ("+group.length+") != x.length ("+x.length+")")}pointcolor=pointcolor!=null?pointcolor:d3panels.selectGroupColors(ngroup,"dark");pointcolor=d3panels.expand2vector(pointcolor,ngroup);if(pointcolor.length<ngroup){d3panels.displayError("add_points: pointcolor.length ("+pointcolor.length+") < ngroup ("+ngroup+")")}svg=prevchart.svg();xscale=prevchart.xscale();yscale=prevchart.yscale();pointGroup=svg.append("g").attr("id","points");points=pointGroup.selectAll("empty").data(d3.range(x.length)).enter().append("circle").attr("cx",function(d,i){return xscale(x[i])}).attr("cy",function(d,i){return yscale(y[i])}).attr("class",function(d,i){return"pt"+i}).attr("r",pointsize).attr("fill",function(d,i){return pointcolor[group[i]]}).attr("stroke",pointstroke).attr("stroke-width","1");indtip=d3panels.tooltip_create(d3.select("body"),points,{tipclass:tipclass},function(d,i){return indID[i]});if(prevchart.xNA()||prevchart.yNA()){if(jitter==="random"){xwid=20-pointsize-2;xwid=xwid<=2?2:xwid;ywid=20-pointsize-2;ywid=ywid<=2?2:ywid;ux=function(){var results;results=[];for(i in x){results.push((Math.random()-.5)*xwid)}return results}();uy=function(){var results;results=[];for(i in x){results.push((Math.random()-.5)*ywid)}return results}();points.attr("cx",function(d,i){if(x[i]!=null){return xscale(x[i])}return xscale(x[i])+ux[i]}).attr("cy",function(d,i){if(y[i]!=null){return yscale(y[i])}return yscale(y[i])+uy[i]})}else if(jitter==="beeswarm"){scaledPoints=function(){var results;results=[];for(i in x){results.push({x:xscale(x[i]),y:yscale(y[i]),xnull:x[i]==null,ynull:y[i]==null})}return results}();d3.range(scaledPoints.length).map(function(i){if(!scaledPoints[i].xnull){scaledPoints[i].fx=scaledPoints[i].x}if(!scaledPoints[i].ynull){return scaledPoints[i].fy=scaledPoints[i].y}});force=d3.forceSimulation(scaledPoints).force("x",d3.forceX(function(d){return d.x})).force("y",d3.forceY(function(d){return d.y})).force("collide",d3.forceCollide(pointsize*1.1)).stop();(function(){var results=[];for(var j=0;j<=30;j++){results.push(j)}return results}).apply(this).map(function(d){force.tick();return points.attr("cx",function(d,i){return scaledPoints[i].x}).attr("cy",function(d,i){return scaledPoints[i].y})})}else if(jitter!=="none"){d3panels.displayError('add_points: jitter should be "beeswarm", "random", or "none"')}}return prevchart.box().raise()};chart.points=function(){return points};chart.indtip=function(){return indtip};chart.remove=function(){pointGroup.remove();d3panels.tooltip_destroy(indtip);return null};return chart};"use strict";d3panels.lodheatmap=function(chartOpts){var cellSelect,cells,celltip,chart,chrGap,colors,equalCells,height,hilitcolor,horizontal,margin,nullcolor,ref,ref1,ref10,ref11,ref12,ref13,ref14,ref2,ref3,ref4,ref5,ref6,ref7,ref8,ref9,svg,tipclass,width,xlab,xscale,ylab,ylim,yscale,zlim,zscale,zthresh;if(chartOpts==null){chartOpts={}}width=(ref=chartOpts!=null?chartOpts.width:void 0)!=null?ref:800;height=(ref1=chartOpts!=null?chartOpts.height:void 0)!=null?ref1:500;margin=(ref2=chartOpts!=null?chartOpts.margin:void 0)!=null?ref2:{left:60,top:40,right:40,bottom:40};colors=(ref3=chartOpts!=null?chartOpts.colors:void 0)!=null?ref3:["slateblue","white","crimson"];nullcolor=(ref4=chartOpts!=null?chartOpts.nullcolor:void 0)!=null?ref4:"#e6e6e6";xlab=(ref5=chartOpts!=null?chartOpts.xlab:void 0)!=null?ref5:null;ylab=(ref6=chartOpts!=null?chartOpts.ylab:void 0)!=null?ref6:"";ylim=(ref7=chartOpts!=null?chartOpts.ylim:void 0)!=null?ref7:null;zlim=(ref8=chartOpts!=null?chartOpts.zlim:void 0)!=null?ref8:null;zthresh=(ref9=chartOpts!=null?chartOpts.zthresh:void 0)!=null?ref9:null;horizontal=(ref10=chartOpts!=null?chartOpts.horizontal:void 0)!=null?ref10:false;hilitcolor=(ref11=chartOpts!=null?chartOpts.hilitcolor:void 0)!=null?ref11:"black";chrGap=(ref12=chartOpts!=null?chartOpts.chrGap:void 0)!=null?ref12:6;equalCells=(ref13=chartOpts!=null?chartOpts.equalCells:void 0)!=null?ref13:false;tipclass=(ref14=chartOpts!=null?chartOpts.tipclass:void 0)!=null?ref14:"tooltip";xscale=null;yscale=null;zscale=null;cells=null;celltip=null;svg=null;cellSelect=null;chart=function chart(selection,data){var cellg,celltipfunc,chr,direction,i,j,k,l,len,len1,len2,len3,len4,lod,m,myframe,n,n_lod,n_pos,o,pos,ref15,ref16,ref17,ref18,ref19,x,xmid_scaled,y,ylabels,ymid,ymid_scaled,yv,zmax,zmin;margin=d3panels.check_listarg_v_default(margin,{left:60,top:40,right:40,bottom:40});if(data.chr==null){d3panels.displayError("lodheatmap: data.chr is missing")}if(data.pos==null){d3panels.displayError("lodheatmap: data.pos is missing")}if(data.lod==null){d3panels.displayError("lodheatmap: data.lod is missing")}if(data.ycat!=null){data.y=function(){var results;results=[];for(i in data.ycat){results.push(i+1)}return results}()}if(data.y==null){data.ycat=function(){var results;results=[];for(i in data.lod[0]){results.push(i+1)}return results}();data.y=function(){var results;results=[];for(i in data.lod[0]){results.push(i+1)}return results}()}data.y=function(){var k,len,ref15,results;ref15=data.y;results=[];for(k=0,len=ref15.length;k<len;k++){yv=ref15[k];results.push(+yv)}return results}();n_pos=data.chr.length;n_lod=data.y.length;if(n_pos!==data.pos.length){d3panels.displayError("lodheatmap: data.pos.length ("+data.pos.length+") != data.chr.length ("+n_pos+")")}if(n_pos!==data.lod.length){d3panels.displayError("lodheatmap: data.lod.length ("+data.lod.length+") != data.chr.length ("+n_pos+")")}for(i in data.lod){if(data.lod[i].length!==data.y.length){d3panels.displayError("lodheatmap: data.lod["+i+"].length ("+data.lod[i].length+") != data.y.length ("+n_lod+")")}}if(data.poslabel!=null){if(data.poslabel.length!==n_pos){d3panels.displayError("lodheatmap: data.poslabel.length ("+data.poslabel.length+") != data.chr.length ("+n_pos+")")}}else{data.poslabel=function(){var results;results=[];for(i in data.chr){results.push(data.chr[i]+"@"+d3panels.formatAxis(data.pos)(data.pos[i]))}return results}()}if(data.chrname==null){data.chrname=d3panels.unique(data.chr)}data.chrname=d3panels.forceAsArray(data.chrname);if(equalCells){data.pos=[];ref15=data.chrname;for(k=0,len=ref15.length;k<len;k++){chr=ref15[k];data.pos=data.pos.concat(function(){var results;results=[];for(i in data.chr){if(data.chr[i]===chr){results.push(+i)}}return results}())}}data=d3panels.add_chrname_start_end(data);if(equalCells){chrGap=(width-margin.left-margin.right-2*data.chrname.length)/data.chr.length+2}data=d3panels.reorgLodData(data);ymid=d3panels.calc_midpoints(d3panels.pad_vector(data.y));chartOpts.ylim=ylim!=null?ylim:d3.extent(ymid);chartOpts.horizontal=horizontal;chartOpts.xlab=xlab;chartOpts.ylab=ylab;chartOpts.chrGap=chrGap;chartOpts.width=width;chartOpts.height=height;chartOpts.margin=margin;if(data.ycat!=null){chartOpts.yticks=data.y;chartOpts.yticklab=data.ycat}myframe=d3panels.chrpanelframe(chartOpts);myframe(selection,{chr:data.chrname,start:data.chrstart,end:data.chrend});svg=myframe.svg();xscale=myframe.xscale();yscale=myframe.yscale();ylabels=myframe.ylabels();ymid_scaled=function(){var l,len1,results;results=[];for(l=0,len1=ymid.length;l<len1;l++){y=ymid[l];results.push(yscale(y))}return results}();xmid_scaled={};ref16=data.chrname;for(l=0,len1=ref16.length;l<len1;l++){chr=ref16[l];xmid_scaled[chr]=d3panels.calc_midpoints(d3panels.pad_vector(function(){var len2,m,ref17,results;ref17=data.posByChr[chr];results=[];for(m=0,len2=ref17.length;m<len2;m++){x=ref17[m];results.push(xscale[chr](x))}return results}(),(chrGap-2)/2))}zmin=d3panels.matrixMin(data.lod);zmax=d3panels.matrixMaxAbs(data.lod);zlim=zlim!=null?zlim:[-zmax,0,zmax];if(zlim.length!==colors.length){d3panels.displayError("lodheatmap: zlim.length ("+zlim.length+") != colors.length ("+colors.length+")")}zscale=d3.scaleLinear().domain(zlim).range(colors);zthresh=zthresh!=null?zthresh:zmin-1;cells=[];ref17=data.chrname;for(m=0,len2=ref17.length;m<len2;m++){chr=ref17[m];ref18=data.posByChr[chr];for(i=n=0,len3=ref18.length;n<len3;i=++n){pos=ref18[i];ref19=data.lodByChr[chr][i];for(j=o=0,len4=ref19.length;o<len4;j=++o){lod=ref19[j];if(Math.abs(lod)>=zthresh){cells.push({lod:lod,chr:chr,pos:pos,poslabel:data.poslabelByChr[chr][i],posindex:+i,lodindex:+j})}}}}d3panels.calc_chrcell_rect(cells,xmid_scaled,ymid_scaled);cellg=svg.append("g").attr("id","cells");cellSelect=cellg.selectAll("empty").data(cells).enter().append("rect").attr("x",function(d){if(horizontal){return d.top}return d.left}).attr("y",function(d){if(horizontal){return d.left}return d.top}).attr("width",function(d){if(horizontal){return d.height}return d.width}).attr("height",function(d){if(horizontal){return d.width}return d.height}).attr("class",function(d,i){return"cell"+i}).attr("fill",function(d){if(d.lod!=null){return zscale(d.lod)}else{return nullcolor}}).attr("stroke","none").attr("stroke-width","1").attr("shape-rendering","crispEdges").on("mouseover",function(d){d3.select(this).attr("stroke",hilitcolor).raise();if(data.ycat!=null){return svg.select("text#ylab"+d.lodindex).attr("opacity",1)}}).on("mouseout",function(d){d3.select(this).attr("stroke","none");if(data.ycat!=null){return svg.select("text#ylab"+d.lodindex).attr("opacity",0)}});if(data.ycat!=null){svg.selectAll("g#ylines").remove();ylabels.attr("opacity",0).attr("id",function(d,i){return"ylab"+i})}celltipfunc=function celltipfunc(d){var lodlabel,z;z=d3.format(".2f")(Math.abs(d.lod));lodlabel=data.ycat!=null?data.ycat[d.lodindex]:d3panels.formatAxis(data.y)(data.y[d.lodindex]);if(horizontal){return lodlabel+", "+d.poslabel+" &rarr; "+z}return d.poslabel+", "+lodlabel+" &rarr; "+z};direction=horizontal?"north":"east";celltip=d3panels.tooltip_create(d3.select("body"),cellg.selectAll("rect"),{direction:direction,tipclass:tipclass},celltipfunc);return myframe.box().raise()};chart.xscale=function(){return xscale};chart.yscale=function(){return yscale};chart.zscale=function(){return yscale};chart.cells=function(){return cellSelect};chart.celltip=function(){return celltip};chart.svg=function(){return svg};chart.remove=function(){svg.remove();d3panels.tooltip_destroy(celltip);return null};return chart};"use strict";d3panels.mapchart=function(chartOpts){var chart,horizontal,linecolor,linecolorhilit,linewidth,markerSelect,martip,ref,ref1,ref10,ref2,ref3,ref4,ref5,ref6,ref7,ref8,ref9,shiftStart,svg,tickwidth,tipclass,v_over_h,xlab,xlineOpts,xscale,ylab,yscale;if(chartOpts==null){chartOpts={}}tickwidth=(ref=chartOpts!=null?chartOpts.tickwidth:void 0)!=null?ref:10;linecolor=(ref1=chartOpts!=null?chartOpts.linecolor:void 0)!=null?ref1:"slateblue";linecolorhilit=(ref2=chartOpts!=null?chartOpts.linecolorhilit:void 0)!=null?ref2:"Orchid";linewidth=(ref3=chartOpts!=null?chartOpts.linewidth:void 0)!=null?ref3:3;xlab=(ref4=chartOpts!=null?chartOpts.xlab:void 0)!=null?ref4:"Chromosome";ylab=(ref5=chartOpts!=null?chartOpts.ylab:void 0)!=null?ref5:"Position (cM)";xlineOpts=(ref6=chartOpts!=null?chartOpts.xlineOpts:void 0)!=null?ref6:{color:"#cdcdcd",width:5};horizontal=(ref7=chartOpts!=null?chartOpts.horizontal:void 0)!=null?ref7:false;v_over_h=(ref8=chartOpts!=null?chartOpts.v_over_h:void 0)!=null?ref8:horizontal;shiftStart=(ref9=chartOpts!=null?chartOpts.shiftStart:void 0)!=null?ref9:false;tipclass=(ref10=chartOpts!=null?chartOpts.tipclass:void 0)!=null?ref10:"tooltip";xscale=null;yscale=null;markerSelect=null;martip=null;svg=null;chart=function chart(selection,data){var chr,chrscale,direction,extentByChr,i,j,k,l,len,len1,markerpos,markers,minpos,myframe,n_chr,n_pos,pos,ref11,ref12,these_index,these_pos,tipfunc,x,xlim,xticklab,xticks,ylim;xlineOpts=d3panels.check_listarg_v_default(xlineOpts,{color:"#cdcdcd",width:5});if(data.chr==null){d3panels.displayError("mapchart: data.chr is missing")}if(data.pos==null){d3panels.displayError("mapchart: data.pos is missing")}if(data.marker==null){d3panels.displayError("mapchart: data.marker is missing")}n_pos=data.pos.length;if(data.chr.length!==n_pos){d3panels.displayError("mapchart: data.chr.length ("+data.chr.length+") != data.pos.length ("+n_pos+")")}if(data.marker.length!==n_pos){d3panels.displayError("mapchart: data.marker.length ("+data.marker.length+") != data.pos.length ("+n_pos+")")}if(data.chrname==null){data.chrname=d3panels.unique(data.chr)}data.chrname=d3panels.forceAsArray(data.chrname);data.adjpos=data.pos.slice(0);if(shiftStart){ref11=data.chrname;for(k=0,len=ref11.length;k<len;k++){chr=ref11[k];these_pos=function(){var results;results=[];for(i in data.pos){if(data.chr[i]===chr){results.push(data.pos[i])}}return results}();these_index=function(){var results;results=[];for(i in data.pos){if(data.chr[i]===chr){results.push(i)}}return results}();minpos=d3.min(these_pos);these_pos=function(){var l,len1,results;results=[];for(l=0,len1=these_pos.length;l<len1;l++){x=these_pos[l];results.push(x-minpos)}return results}();for(j in these_pos){data.adjpos[these_index[j]]=these_pos[j]}}}extentByChr={};ref12=data.chrname;for(l=0,len1=ref12.length;l<len1;l++){chr=ref12[l];pos=function(){var results;results=[];for(i in data.adjpos){if(data.chr[i]===chr){results.push(data.adjpos[i])}}return results}();extentByChr[chr]=d3.extent(pos)}ylim=ylim!=null?ylim:d3.extent(data.adjpos);n_chr=data.chrname.length;xlim=[.5,n_chr+.5];xticks=function(){var len2,m,ref13,results;ref13=d3.range(n_chr);results=[];for(m=0,len2=ref13.length;m<len2;m++){i=ref13[m];results.push(i+1)}return results}();xticklab=data.chrname;chartOpts.xNA=false;chartOpts.yNA=false;if(horizontal){chartOpts.xlim=ylim;chartOpts.ylim=xlim.reverse();chartOpts.xlineOpts=chartOpts.ylineOpts;chartOpts.ylineOpts=xlineOpts;chartOpts.xlab=ylab;chartOpts.ylab=xlab;chartOpts.xticks=chartOpts.yticks;chartOpts.yticks=xticks;chartOpts.nxticks=chartOpts.nyticks;chartOpts.xticklab=chartOpts.yticklab;chartOpts.yticklab=xticklab;chartOpts.v_over_h=v_over_h}else{chartOpts.xlim=xlim;chartOpts.ylim=ylim.reverse();chartOpts.xlineOpts=xlineOpts;chartOpts.xlab=xlab;chartOpts.ylab=ylab;chartOpts.xticks=xticks;chartOpts.xticklab=xticklab;chartOpts.v_over_h=v_over_h}myframe=d3panels.panelframe(chartOpts);myframe(selection);svg=myframe.svg();xscale=myframe.xscale();yscale=myframe.yscale();chrscale=function chrscale(chr){var chrpos;chrpos=data.chrname.indexOf(chr)+1;if(!horizontal){return xscale(chrpos)}return yscale(chrpos)};svg.append("g").attr("id","chromosomes").selectAll("empty").data(data.chrname).enter().append("line").attr("x1",function(d){if(horizontal){return xscale(extentByChr[d][0])}return chrscale(d)}).attr("x2",function(d){if(horizontal){return xscale(extentByChr[d][1])}return chrscale(d)}).attr("y1",function(d){if(horizontal){return chrscale(d)}return yscale(extentByChr[d][0])}).attr("y2",function(d){if(horizontal){return chrscale(d)}return yscale(extentByChr[d][1])}).attr("fill","none").attr("stroke",linecolor).attr("stroke-width",linewidth).attr("shape-rendering","crispEdges").style("pointer-events","none");markerpos={};for(i in data.marker){markerpos[data.marker[i]]=d3.format(".1f")(data.pos[i])}markers=svg.append("g").attr("id","points");markerSelect=markers.selectAll("empty").data(data.marker).enter().append("line").attr("x1",function(d,i){if(horizontal){return xscale(data.adjpos[i])}return chrscale(data.chr[i])-tickwidth}).attr("x2",function(d,i){if(horizontal){return xscale(data.adjpos[i])}return chrscale(data.chr[i])+tickwidth}).attr("y1",function(d,i){if(horizontal){return chrscale(data.chr[i])-tickwidth}return yscale(data.adjpos[i])}).attr("y2",function(d,i){if(horizontal){return chrscale(data.chr[i])+tickwidth}return yscale(data.adjpos[i])}).attr("id",function(d){return d}).attr("fill","none").attr("stroke",linecolor).attr("stroke-width",linewidth).attr("shape-rendering","crispEdges").on("mouseover.paneltip",function(d){return d3.select(this).attr("stroke",linecolorhilit)}).on("mouseout.paneltip",function(){return d3.select(this).attr("stroke",linecolor)});tipfunc=function tipfunc(d,i){return d+" ("+markerpos[d]+")"};direction=horizontal?"north":"east";martip=d3panels.tooltip_create(d3.select("body"),markers.selectAll("line"),{direction:direction,tipclass:tipclass},tipfunc);return myframe.box().raise()};chart.xscale=function(){return xscale};chart.yscale=function(){return yscale};chart.markerSelect=function(){return markerSelect};chart.martip=function(){return martip};chart.svg=function(){return svg};chart.remove=function(){svg.remove();d3panels.tooltip_destroy(martip);return null};return chart};"use strict";d3panels.scatterplot=function(chartOpts){var chart,indtip,jitter,pointcolor,points,pointsize,pointstroke,ref,ref1,ref10,ref2,ref3,ref4,ref5,ref6,ref7,ref8,ref9,svg,tipclass,xNA,xNA_size,xlim,xscale,yNA,yNA_size,ylim,yscale;if(chartOpts==null){chartOpts={}}xNA=(ref=chartOpts!=null?chartOpts.xNA:void 0)!=null?ref:{handle:true,force:false};yNA=(ref1=chartOpts!=null?chartOpts.yNA:void 0)!=null?ref1:{handle:true,force:false};xNA_size=(ref2=chartOpts!=null?chartOpts.xNA_size:void 0)!=null?ref2:{width:20,gap:10};yNA_size=(ref3=chartOpts!=null?chartOpts.yNA_size:void 0)!=null?ref3:{width:20,gap:10};xlim=(ref4=chartOpts!=null?chartOpts.xlim:void 0)!=null?ref4:null;ylim=(ref5=chartOpts!=null?chartOpts.ylim:void 0)!=null?ref5:null;pointcolor=(ref6=chartOpts!=null?chartOpts.pointcolor:void 0)!=null?ref6:null;pointstroke=(ref7=chartOpts!=null?chartOpts.pointstroke:void 0)!=null?ref7:"black";pointsize=(ref8=chartOpts!=null?chartOpts.pointsize:void 0)!=null?ref8:3;jitter=(ref9=chartOpts!=null?chartOpts.jitter:void 0)!=null?ref9:"beeswarm";tipclass=(ref10=chartOpts!=null?chartOpts.tipclass:void 0)!=null?ref10:"tooltip";xscale=null;yscale=null;xNA=xNA;yNA=yNA;points=null;indtip=null;svg=null;chart=function chart(selection,data){var addpts,myframe,x,y;xNA=d3panels.check_listarg_v_default(xNA,{handle:true,force:false});yNA=d3panels.check_listarg_v_default(yNA,{handle:true,force:false});xNA_size=d3panels.check_listarg_v_default(xNA,{width:20,gap:10});yNA_size=d3panels.check_listarg_v_default(yNA,{width:20,gap:10});if(data.x==null){d3panels.displayError("scatterplot: data.x is missing")}if(data.y==null){d3panels.displayError("scatterplot: data.y is missing")}x=d3panels.missing2null(data.x);y=d3panels.missing2null(data.y);if(x.length!==y.length){d3panels.displayError("scatterplot: x.length ("+x.length+") != y.length ("+y.length+")")}xNA.handle=xNA.force||xNA.handle&&!x.every(function(v){return v!=null});yNA.handle=yNA.force||yNA.handle&&!y.every(function(v){return v!=null});xlim=xlim!=null?xlim:d3panels.pad_ylim(d3.extent(x));ylim=ylim!=null?ylim:d3panels.pad_ylim(d3.extent(y));chartOpts.xlim=xlim;chartOpts.ylim=ylim;chartOpts.xNA=xNA.handle;chartOpts.yNA=yNA.handle;chartOpts.xNA_size=xNA_size;chartOpts.yNA_size=yNA_size;myframe=d3panels.panelframe(chartOpts);myframe(selection);svg=myframe.svg();xscale=myframe.xscale();yscale=myframe.yscale();addpts=d3panels.add_points({pointcolor:pointcolor,pointstroke:pointstroke,pointsize:pointsize,jitter:jitter,tipclass:tipclass});addpts(myframe,{x:x,y:y,indID:data.indID,group:data.group});points=addpts.points();return indtip=addpts.indtip()};chart.xscale=function(){return xscale};chart.yscale=function(){return yscale};chart.xNA=function(){return xNA.handle};chart.yNA=function(){return yNA.handle};chart.points=function(){return points};chart.indtip=function(){return indtip};chart.svg=function(){return svg};chart.remove=function(){svg.remove();d3panels.tooltip_destroy(indtip);return null};return chart};"use strict";d3panels.trichart=function(chartOpts){var boxcolor,boxwidth,chart,gridcolor,gridlines,gridwidth,height,indtip,labelpos,labels,margin,pointcolor,points,pointsize,pointstroke,pscale,rectcolor,ref,ref1,ref10,ref11,ref12,ref13,ref14,ref15,ref16,ref2,ref3,ref4,ref5,ref6,ref7,ref8,ref9,svg,tipclass,title,titlepos,width,xscale,yscale;if(chartOpts==null){chartOpts={}}width=(ref=chartOpts!=null?chartOpts.width:void 0)!=null?ref:600;height=(ref1=chartOpts!=null?chartOpts.height:void 0)!=null?ref1:520;margin=(ref2=chartOpts!=null?chartOpts.margin:void 0)!=null?ref2:{left:60,top:40,right:60,bottom:10};labelpos=(ref3=chartOpts!=null?chartOpts.labelpos:void 0)!=null?ref3:10;titlepos=(ref4=chartOpts!=null?chartOpts.titlepos:void 0)!=null?ref4:20;title=(ref5=chartOpts!=null?chartOpts.title:void 0)!=null?ref5:"";labels=(ref6=chartOpts!=null?chartOpts.labels:void 0)!=null?ref6:["(1,0,0)","(0,1,0)","(0,0,1)"];rectcolor=(ref7=chartOpts!=null?chartOpts.rectcolor:void 0)!=null?ref7:"#e6e6e6";boxcolor=(ref8=chartOpts!=null?chartOpts.boxcolor:void 0)!=null?ref8:"black";boxwidth=(ref9=chartOpts!=null?chartOpts.boxwidth:void 0)!=null?ref9:2;pointcolor=(ref10=chartOpts!=null?chartOpts.pointcolor:void 0)!=null?ref10:null;pointstroke=(ref11=chartOpts!=null?chartOpts.pointstroke:void 0)!=null?ref11:"black";pointsize=(ref12=chartOpts!=null?chartOpts.pointsize:void 0)!=null?ref12:3;gridlines=(ref13=chartOpts!=null?chartOpts.gridlines:void 0)!=null?ref13:0;gridcolor=(ref14=chartOpts!=null?chartOpts.gridcolor:void 0)!=null?ref14:"white";gridwidth=(ref15=chartOpts!=null?chartOpts.gridwidth:void 0)!=null?ref15:1;tipclass=(ref16=chartOpts!=null?chartOpts.tipclass:void 0)!=null?ref16:"tooltip";xscale=null;yscale=null;pscale=null;points=null;indtip=null;svg=null;chart=function chart(selection,data){var d,first,flag_length_not_3,flag_out_of_range,flag_sum_not_1,frame,framefunc,g,gr,group,i,indID,indices,j,len,n,ngroup,p,p1,p2,p3,p4,plot_height,plot_width,ref17,ref18,second,sum,v,vertices,vv,xlim,xy,ylim;margin=d3panels.check_listarg_v_default(margin,{left:60,top:40,right:60,bottom:10});if(data.p==null){d3panels.displayError("trichart: data.p is missing")}p=function(){var j,len,ref17,results;ref17=data.p;results=[];for(j=0,len=ref17.length;j<len;j++){v=ref17[j];results.push(d3panels.missing2null(v))}return results}();flag_length_not_3=false;flag_sum_not_1=false;flag_out_of_range=false;for(j=0,len=p.length;j<len;j++){v=p[j];if(v.length!==3){flag_length_not_3=true}sum=d3panels.sumArray(v);if(d3panels.abs(sum-1)>1e-6){flag_sum_not_1}if(d3panels.sumArray(function(){var k,len1,results;results=[];for(k=0,len1=v.length;k<len1;k++){vv=v[k];results.push(vv<0||vv>1)}return results}())>0){flag_out_of_range=true}}if(flag_length_not_3){d3panels.displayError("trichart: points not all of length 3")}if(flag_sum_not_1){d3panels.displayError("trichart: points not all summing to 1")}if(flag_out_of_range){d3panels.displayError("trichart: points not all in [0,1]")}n=p.length;indID=(ref17=data!=null?data.indID:void 0)!=null?ref17:function(){var results;results=[];for(i in p){results.push(+i+1)}return results}();if(indID.length!==n){d3panels.displayError("trichart: data.indID.length ("+indID.length+") != data.p.length ("+n+")")}group=(ref18=data!=null?data.group:void 0)!=null?ref18:function(){var results;results=[];for(i in p){results.push(1)}return results}();group=d3panels.expand2vector(group,n);ngroup=d3.max(group);group=function(){var k,len1,results;results=[];for(k=0,len1=group.length;k<len1;k++){g=group[k];results.push(g!=null?g-1:g)}return results}();if(d3panels.sumArray(function(){var k,len1,results;results=[];for(k=0,len1=group.length;k<len1;k++){g=group[k];results.push(g<0||g>ngroup-1)}return results}())>0){d3panels.displayError("add_points: group values out of range");console.log("ngroup: "+ngroup);console.log("distinct groups: "+d3panels.unique(group))}if(group.length!==n){d3panels.displayError("trichart: data.group.length ("+group.length+") != data.p.length ("+n+")")}pointcolor=pointcolor!=null?pointcolor:d3panels.selectGroupColors(ngroup,"dark");pointcolor=d3panels.expand2vector(pointcolor,ngroup);if(pointcolor.length<ngroup){d3panels.displayError("add_points: pointcolor.length ("+pointcolor.length+") < ngroup ("+ngroup+")")}xlim=[0,2/Math.sqrt(3)];ylim=[0,1];plot_height=height-margin.top-margin.bottom;plot_width=width-margin.left-margin.right;if(plot_height>plot_width/xlim[1]){d=plot_height-plot_width/xlim[1];margin.top+=d/2;margin.bottom+=d/2;plot_height-=d}else{d=plot_width-plot_height*xlim[1];margin.left+=d/2;margin.right+=d/2;plot_width-=d}xscale=d3.scaleLinear().domain(xlim).range([margin.left,margin.left+plot_width]);yscale=d3.scaleLinear().domain(ylim).range([plot_height+margin.top,margin.top]);pscale=function pscale(p){sum=d3panels.sumArray(p);return{x:xscale((p[0]*2+p[1])/Math.sqrt(3)/sum),y:yscale(p[1]/sum)}};xy=function(){var k,len1,results;results=[];for(k=0,len1=p.length;k<len1;k++){v=p[k];results.push({x:(v[0]*2+v[1])/Math.sqrt(3),y:v[1]})}return results}();svg=selection.append("svg");svg.attr("width",width).attr("height",height).attr("class","d3panels");frame=svg.append("g").attr("id","frame");vertices=[{x:xlim[0],y:ylim[0]},{x:xlim[1]/2,y:ylim[1]},{x:xlim[1],y:ylim[0]}];framefunc=d3.line().x(function(d){return xscale(vertices[d].x)}).y(function(d){return yscale(vertices[d].y)});indices=function(){var results;results=[];for(i in vertices){results.push(+i)}return results}().concat(0);frame.append("path").datum(indices).attr("d",framefunc).attr("fill",rectcolor).attr("stroke",boxcolor).attr("stroke-width",boxwidth);if(gridlines>0){gr=function(){var results=[];for(var k=1;1<=gridlines?k<=gridlines:k>=gridlines;1<=gridlines?k++:k--){results.push(k)}return results}.apply(this).map(function(i){return i/(gridlines+1)});p1=gr.map(function(x){return[x,0,1-x]});p2=gr.map(function(x){return[x,1-x,0]});p3=gr.map(function(x){return[0,1-x,x]});p4=gr.map(function(x){return[1-x,0,x]});first=p1.concat(p2).concat(p3);second=p2.concat(p3).concat(p4);g=frame.append("g").attr("class","gridlines").selectAll("empty").data(first).enter().append("line").attr("x1",function(d){return pscale(d).x}).attr("y1",function(d){return pscale(d).y}).attr("x2",function(d,i){return pscale(second[i]).x}).attr("y2",function(d,i){return pscale(second[i]).y}).attr("stroke",gridcolor).attr("stroke-width",gridwidth).attr("shape-rendering","crispEdges").style("pointer-events","none").attr("fill","none");frame.append("path").datum(indices).attr("d",framefunc).attr("fill","none").attr("stroke",boxcolor).attr("stroke-width",boxwidth)}frame.append("g").attr("class","title").append("text").text(title).attr("x",plot_width/2+margin.left).attr("y",margin.top-titlepos);frame.append("g").attr("id","labels").selectAll("empty").data(vertices).enter().append("text").attr("x",function(d,i){return xscale(d.x)+[-1,+1,+1][i]*labelpos}).attr("y",function(d){return yscale(d.y)}).style("dominant-baseline","middle").style("text-anchor",function(d,i){return["end","start","start"][i]}).text(function(d,i){return labels[i]});points=svg.append("g").attr("id","points").selectAll("empty").data(p).enter().append("circle").attr("r",pointsize).attr("cx",function(d){return pscale(d).x}).attr("cy",function(d){return pscale(d).y}).attr("fill",function(d,i){return pointcolor[group[i]]}).attr("stroke",pointstroke).attr("stroke-width",1);return indtip=d3panels.tooltip_create(d3.select("body"),points,{tipclass:tipclass},function(d,i){return indID[i]})};chart.xscale=function(){return xscale};chart.yscale=function(){return yscale};chart.pscale=function(){return pscale};chart.points=function(){return points};chart.indtip=function(){return indtip};chart.svg=function(){return svg};chart.remove=function(){svg.remove();d3panels.tooltip_destroy(indtip);return null};return chart};"use strict";d3panels.histchart=function(chartOpts){var chart,curves,density,indtip,linecolor,linecolorhilit,linewidth,linewidthhilit,ref,ref1,ref10,ref2,ref3,ref4,ref5,ref6,ref7,ref8,ref9,rotate_ylab,svg,tipclass,xlab,xlim,xscale,ylab,ylim,yscale;if(chartOpts==null){chartOpts={}}xlim=(ref=chartOpts!=null?chartOpts.xlim:void 0)!=null?ref:null;ylim=(ref1=chartOpts!=null?chartOpts.ylim:void 0)!=null?ref1:null;xlab=(ref2=chartOpts!=null?chartOpts.xlab:void 0)!=null?ref2:"";ylab=(ref3=chartOpts!=null?chartOpts.ylab:void 0)!=null?ref3:"";rotate_ylab=(ref4=chartOpts!=null?chartOpts.rotate_ylab:void 0)!=null?ref4:null;linecolor=(ref5=chartOpts!=null?chartOpts.linecolor:void 0)!=null?ref5:null;linecolorhilit=(ref6=chartOpts!=null?chartOpts.linecolorhilit:void 0)!=null?ref6:null;linewidth=(ref7=chartOpts!=null?chartOpts.linewidth:void 0)!=null?ref7:2;linewidthhilit=(ref8=chartOpts!=null?chartOpts.linewidthhilit:void 0)!=null?ref8:2;density=(ref9=chartOpts!=null?chartOpts.density:void 0)!=null?ref9:true;tipclass=(ref10=chartOpts!=null?chartOpts.tipclass:void 0)!=null?ref10:"tooltip";xscale=null;yscale=null;curves=null;indtip=null;svg=null;chart=function chart(selection,data){var add_curves,breaks,brlim,d,f,freq,i,j,k,l,len,len1,maxn,maxpos,myframe,n_ind,p,path_data,path_x,path_y,pt,ref11,x,xv,xx;if(data.x==null){d3panels.displayError("histchart: data.x is missing")}x=data.x;data.group=function(){var results;results=[];for(i in x){results.push(+i+1)}return results}();n_ind=x.length;if(data.breaks==null){maxn=d3.max(function(){var k,len,results;results=[];for(k=0,len=x.length;k<len;k++){xv=x[k];results.push(xv.length)}return results}());data.breaks=[2*Math.ceil(Math.sqrt(maxn)+1)]}breaks=d3panels.forceAsArray(data.breaks);xlim=xlim!=null?xlim:d3panels.matrixExtent(x);if(breaks.length===1){breaks=d3panels.calc_breaks(breaks[0],xlim[0],xlim[1])}brlim=[d3.min(breaks)-1e-6,d3.max(breaks)+1e-6];x=function(){var k,len,results;results=[];for(k=0,len=x.length;k<len;k++){xx=x[k];results.push(function(){var l,len1,results1;results1=[];for(l=0,len1=xx.length;l<len1;l++){xv=xx[l];if(xv>=brlim[0]&xv<=brlim[1]){results1.push(xv)}}return results1}())}return results}();freq=function(){var k,len,results;results=[];for(k=0,len=x.length;k<len;k++){xv=x[k];results.push(d3panels.calc_freq(xv,breaks,!density))}return results}();maxpos=[];for(k=0,len=freq.length;k<len;k++){f=freq[k];pt={x:breaks[1],y:f[0]};ref11=d3.range(f.length);for(l=0,len1=ref11.length;l<len1;l++){j=ref11[l];if(f[j]>pt.y){pt.y=f[j];pt.x=breaks[j+1]}}maxpos.push(pt)}ylim=ylim!=null?ylim:[0,d3panels.matrixMax(freq)*1.05];chartOpts.xlim=xlim;chartOpts.ylim=ylim;chartOpts.xNA=false;chartOpts.yNA=false;chartOpts.xlab=xlab;chartOpts.ylab=ylab;chartOpts.rotate_ylab=rotate_ylab;myframe=d3panels.panelframe(chartOpts);myframe(selection);svg=myframe.svg();xscale=myframe.xscale();yscale=myframe.yscale();path_data=function(){var len2,m,results;results=[];for(m=0,len2=freq.length;m<len2;m++){f=freq[m];results.push(d3panels.calc_hist_path(f,breaks))}return results}();path_x=function(){var len2,m,results;results=[];for(m=0,len2=path_data.length;m<len2;m++){p=path_data[m];results.push(function(){var len3,n,results1;results1=[];for(n=0,len3=p.length;n<len3;n++){d=p[n];results1.push(d.x)}return results1}())}return results}();path_y=function(){var len2,m,results;results=[];for(m=0,len2=path_data.length;m<len2;m++){p=path_data[m];results.push(function(){var len3,n,results1;results1=[];for(n=0,len3=p.length;n<len3;n++){d=p[n];results1.push(d.y)}return results1}())}return results}();add_curves=d3panels.add_curves({linecolor:linecolor,linecolorhilit:linecolorhilit,linewidth:linewidth,linewidthhilit:linewidthhilit,tipclass:tipclass});add_curves(myframe,{x:path_x,y:path_y,indID:data.indID,group:data.group});curves=add_curves.curves();indtip=add_curves.indtip();return myframe.box().raise()};chart.xscale=function(){return xscale};chart.yscale=function(){return yscale};chart.curves=function(){return curves};chart.indtip=function(){return indtip};chart.svg=function(){return svg};chart.remove=function(){svg.remove();d3panels.tooltip_dstroy(indtip);return null};return chart};"use strict";d3panels.slider=function(chartOpts){var buttoncolor,buttondotcolor,buttondotsize,buttonround,buttonsize,buttonstroke,_chart,height,margin,nticks,rectcolor,rectheight,ref,ref1,ref10,ref11,ref12,ref13,ref14,ref15,ref16,ref2,ref3,ref4,ref5,ref6,ref7,ref8,ref9,slider_svg,stopindex,textsize,tickgap,tickheight,ticks,ticks_at_stops,value,width;if(chartOpts==null){chartOpts={}}width=(ref=chartOpts!=null?chartOpts.width:void 0)!=null?ref:800;height=(ref1=chartOpts!=null?chartOpts.height:void 0)!=null?ref1:80;margin=(ref2=chartOpts!=null?chartOpts.margin:void 0)!=null?ref2:{left:25,right:25,inner:0,top:40,bottom:40};rectheight=(ref3=chartOpts!=null?chartOpts.rectheight:void 0)!=null?ref3:10;rectcolor=(ref4=chartOpts!=null?chartOpts.rectcolor:void 0)!=null?ref4:"#ccc";buttonsize=(ref5=chartOpts!=null?chartOpts.buttonsize:void 0)!=null?ref5:rectheight*2;buttoncolor=(ref6=chartOpts!=null?chartOpts.buttoncolor:void 0)!=null?ref6:"#eee";buttonstroke=(ref7=chartOpts!=null?chartOpts.buttonstroke:void 0)!=null?ref7:"black";buttonround=(ref8=chartOpts!=null?chartOpts.buttonround:void 0)!=null?ref8:buttonsize*.2;buttondotcolor=(ref9=chartOpts!=null?chartOpts.buttondotcolor:void 0)!=null?ref9:"slateblue";buttondotsize=(ref10=chartOpts!=null?chartOpts.buttondotsize:void 0)!=null?ref10:buttonsize/4;tickheight=(ref11=chartOpts!=null?chartOpts.tickheight:void 0)!=null?ref11:10;tickgap=(ref12=chartOpts!=null?chartOpts.tickgap:void 0)!=null?ref12:tickheight/2;textsize=(ref13=chartOpts!=null?chartOpts.textsize:void 0)!=null?ref13:14;nticks=(ref14=chartOpts!=null?chartOpts.nticks:void 0)!=null?ref14:5;ticks=(ref15=chartOpts!=null?chartOpts.ticks:void 0)!=null?ref15:null;ticks_at_stops=(ref16=chartOpts!=null?chartOpts.ticks_at_stops:void 0)!=null?ref16:true;value=0;stopindex=0;slider_svg=null;_chart=function chart(selection,callback,range,stops,initial_value){var button,clamp_pixels,dragged,end_drag,xcscale,xscale;margin=d3panels.check_listarg_v_default(margin,{left:25,right:25,inner:0,top:40,bottom:40});margin.left+=margin.inner;margin.right+=margin.inner;if(range==null){range=[margin.left,width-margin.right]}if(margin.top!=null&&margin.top+margin.bottom>0){margin.top=height*margin.top/(margin.top+margin.bottom)}else{margin.top=height/2}if(initial_value!=null){value=initial_value;if(value<range[0]){value=range[0]}if(value>range[1]){value=range[1]}if(stops!=null){stopindex=d3panels.index_of_nearest(value,stops)}if(stops!=null){value=stops[stopindex]}}else{if(stops!=null){stopindex=Math.floor(Math.random()*stops.length);value=stops[stopindex]}else{value=(range[1]-range[0])*Math.random()+range[0]}}slider_svg=selection.insert("svg").attr("height",height).attr("width",width);xcscale=d3.scaleLinear().range([margin.left,width-margin.right]).domain(range).clamp(true);xscale=function xscale(d){if(stops!=null){return xcscale(stops[d3panels.index_of_nearest(d,stops)])}return xcscale(d)};clamp_pixels=function clamp_pixels(pixels,interval){if(pixels<interval[0]){return interval[0]}if(pixels>interval[1]){return interval[1]}return pixels};slider_svg.insert("rect").attr("x",margin.left).attr("y",margin.top-rectheight/2).attr("rx",rectheight*.3).attr("ry",rectheight*.3).attr("width",width-margin.left-margin.right).attr("height",rectheight).attr("fill",rectcolor);if(ticks==null){ticks=xcscale.ticks(nticks)}slider_svg.selectAll("empty").data(ticks).enter().insert("line").attr("x1",function(d){return xcscale(d)}).attr("x2",function(d){return xcscale(d)}).attr("y1",margin.top+rectheight/2+tickgap).attr("y2",margin.top+rectheight/2+tickgap+tickheight).attr("stroke","black").attr("shape-rendering","crispEdges");slider_svg.selectAll("empty").data(ticks).enter().insert("text").attr("x",function(d){return xcscale(d)}).attr("y",margin.top+rectheight/2+tickgap*2+tickheight).text(function(d){return d}).style("font-size",textsize).style("dominant-baseline","hanging").style("text-anchor","middle").style("pointer-events","none").style("-webkit-user-select","none").style("-moz-user-select","none").style("-ms-user-select","none");if(stops!=null&&ticks_at_stops){slider_svg.selectAll("empty").data(stops).enter().insert("line").attr("x1",function(d){return xcscale(d)}).attr("x2",function(d){return xcscale(d)}).attr("y1",margin.top-rectheight/2-tickgap).attr("y2",margin.top-rectheight/2-tickgap-tickheight).attr("stroke","black").attr("shape-rendering","crispEdges")}button=slider_svg.insert("g").attr("id","button").attr("transform","translate("+xscale(value)+",0)");button.insert("rect").attr("x",-buttonsize/2).attr("y",margin.top-buttonsize/2).attr("height",buttonsize).attr("width",buttonsize).attr("rx",buttonround).attr("ry",buttonround).attr("stroke",buttonstroke).attr("stroke-width",2).attr("fill",buttoncolor);button.insert("circle").attr("cx",0).attr("cy",margin.top).attr("r",buttondotsize).attr("fill",buttondotcolor);dragged=function dragged(d){var clamped_pixels,pixel_value;pixel_value=d3.event.x;clamped_pixels=clamp_pixels(pixel_value,[margin.left,width-margin.right]);value=xcscale.invert(clamped_pixels);d3.select(this).attr("transform","translate("+xcscale(value)+",0)");if(stops!=null){stopindex=d3panels.index_of_nearest(value,stops);value=stops[stopindex]}if(callback!=null){return callback(_chart)}};end_drag=function end_drag(d){var clamped_pixels,pixel_value;pixel_value=d3.event.x;clamped_pixels=clamp_pixels(pixel_value,[margin.left,width-margin.right]);value=xcscale.invert(clamped_pixels);if(stops!=null){stopindex=d3panels.index_of_nearest(value,stops);value=stops[stopindex]}if(callback!=null){callback(_chart)}return d3.select(this).attr("transform","translate("+xcscale(value)+",0)")};button.call(d3.drag().on("drag",dragged).on("end",end_drag));if(callback!=null){return callback(_chart)}};_chart.value=function(){return value};_chart.stopindex=function(){return stopindex};_chart.remove=function(){return slider_svg.remove()};return _chart};"use strict";d3panels.double_slider=function(chartOpts){var buttoncolor,buttondotcolor,buttondotsize,buttonround,buttonsize,buttonstroke,_chart,height,margin,nticks,rectcolor,rectheight,ref,ref1,ref10,ref11,ref12,ref13,ref14,ref15,ref16,ref2,ref3,ref4,ref5,ref6,ref7,ref8,ref9,slider_svg,stopindex,textsize,tickgap,tickheight,ticks,ticks_at_stops,value,width;if(chartOpts==null){chartOpts={}}width=(ref=chartOpts!=null?chartOpts.width:void 0)!=null?ref:800;height=(ref1=chartOpts!=null?chartOpts.height:void 0)!=null?ref1:80;margin=(ref2=chartOpts!=null?chartOpts.margin:void 0)!=null?ref2:{left:25,right:25,inner:0,top:40,bottom:40};rectheight=(ref3=chartOpts!=null?chartOpts.rectheight:void 0)!=null?ref3:10;rectcolor=(ref4=chartOpts!=null?chartOpts.rectcolor:void 0)!=null?ref4:"#ccc";buttonsize=(ref5=chartOpts!=null?chartOpts.buttonsize:void 0)!=null?ref5:rectheight*2;buttoncolor=(ref6=chartOpts!=null?chartOpts.buttoncolor:void 0)!=null?ref6:"#eee";buttonstroke=(ref7=chartOpts!=null?chartOpts.buttonstroke:void 0)!=null?ref7:"black";buttonround=(ref8=chartOpts!=null?chartOpts.buttonround:void 0)!=null?ref8:buttonsize*.2;buttondotcolor=(ref9=chartOpts!=null?chartOpts.buttondotcolor:void 0)!=null?ref9:["slateblue","orchid"];buttondotsize=(ref10=chartOpts!=null?chartOpts.buttondotsize:void 0)!=null?ref10:buttonsize/4;tickheight=(ref11=chartOpts!=null?chartOpts.tickheight:void 0)!=null?ref11:10;tickgap=(ref12=chartOpts!=null?chartOpts.tickgap:void 0)!=null?ref12:tickheight/2;textsize=(ref13=chartOpts!=null?chartOpts.textsize:void 0)!=null?ref13:14;nticks=(ref14=chartOpts!=null?chartOpts.nticks:void 0)!=null?ref14:5;ticks=(ref15=chartOpts!=null?chartOpts.ticks:void 0)!=null?ref15:null;ticks_at_stops=(ref16=chartOpts!=null?chartOpts.ticks_at_stops:void 0)!=null?ref16:true;value=[0,0];stopindex=[0,0];slider_svg=null;if(!Array.isArray(buttoncolor)){buttoncolor=[buttoncolor,buttoncolor]}if(!Array.isArray(buttonstroke)){buttonstroke=[buttonstroke,buttonstroke]}if(!Array.isArray(buttondotcolor)){buttondotcolor=[buttondotcolor,buttondotcolor]}_chart=function chart(selection,callback1,callback2,range,stops,initial_value){var buttons,callbacks,clamp_pixels,dragged,end_drag,start_drag,xcscale,xscale;margin=d3panels.check_listarg_v_default(margin,{left:25,right:25,inner:0,top:40,bottom:40});callbacks=[callback1,callback2];margin.left+=margin.inner;margin.right+=margin.inner;if(range==null){range=[margin.left,width-margin.right]}if(margin.top!=null&&margin.top+margin.bottom>0){margin.top=height*margin.top/(margin.top+margin.bottom)}else{margin.top=height/2}if(initial_value!=null){value=initial_value.map(function(d){if(d<range[0]){return range[0]}if(d>range[1]){return range[1]}return d});if(stops!=null){stopindex=value.map(function(d){return d3panels.index_of_nearest(d,stops)})}if(stops!=null){value=stopindex.map(function(i){return stops[i]})}}else{if(stops!=null){stopindex=[0,1].map(function(i){return Math.floor(Math.random()*stops.length)});value=stopindex.map(function(i){return stops[i]})}else{value=[0,1].map(function(i){return(range[1]-range[0])*Math.random()+range[0]})}}slider_svg=selection.insert("svg").attr("height",height).attr("width",width);xcscale=d3.scaleLinear().range([margin.left,width-margin.right]).domain(range).clamp(true);xscale=function xscale(d){if(stops!=null){return xcscale(stops[d3panels.index_of_nearest(d,stops)])}return xcscale(d)};clamp_pixels=function clamp_pixels(pixels,interval){if(pixels<interval[0]){return interval[0]}if(pixels>interval[1]){return interval[1]}return pixels};slider_svg.insert("rect").attr("x",margin.left).attr("y",margin.top-rectheight/2).attr("rx",rectheight*.3).attr("ry",rectheight*.3).attr("width",width-margin.left-margin.right).attr("height",rectheight).attr("fill",rectcolor);if(ticks==null){ticks=xcscale.ticks(nticks)}slider_svg.selectAll("empty").data(ticks).enter().insert("line").attr("x1",function(d){return xcscale(d)}).attr("x2",function(d){return xcscale(d)}).attr("y1",margin.top+rectheight/2+tickgap).attr("y2",margin.top+rectheight/2+tickgap+tickheight).attr("stroke","black").attr("shape-rendering","crispEdges");slider_svg.selectAll("empty").data(ticks).enter().insert("text").attr("x",function(d){return xcscale(d)}).attr("y",margin.top+rectheight/2+tickgap*2+tickheight).text(function(d){return d}).style("font-size",textsize).style("dominant-baseline","hanging").style("text-anchor","middle").style("pointer-events","none").style("-webkit-user-select","none").style("-moz-user-select","none").style("-ms-user-select","none");if(stops!=null&&ticks_at_stops){slider_svg.selectAll("empty").data(stops).enter().insert("line").attr("x1",function(d){return xcscale(d)}).attr("x2",function(d){return xcscale(d)}).attr("y1",margin.top-rectheight/2-tickgap).attr("y2",margin.top-rectheight/2-tickgap-tickheight).attr("stroke","black").attr("shape-rendering","crispEdges")}buttons=[0,1].map(function(i){return slider_svg.insert("g").attr("id","button"+(i+1)).attr("transform",function(d){return"translate("+xscale(value[i])+",0)"})});[0,1].map(function(i){buttons[i].insert("rect").attr("x",-buttonsize/2).attr("y",margin.top-buttonsize/2).attr("height",buttonsize).attr("width",buttonsize).attr("rx",buttonround).attr("ry",buttonround).attr("stroke",buttonstroke[i]).attr("stroke-width",2).attr("fill",buttoncolor[i]);return buttons[i].insert("circle").attr("cx",0).attr("cy",margin.top).attr("r",buttondotsize).attr("fill",buttondotcolor[i])});start_drag=function start_drag(i){return function(d){return buttons[i].raise()}};dragged=function dragged(i){return function(d){var clamped_pixels,pixel_value;pixel_value=d3.event.x;clamped_pixels=clamp_pixels(pixel_value,[margin.left,width-margin.right]);value[i]=xcscale.invert(clamped_pixels);d3.select(this).attr("transform","translate("+xcscale(value[i])+",0)");if(stops!=null){stopindex[i]=d3panels.index_of_nearest(value[i],stops);value[i]=stops[stopindex[i]]}if(callbacks[i]!=null){return callbacks[i](_chart)}}};end_drag=function end_drag(i){return function(d){var clamped_pixels,pixel_value;pixel_value=d3.event.x;clamped_pixels=clamp_pixels(pixel_value,[margin.left,width-margin.right]);value[i]=xcscale.invert(clamped_pixels);if(stops!=null){stopindex[i]=d3panels.index_of_nearest(value[i],stops);value[i]=stops[stopindex[i]]}if(callbacks[i]!=null){callbacks[i](_chart)}return d3.select(this).attr("transform","translate("+xcscale(value[i])+",0)")}};return[0,1].map(function(i){buttons[i].call(d3.drag().on("start",start_drag(i)).on("drag",dragged(i)).on("end",end_drag(i)));if(callbacks[i]!=null){return callbacks[i](_chart)}})};_chart.value=function(){return value};_chart.stopindex=function(){return stopindex};_chart.remove=function(){return slider_svg.remove()};return _chart};"use strict";d3panels.tooltip_create=function(selection,objects,options,tooltip_func){var direction,fill,fontcolor,fontsize,in_duration,out_duration,pad,ref,ref1,ref2,ref3,ref4,tipclass,tipdiv,tipgroup,triChar,tridiv;tipclass=(ref=options!=null?options.tipclass:void 0)!=null?ref:"d3panels-tooltip";direction=(ref1=options!=null?options.direction:void 0)!=null?ref1:"east";out_duration=(ref2=options!=null?options.out_duration:void 0)!=null?ref2:1e3;in_duration=(ref3=options!=null?options.in_duration:void 0)!=null?ref3:0;pad=(ref4=options!=null?options.pad:void 0)!=null?ref4:8;fill=options!=null?options.fill:void 0;fontcolor=options!=null?options.fontcolor:void 0;fontsize=options!=null?options.fontsize:void 0;tipgroup=selection.append("g").attr("class","d3panels-tooltip "+tipclass).style("opacity",0).datum({direction:direction,pad:pad});tipdiv=tipgroup.append("div").attr("class","d3panels-tooltip "+tipclass);if(direction==="east"){triChar="◀"}else if(direction==="west"){triChar="▶"}else if(direction==="north"){triChar="▼"}else if(direction==="south"){triChar="▲"}else{d3panels.displayError("tooltip_create: invalid direction ("+direction+")")}tridiv=tipgroup.append("div").attr("class","d3panels-tooltip-tri "+tipclass).html(triChar);if(fill!=null){tipdiv.style("background",fill)}if(fontcolor!=null){tipdiv.style("color",fontcolor)}if(fontsize!=null){tipdiv.style("font-size",fontsize+"px")}if(fill!=null){tridiv.style("color",fill)}if(fontsize!=null){tridiv.style("font-size",fontsize+"px")}objects.on("mouseover."+tipclass,function(d,i){var mouseX,mouseY;mouseX=d3.event.pageX*1;mouseY=d3.event.pageY*1;tipdiv.html(tooltip_func(d,i));d3panels.tooltip_move(tipgroup,mouseX,mouseY);return d3panels.tooltip_show(tipgroup,in_duration)});objects.on("mouseout."+tipclass,function(d){return d3panels.tooltip_hide(tipgroup,out_duration)});return tipgroup};d3panels.tooltip_move=function(tipgroup,x,y){var direction,divpad,fontsize,pad,posX,posY,shiftX,shiftY,tipbox_height,tipbox_width,tipdiv,triX,triY,tridiv;tipdiv=tipgroup.select("div.d3panels-tooltip");tridiv=tipgroup.select("div.d3panels-tooltip-tri");tipbox_height=tipdiv.node().getBoundingClientRect().height*1;tipbox_width=tipdiv.node().getBoundingClientRect().width*1;fontsize=tridiv.style("font-size").replace("px","")*1;pad=tipgroup.datum().pad*1+fontsize;direction=tipgroup.datum().direction;shiftX=shiftY=0;if(direction==="east"){posX=x+pad;posY=y-tipbox_height/2;divpad=tipdiv.style("padding-left").replace("px","")*1;shiftX=-fontsize-divpad;shiftY=tipbox_height/2-fontsize/2}else if(direction==="west"){posX=x-tipbox_width*1-pad;posY=y-tipbox_height/2;divpad=tipdiv.style("padding-right").replace("px","")*1;shiftX=tipbox_width-fontsize+divpad;shiftY=tipbox_height/2-fontsize/2}else if(direction==="north"){posX=x-tipbox_width/2;posY=y-tipbox_height-pad;divpad=tipdiv.style("padding-bottom").replace("px","")*1;shiftX=tipbox_width/2-fontsize;shiftY=tipbox_height+divpad/2-fontsize/2}else if(direction==="south"){posX=x-tipbox_width/2;posY=y+pad;divpad=tipdiv.style("padding-top").replace("px","")*1;shiftX=+tipbox_width/2-fontsize;shiftY=-fontsize}tipdiv.style("left",posX+"px").style("top",posY+"px");triX=posX+shiftX;triY=posY+shiftY;return tridiv.style("left",triX+"px").style("top",triY+"px").style("width",tipbox_width).style("height",tipbox_height)};d3panels.tooltip_text=function(tipgroup,text){return tipgroup.select("div.d3panels-tooltip").html(text)};d3panels.tooltip_show=function(tipgroup,duration){return tipgroup.transition().duration(duration).style("opacity",1)};d3panels.tooltip_hide=function(tipgroup,duration){return tipgroup.transition().duration(duration).style("opacity",0)};d3panels.tooltip_destroy=function(tipgroup){return tipgroup.remove()};if(typeof define==="function"&&define.amd)this.d3panels=d3panels,define(d3panels);else if(typeof module==="object"&&module.exports)module.exports=d3panels;else this.d3panels=d3panels}(); \ No newline at end of file
diff --git a/gn2/wqflask/static/new/javascript/dataset_select_menu_orig.js b/gn2/wqflask/static/new/javascript/dataset_select_menu_orig.js
new file mode 100644
index 00000000..25a703e6
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/dataset_select_menu_orig.js
@@ -0,0 +1,330 @@
+var apply_default, check_search_term, dataset_info, group_info, make_default, open_window, populate_dataset, populate_group, populate_species, populate_type, process_json, redo_dropdown;
+process_json = function(data) {
+ window.jdata = data;
+ populate_species();
+ if ($('#type').length > 0) { //This is to determine if it's the index page or the submit_trait page (which only has species and group selection and no make default option)
+ return apply_default();
+ }
+};
+
+range = function(size, startAt=0) {
+ return [...Array(size).keys()].map(idx => idx + startAt);
+};
+
+indicate_error = function (jqXHR, textStatus, errorThrown) {
+ errorElement = document.createElement("span");
+ errorElement.setAttribute("class", "alert-danger");
+ errorText = document.createTextNode(
+ "There was an error retrieving and setting the menu. Try again later.");
+ errorElement.appendChild(errorText);
+ if (document.getElementById("search")){
+ form = document.getElementById("search").getElementsByTagName("form")[0];
+ form.prepend(errorElement);
+ disable_element = function(select) {
+ select.setAttribute("disabled", "disabled");
+ };
+ Array.from(form.getElementsByTagName("select")).forEach(disable_element);
+ Array.from(form.getElementsByTagName("textarea")).forEach(disable_element);
+ }
+};
+
+defaultStatusCodeFunctions = range(200, 400).reduce(
+ function(acc, scode) {
+ acc[scode] = indicate_error;
+ return acc;
+ }, {});
+
+if (typeof gn_server_url === 'undefined'){
+ gn_server_url = $("#search form").attr("data-gn_server_url")
+}
+
+$.ajax(gn_server_url +'/menu/generate/json', {
+ dataType: 'json',
+ success: process_json,
+ error: indicate_error,
+ statusCode: {
+ ...defaultStatusCodeFunctions,
+ }
+});
+
+populate_species = function() {
+ var species_list;
+ species_list = this.jdata.species;
+ redo_dropdown($('#species'), species_list);
+ return populate_group();
+};
+window.populate_species = populate_species;
+
+populate_group = function() {
+ var group_list, species;
+ species = $('#species').val();
+ group_list = this.jdata.groups[species];
+ for (_i = 0, _len = group_list.length; _i < (_len - 1); _i++) {
+ if (group_list[_i][0] == "BXD300"){
+ group_list.splice(_i, 1)
+ }
+ }
+ redo_dropdown($('#group'), group_list);
+ if ($('#type').length > 0) { //This is to determine if it's the index page or the submit_trait page (which only has species and group selection and no make default option)
+ return populate_type();
+ }
+};
+window.populate_group = populate_group;
+
+populate_type = function() {
+ var group, species, type_list;
+ species = $('#species').val();
+ group = $('#group').val();
+ type_list = this.jdata.types[species][group];
+ redo_dropdown($('#type'), type_list);
+ return populate_dataset();
+};
+window.populate_type = populate_type;
+
+populate_dataset = function() {
+ var dataset_list, group, species, type;
+ species = $('#species').val();
+ group = $('#group').val();
+ type = $('#type').val();
+ dataset_list = this.jdata.datasets[species][group][type];
+ return redo_dropdown($('#dataset'), dataset_list);
+};
+window.populate_dataset = populate_dataset;
+
+redo_dropdown = function(dropdown, items) {
+ var item, _i, _len, _results;
+ dropdown.empty();
+ _results = [];
+
+ if (dropdown.attr('id') == "species"){
+ species_family_list = [];
+ for (_i = 0, _len = items.length; _i < _len; _i++) {
+ item = items[_i];
+ species_family = item[2].toString()
+ species_family_list.push([item[0], item[1], species_family])
+ }
+
+ current_family = ""
+ this_opt_group = null
+ for (_i = 0, _len = species_family_list.length; _i < _len; _i++) {
+ item = species_family_list[_i];
+ if (item[2] != "None" && current_family == ""){
+ current_family = item[2]
+ this_opt_group = $("<optgroup label=\"" + item[2] + "\">")
+ this_opt_group.append($("<option />").val(item[0]).text(item[1]));
+ } else if (current_family != "" && item[2] == current_family){
+ this_opt_group.append($("<option />").val(item[0]).text(item[1]));
+ if (_i == species_family_list.length - 1){
+ _results.push(dropdown.append(this_opt_group))
+ }
+ } else if (current_family != "" && item[2] != current_family && item[2] != "None"){
+ current_family = item[2]
+ _results.push(dropdown.append(this_opt_group))
+ this_opt_group = $("<optgroup label=\"" + current_family + "\">")
+ this_opt_group.append($("<option />").val(item[0]).text(item[1]));
+ if (_i == species_family_list.length - 1){
+ _results.push(dropdown.append(this_opt_group))
+ }
+ } else if (current_family != "" && this_opt_group != null && item[2] == "None"){
+ _results.push(dropdown.append(this_opt_group))
+ current_family = ""
+ _results.push(dropdown.append($("<option />").val(item[0]).text(item[1])));
+ } else {
+ _results.push(dropdown.append($("<option />").val(item[0]).text(item[1])));
+ }
+ }
+ } else if (dropdown.attr('id') == "group"){
+ group_family_list = [];
+ for (_i = 0, _len = items.length; _i < _len; _i++) {
+ item = items[_i];
+ group_family = item[2].toString().split(":")[1]
+ group_family_list.push([item[0], item[1], group_family])
+ }
+
+ current_family = ""
+ this_opt_group = null
+ for (_i = 0, _len = group_family_list.length; _i < _len; _i++) {
+ item = group_family_list[_i];
+ if (item[2] != "None" && current_family == ""){
+ current_family = item[2]
+ this_opt_group = $("<optgroup label=\"" + item[2] + "\">")
+ this_opt_group.append($("<option />").val(item[0]).text(item[1]));
+ } else if (current_family != "" && item[2] == current_family){
+ this_opt_group.append($("<option />").val(item[0]).text(item[1]));
+ if (_i == group_family_list.length - 1){
+ _results.push(dropdown.append(this_opt_group))
+ }
+ } else if (current_family != "" && item[2] != current_family && item[2] != "None"){
+ current_family = item[2]
+ _results.push(dropdown.append(this_opt_group))
+ this_opt_group = $("<optgroup label=\"" + current_family + "\">")
+ this_opt_group.append($("<option />").val(item[0]).text(item[1]));
+ if (_i == group_family_list.length - 1){
+ _results.push(dropdown.append(this_opt_group))
+ }
+ } else if (current_family != "" && this_opt_group != null && item[2] == "None"){
+ _results.push(dropdown.append(this_opt_group))
+ current_family = ""
+ _results.push(dropdown.append($("<option />").val(item[0]).text(item[1])));
+ } else {
+ _results.push(dropdown.append($("<option />").val(item[0]).text(item[1])));
+ }
+ }
+ } else if (dropdown.attr('id') == "type"){
+ type_family_list = [];
+ for (_i = 0, _len = items.length; _i < _len; _i++) {
+ item = items[_i];
+ type_family_list.push([item[0], item[1], item[2]])
+ }
+
+ current_family = ""
+ this_opt_group = null
+ for (_i = 0, _len = type_family_list.length; _i < _len; _i++) {
+ item = type_family_list[_i];
+ if (item[2] != "None" && current_family == ""){
+ current_family = item[2]
+ this_opt_group = $("<optgroup label=\"" + item[2] + "\">")
+ this_opt_group.append($("<option />").val(item[0]).text(item[1]));
+ if (_i == type_family_list.length - 1){
+ _results.push(dropdown.append(this_opt_group))
+ }
+ } else if (current_family != "" && item[2] == current_family){
+ this_opt_group.append($("<option />").val(item[0]).text(item[1]));
+ if (_i == type_family_list.length - 1){
+ _results.push(dropdown.append(this_opt_group))
+ }
+ } else if (current_family != "" && item[2] != current_family && item[2] != "None"){
+ current_family = item[2]
+ _results.push(dropdown.append(this_opt_group))
+ this_opt_group = $("<optgroup label=\"" + current_family + "\">")
+ this_opt_group.append($("<option />").val(item[0]).text(item[1]));
+ if (_i == type_family_list.length - 1){
+ _results.push(dropdown.append(this_opt_group))
+ }
+ } else {
+ _results.push(dropdown.append(this_opt_group))
+ current_family = ""
+ _results.push(dropdown.append($("<option />").val(item[0]).text(item[1])));
+ }
+ }
+ } else {
+ for (_i = 0, _len = items.length; _i < _len; _i++) {
+ item = items[_i];
+ if (item.length > 2){
+ _results.push(dropdown.append($("<option data-id=\""+item[0]+"\" />").val(item[1]).text(item[2])));
+ } else {
+ _results.push(dropdown.append($("<option />").val(item[0]).text(item[1])));
+ }
+ }
+ }
+
+ return _results;
+};
+
+$('#species').change((function(_this) {
+ return function() {
+ return populate_group();
+ };
+})(this));
+
+$('#group').change((function(_this) {
+ return function() {
+ if ($('#type').length > 0) { //This is to determine if it's the index page or the submit_trait page (which only has species and group selection and no make default option)
+ return populate_type();
+ }
+ else {
+ return false
+ }
+ };
+})(this));
+
+$('#type').change((function(_this) {
+ return function() {
+ return populate_dataset();
+ };
+})(this));
+
+open_window = function(url, name) {
+ var options;
+ options = "menubar=yes,toolbar=yes,titlebar=yes,location=yes,resizable=yes,status=yes,scrollbars=yes,directories=yes,width=900";
+ return open(url, name, options).focus();
+};
+
+group_info = function() {
+ var group, species, url;
+ species = $('#species').val();
+ group = $('#group').val();
+ url = "http://gn1.genenetwork.org/" + species + "Cross.html#" + group;
+ return open_window(url, "_blank");
+};
+$('#group_info').click(group_info);
+
+dataset_info = function() {
+ var dataset, url;
+ accession_id = $('#dataset option:selected').data("id");
+ if (accession_id != "None") {
+ url = "https://info.genenetwork.org/infofile/source.php?GN_AccesionId=" + accession_id
+ } else {
+ species = $('#species').val();
+ group = $('#group').val();
+ url = "https://info.genenetwork.org/species/source.php?SpeciesName=" + species + "&InbredSetName=" + group
+ }
+ return open_window(url, "_blank");
+};
+$('#dataset_info').click(dataset_info);
+
+make_default = function() {
+ var holder, item, jholder, _i, _len, _ref;
+ alert("The current settings are now your default.")
+ holder = {};
+ _ref = ['species', 'group', 'type', 'dataset'];
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ item = _ref[_i];
+ holder[item] = $("#" + item).val();
+ }
+ jholder = JSON.stringify(holder);
+ return $.cookie('search_defaults', jholder, {
+ expires: 365
+ });
+};
+
+apply_default = function() {
+ var defaults, item, populate_function, _i, _len, _ref, _results;
+ defaults = $.cookie('search_defaults');
+ if (defaults) {
+ defaults = $.parseJSON(defaults);
+ } else {
+ defaults = {
+ species: "mouse",
+ group: "BXD",
+ type: "Hippocampus mRNA",
+ dataset: "HC_M2_0606_P"
+ };
+ }
+
+ _ref = [['species', 'group'], ['group', 'type'], ['type', 'dataset'], ['dataset', null]];
+ _results = [];
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ item = _ref[_i];
+ $("#" + item[0]).val(defaults[item[0]]);
+ if (item[1]) {
+ populate_function = "populate_" + item[1];
+ _results.push(window[populate_function]());
+ } else {
+ _results.push(void 0);
+ }
+ }
+ return _results;
+};
+
+check_search_term = function() {
+ var or_search_term, and_search_term;
+ or_search_term = $('#or_search').val();
+ and_search_term = $('#and_search').val();
+ if (or_search_term === "" && and_search_term === "") {
+ alert("Please enter one or more search terms or search equations.");
+ return false;
+ }
+};
+
+$("#make_default").click(make_default);
diff --git a/gn2/wqflask/static/new/javascript/draw_corr_scatterplot.js b/gn2/wqflask/static/new/javascript/draw_corr_scatterplot.js
new file mode 100644
index 00000000..f883c0d9
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/draw_corr_scatterplot.js
@@ -0,0 +1,913 @@
+var chart;
+var srchart;
+
+x_val_range = js_data.x_range[1] - js_data.x_range[0]
+y_val_range = js_data.y_range[1] - js_data.y_range[0]
+
+if (x_val_range >= 2 && x_val_range < 9){
+ x_tick_digits = '.1f'
+} else if (x_val_range >= 0.8 && x_val_range < 2) {
+ x_tick_digits = '.2f'
+} else if (x_val_range < 0.8) {
+ x_tick_digits = '.3f'
+} else {
+ x_tick_digits = 'f'
+}
+
+if (y_val_range >= 2 && y_val_range < 8){
+ y_tick_digits = '.1f'
+} else if (y_val_range >= 0.8 && y_val_range < 2) {
+ y_tick_digits = '.2f'
+} else if (y_val_range < 0.8) {
+ y_tick_digits = '.3f'
+} else {
+ y_tick_digits = 'f'
+}
+
+console.log("y_digits:", y_tick_digits)
+
+var layout = {
+ height: 700,
+ width: 800,
+ margin: {
+ l: 70,
+ r: 30,
+ t: 90,
+ b: 50
+ },
+ xaxis: {
+ range: [js_data.x_range[0], js_data.x_range[1]],
+ title: js_data.trait_1,
+ zeroline: false,
+ visible: true,
+ linecolor: 'black',
+ linewidth: 1,
+ ticklen: 4,
+ tickformat: x_tick_digits
+ },
+ yaxis: {
+ range: [js_data.y_range[0], js_data.y_range[1]],
+ title: js_data.trait_2,
+ zeroline: false,
+ visible: true,
+ linecolor: 'black',
+ linewidth: 1,
+ ticklen: 4,
+ tickformat: y_tick_digits,
+ automargin: true
+ },
+ hovermode: "closest",
+ showlegend: false,
+ annotations:[{
+ xref: 'paper',
+ yref: 'paper',
+ x: 1,
+ xanchor: 'right',
+ y: 1.05,
+ yanchor: 'top',
+ text: '<i>r</i> = ' + js_data.r_value.toFixed(3) + ', <i>p</i> = ' + js_data.p_value.toExponential(3) + ', <i>n</i> = ' + js_data.num_overlap,
+ showarrow: false,
+ font: {
+ size: 14
+ },
+ }
+ ]
+}
+
+var sr_layout = {
+ height: 700,
+ width: 800,
+ margin: {
+ l: 60,
+ r: 30,
+ t: 80,
+ b: 50
+ },
+ xaxis: {
+ range: [js_data.sr_range[0], js_data.sr_range[1]],
+ title: js_data.trait_1,
+ zeroline: false,
+ visible: true,
+ linecolor: 'black',
+ linewidth: 1,
+ },
+ yaxis: {
+ range: [js_data.sr_range[0], js_data.sr_range[1]],
+ title: js_data.trait_2,
+ zeroline: false,
+ visible: true,
+ linecolor: 'black',
+ linewidth: 1,
+ },
+ hovermode: "closest",
+ showlegend: false,
+ annotations:[{
+ xref: 'paper',
+ yref: 'paper',
+ x: 1,
+ xanchor: 'right',
+ y: 1.05,
+ yanchor: 'top',
+ text: '<i>rho</i> = ' + js_data.srr_value.toFixed(3) + ', <i>P</i> = ' + js_data.srp_value.toExponential(3) + ', <i>n</i> = ' + js_data.num_overlap,
+ showarrow: false,
+ font: {
+ size: 14
+ },
+ }
+]
+}
+
+var modebar_options = {
+ modeBarButtonsToAdd:[{
+ name: 'Export as SVG',
+ icon: Plotly.Icons.camera,
+ click: function(gd) {
+ Plotly.downloadImage(gd, {format: 'svg'})
+ }
+ },
+ {
+ name: 'Export as JPEG',
+ icon: Plotly.Icons.disk,
+ click: function(gd) {
+ Plotly.downloadImage(gd, {format: 'jpeg'})
+ }
+ }],
+ showEditInChartStudio: true,
+ plotlyServerURL: "https://chart-studio.plotly.com",
+ modeBarButtonsToRemove:['toImage', 'sendDataToCloud', 'hoverClosest', 'hoverCompare', 'hoverClosestCartesian', 'hoverCompareCartesian', 'lasso2d', 'toggleSpikelines'],
+ displaylogo: false
+}
+
+cofactor1_dict = {}
+ranked_cofactor1_dict = {}
+//cofactor1_values = []
+//ranked_cofactor1_values = []
+cofactor2_dict = {}
+ranked_cofactor2_dict = {}
+//cofactor2_values = []
+//ranked_cofactor2_values = []
+cofactor3_dict = {}
+ranked_cofactor3_dict = {}
+
+function drawg() {
+ x_values = []
+ y_values = []
+ sample_names = []
+ for (j = 0; j < js_data.data[0].length; j++) {
+ x_values.push(js_data.data[0][j])
+ y_values.push(js_data.data[1][j])
+ sample_names.push(js_data.indIDs[j])
+ }
+
+ var trace1 = {
+ x: x_values,
+ y: y_values,
+ mode: 'markers',
+ text: sample_names,
+ hoverinfo: "text+x+y"
+ }
+
+ var trace2 = {
+ x: [js_data.intercept_coords[0][0], js_data.intercept_coords[1][0]],
+ y: [js_data.intercept_coords[0][1], js_data.intercept_coords[1][1]],
+ mode: 'lines',
+ line: {
+ color: 'rgb(250, 60, 73)'
+ }
+ }
+
+ Plotly.newPlot('scatterplot2', [trace2, trace1], layout, modebar_options)
+
+}
+
+function srdrawg() {
+ x_values = []
+ y_values = []
+ sample_names = []
+ for (j = 0; j < js_data.rdata[0].length; j++) {
+ x_values.push(js_data.rdata[0][j])
+ y_values.push(js_data.rdata[1][j])
+ sample_names.push(js_data.indIDs[j])
+ }
+
+ var trace1 = {
+ x: x_values,
+ y: y_values,
+ mode: 'markers',
+ text: sample_names,
+ hoverinfo: "text+x+y"
+ }
+
+ Plotly.newPlot('srscatterplot2', [trace1], sr_layout, modebar_options)
+}
+
+function getdata() {
+ var data = [];
+ data.push({
+ values: [],
+ slope: js_data.slope,
+ intercept: js_data.intercept
+ });
+
+ sizemin = 8;
+ sizemax = 30;
+
+ samples1 = [];
+ samples2 = [];
+ samples3 = [];
+
+ if ($('input[name=cofactor1_vals]').val()){
+ vals1 = []
+ val_sample_dict = {}
+ val_sample_pairs = $('input[name=cofactor1_vals]').val().split(",")
+ for (i=0; i < val_sample_pairs.length; i++) {
+ samples1.push(val_sample_pairs[i].split(":")[0])
+ vals1.push(parseFloat(val_sample_pairs[i].split(":")[1]))
+ val_sample_dict[val_sample_pairs[i].split(":")[0]] = parseFloat(val_sample_pairs[i].split(":")[1])
+ }
+ datamin1 = d3.min(vals1);
+ datamax1 = d3.max(vals1);
+
+ cofactor1_dict = val_sample_dict
+ cofactor1_values = vals1
+ }
+
+ if ($('input[name=cofactor2_vals]').val()){
+ vals2 = [];
+ val_sample_dict = {}
+ val_sample_pairs = $('input[name=cofactor2_vals]').val().split(",")
+ for (i=0; i < val_sample_pairs.length; i++) {
+ samples2.push(val_sample_pairs[i].split(":")[0])
+ vals2.push(parseFloat(val_sample_pairs[i].split(":")[1]))
+ val_sample_dict[val_sample_pairs[i].split(":")[0]] = val_sample_pairs[i].split(":")[1]
+ }
+ datamin2 = d3.min(vals2);
+ datamax2 = d3.max(vals2);
+
+ cofactor2_dict = val_sample_dict
+ cofactor2_values = vals2
+ }
+
+ if ($('input[name=cofactor3_vals]').val()){
+ vals3 = [];
+ val_sample_dict = {}
+ val_sample_pairs = $('input[name=cofactor3_vals]').val().split(",")
+ for (i=0; i < val_sample_pairs.length; i++) {
+ samples3.push(val_sample_pairs[i].split(":")[0])
+ vals3.push(parseFloat(val_sample_pairs[i].split(":")[1]))
+ val_sample_dict[val_sample_pairs[i].split(":")[0]] = val_sample_pairs[i].split(":")[1]
+ }
+
+ datamin3 = d3.min(vals3);
+ datamax3 = d3.max(vals3);
+
+ cofactor3_dict = val_sample_dict
+ cofactor3_values = vals3
+ }
+
+ x_values = []
+ y_values = []
+ sample_names = []
+ sizes = []
+
+ size_cofactor_vals = []
+ if ($('#cofactor1_type option:selected').val() == "size" && $('input[name=cofactor1_vals]').val()){
+ size_cofactor_vals = cofactor1_values
+ cofactor_samples = samples1
+ datamin = datamin1
+ datamax = datamax1
+ } else if ($('#cofactor2_type option:selected').val() == "size" && $('input[name=cofactor2_vals]').val()) {
+ size_cofactor_vals = cofactor2_values
+ cofactor_samples = samples2
+ datamin = datamin2
+ datamax = datamax2
+ } else if ($('#cofactor3_type option:selected').val() == "size" && $('input[name=cofactor3_vals]').val()) {
+ size_cofactor_vals = cofactor3_values
+ cofactor_samples = samples3
+ datamin = datamin3
+ datamax = datamax3
+ }
+
+ unique_vals = []
+ symbol_cofactor_vals = []
+ if ($('#cofactor1_type option:selected').val() == "symbol" && $('input[name=cofactor1_vals]').val()){
+ symbol_cofactor_vals = cofactor1_values
+ cofactor_samples = samples1
+ } else if ($('#cofactor2_type option:selected').val() == "symbol" && $('input[name=cofactor2_vals]').val()) {
+ symbol_cofactor_vals = cofactor2_values
+ cofactor_samples = samples2
+ } else if ($('#cofactor3_type option:selected').val() == "symbol" && $('input[name=cofactor3_vals]').val()) {
+ symbol_cofactor_vals = cofactor3_values
+ cofactor_samples = samples3
+ }
+
+ symbol_list = []
+ if (symbol_cofactor_vals.length > 0) {
+ unique_vals = [...new Set(symbol_cofactor_vals)]
+ for (i=0; i<symbol_cofactor_vals.length; i++){
+ val_pos = unique_vals.indexOf(symbol_cofactor_vals[i])
+ if (val_pos != "-1") {
+ symbol_list.push(val_pos)
+ } else {
+ symbol_list.push(0)
+ }
+ }
+ }
+
+ //This is needed to calculate samples shared by cofactors
+ cofactor_samples_array = []
+ if (samples1.length > 0){
+ cofactor_samples_array.push(samples1)
+ }
+ if (samples2.length > 0){
+ cofactor_samples_array.push(samples2)
+ }
+ if (samples3.length > 0){
+ cofactor_samples_array.push(samples3)
+ }
+ if (cofactor_samples_array.length > 0){
+ shared_samples = _.intersection.apply(_, cofactor_samples_array)
+ } else {
+ shared_samples = js_data.indIDs
+ }
+
+ for (j = 0; j < js_data.data[0].length; j++) {
+
+ if (shared_samples.indexOf(js_data.indIDs[j]) == -1) {
+ continue
+ }
+
+ sizev = 10;
+ datav = 0;
+ if (size_cofactor_vals.length > 0){
+ if (cofactor_samples.indexOf(js_data.indIDs[j])) {
+ datav = size_cofactor_vals[j]
+ sizev = map1to2(datamin, datamax, sizemin, sizemax, datav);
+ }
+ }
+
+ x_values.push(js_data.data[0][j])
+ y_values.push(js_data.data[1][j])
+ sample_names.push(js_data.indIDs[j])
+ sizes.push(sizev)
+
+ data[0].values.push({
+ type: "normal",
+ x: js_data.data[0][j],
+ y: js_data.data[1][j],
+ name: js_data.indIDs[j],
+ size: sizev,
+ v3: datav
+ });
+ }
+
+ point_text = []
+ for (j = 0; j < sample_names.length; j++) {
+ this_text = ""
+ this_text += sample_names[j]
+ if (sample_names[j] in cofactor1_dict){
+ this_text += "<br>Cofactor 1: " + cofactor1_dict[sample_names[j]]
+ }
+ if (sample_names[j] in cofactor2_dict){
+ this_text += "<br>Cofactor 2: " + cofactor2_dict[sample_names[j]]
+ }
+ if (sample_names[j] in cofactor3_dict){
+ this_text += "<br>Cofactor 3: " + cofactor3_dict[sample_names[j]]
+ }
+ point_text.push(this_text)
+ }
+
+ if (symbol_list.length > 0) {
+ var trace1 = {
+ x: x_values,
+ y: y_values,
+ mode: 'markers',
+ text: point_text,
+ hoverinfo: "text+x+y",
+ marker: {
+ color: 'rgb(66, 66, 245)',
+ symbol: symbol_list,
+ size: sizes
+ }
+ }
+ } else {
+ var trace1 = {
+ x: x_values,
+ y: y_values,
+ mode: 'markers',
+ text: point_text,
+ hoverinfo: "text+x+y",
+ marker: {
+ color: 'rgb(66, 66, 245)',
+ size: sizes
+ }
+ }
+ }
+
+ var trace2 = {
+ x: [js_data.intercept_coords[0][0], js_data.intercept_coords[1][0]],
+ y: [js_data.intercept_coords[0][1], js_data.intercept_coords[1][1]],
+ mode: 'lines',
+ line: {
+ color: 'rgb(250, 60, 73)'
+ }
+ }
+
+ return [trace2, trace1];
+}
+
+function map1to2 (min1, max1, min2, max2, v1) {
+ v2 = (v1 - min1) * (max2 - min2) / (max1 - min1) + min2;
+ return v2;
+}
+
+function srgetdata() {
+ var data = [];
+ data.push({
+ values: [],
+ slope: js_data.srslope,
+ intercept: js_data.srintercept
+ });
+
+ sizemin = 8;
+ sizemax = 30;
+
+ ranked_cofactor_vals = ""
+
+ samples1 = [];
+ samples2 = [];
+ samples3 = [];
+
+ if ($('input[name=ranked_cofactor1_vals]').val()){
+ vals1 = []
+ val_sample_dict = {}
+ val_sample_pairs = $('input[name=ranked_cofactor1_vals]').val().split(",")
+ for (i=0; i < val_sample_pairs.length; i++) {
+ samples1.push(val_sample_pairs[i].split(":")[0])
+ vals1.push(parseFloat(val_sample_pairs[i].split(":")[1]))
+ val_sample_dict[val_sample_pairs[i].split(":")[0]] = parseFloat(val_sample_pairs[i].split(":")[1])
+ }
+ datamin1 = d3.min(vals1);
+ datamax1 = d3.max(vals1);
+
+ ranked_cofactor1_dict = val_sample_dict
+ ranked_cofactor1_values = vals1
+ }
+
+ if ($('input[name=ranked_cofactor2_vals]').val()){
+ vals2 = [];
+ val_sample_dict = {}
+ val_sample_pairs = $('input[name=ranked_cofactor2_vals]').val().split(",")
+ for (i=0; i < val_sample_pairs.length; i++) {
+ samples2.push(val_sample_pairs[i].split(":")[0])
+ vals2.push(parseFloat(val_sample_pairs[i].split(":")[1]))
+ val_sample_dict[val_sample_pairs[i].split(":")[0]] = val_sample_pairs[i].split(":")[1]
+ }
+ datamin2 = d3.min(vals2);
+ datamax2 = d3.max(vals2);
+
+ ranked_cofactor2_dict = val_sample_dict
+ ranked_cofactor2_values = vals2
+ }
+
+ if ($('input[name=ranked_cofactor3_vals]').val()){
+ vals3 = [];
+ val_sample_dict = {}
+ val_sample_pairs = $('input[name=ranked_cofactor3_vals]').val().split(",")
+ for (i=0; i < val_sample_pairs.length; i++) {
+ samples3.push(val_sample_pairs[i].split(":")[0])
+ vals3.push(parseFloat(val_sample_pairs[i].split(":")[1]))
+ val_sample_dict[val_sample_pairs[i].split(":")[0]] = val_sample_pairs[i].split(":")[1]
+ }
+
+ datamin3 = d3.min(vals3);
+ datamax3 = d3.max(vals3);
+
+ ranked_cofactor3_dict = val_sample_dict
+ ranked_cofactor3_values = vals3
+ }
+
+ x_values = []
+ y_values = []
+ sample_names = []
+ sizes = []
+
+ if ($('#cofactor1_type option:selected').val() == "size" && $('input[name=ranked_cofactor1_vals]').val()){
+ size_cofactor_vals = ranked_cofactor1_values
+ cofactor_samples = samples1
+ datamin = datamin1
+ datamax = datamax1
+ } else if ($('#cofactor2_type option:selected').val() == "size" && $('input[name=ranked_cofactor2_vals]').val()) {
+ size_cofactor_vals = ranked_cofactor2_values
+ cofactor_samples = samples2
+ datamin = datamin2
+ datamax = datamax2
+ } else if ($('#cofactor3_type option:selected').val() == "size" && $('input[name=ranked_cofactor3_vals]').val()) {
+ size_cofactor_vals = ranked_cofactor3_values
+ cofactor_samples = samples3
+ datamin = datamin3
+ datamax = datamax3
+ }
+
+ unique_vals = []
+ symbol_cofactor_vals = []
+ if ($('#cofactor1_type option:selected').val() == "symbol" && $('input[name=ranked_cofactor1_vals]').val()){
+ symbol_cofactor_vals = cofactor1_values
+ cofactor_samples = samples1
+ } else if ($('#cofactor2_type option:selected').val() == "symbol" && $('input[name=ranked_cofactor2_vals]').val()) {
+ symbol_cofactor_vals = cofactor2_values
+ cofactor_samples = samples2
+ } else if ($('#cofactor3_type option:selected').val() == "symbol" && $('input[name=ranked_cofactor3_vals]').val()) {
+ symbol_cofactor_vals = cofactor3_values
+ cofactor_samples = samples3
+ }
+
+ symbol_list = []
+ if (symbol_cofactor_vals.length > 0) {
+ unique_vals = [...new Set(symbol_cofactor_vals)]
+ for (i=0; i<symbol_cofactor_vals.length; i++){
+ val_pos = unique_vals.indexOf(symbol_cofactor_vals[i])
+ if (val_pos != "-1") {
+ symbol_list.push(val_pos)
+ } else {
+ symbol_list.push(0)
+ }
+ }
+ }
+
+ //This is needed to calculate samples shared by cofactors
+ cofactor_samples_array = []
+ if (samples1.length > 0){
+ cofactor_samples_array.push(samples1)
+ }
+ if (samples2.length > 0){
+ cofactor_samples_array.push(samples2)
+ }
+ if (samples3.length > 0){
+ cofactor_samples_array.push(samples3)
+ }
+ if (cofactor_samples_array.length > 0){
+ shared_samples = _.intersection.apply(_, cofactor_samples_array)
+ } else {
+ shared_samples = js_data.indIDs
+ }
+
+ for (j = 0; j < js_data.rdata[0].length; j++) {
+
+ if (shared_samples.indexOf(js_data.indIDs[j]) == -1) {
+ continue
+ }
+
+ if (size_cofactor_vals.length > 0){
+ if (cofactor_samples.indexOf(js_data.indIDs[j])) {
+ datav = size_cofactor_vals[j]
+ sizev = map1to2(datamin, datamax, sizemin, sizemax, datav);
+ }
+ } else {
+ sizev = 10;
+ }
+
+ x_values.push(js_data.rdata[0][j])
+ y_values.push(js_data.rdata[1][j])
+ sample_names.push(js_data.indIDs[j])
+ sizes.push(sizev)
+
+ data[0].values.push({
+ type: "ranked",
+ x: js_data.rdata[0][j],
+ y: js_data.rdata[1][j],
+ name: js_data.indIDs[j],
+ size: sizev,
+ });
+ }
+
+ point_text = []
+ for (j = 0; j < sample_names.length; j++) {
+ this_text = ""
+ this_text += sample_names[j]
+ if (sample_names[j] in ranked_cofactor1_dict){
+ this_text += "<br>Cofactor 1: " + ranked_cofactor1_dict[sample_names[j]]
+ }
+ if (sample_names[j] in ranked_cofactor2_dict){
+ this_text += "<br>Cofactor 2: " + ranked_cofactor2_dict[sample_names[j]]
+ }
+ if (sample_names[j] in cofactor3_dict){
+ this_text += "<br>Cofactor 3: " + ranked_cofactor3_dict[sample_names[j]]
+ }
+ point_text.push(this_text)
+ }
+
+ var trace1 = {
+ x: x_values,
+ y: y_values,
+ mode: 'markers',
+ text: point_text,
+ hoverinfo: "text+x+y",
+ marker: {
+ color: 'rgb(66, 66, 245)',
+ symbol: symbol_list,
+ size: sizes
+ }
+ }
+
+ var trace2 = {
+ x: [js_data.sr_intercept_coords[0][0], js_data.sr_intercept_coords[1][0]],
+ y: [js_data.sr_intercept_coords[0][1], js_data.sr_intercept_coords[1][1]],
+ mode: 'lines',
+ line: {
+ color: 'rgb(250, 60, 73)'
+ }
+ }
+
+ return [trace2, trace1];
+}
+
+function chartupdatewh() {
+ var width = $("#width").val();
+ var height = $("#height").val();
+
+ width_height_update = {
+ height: height,
+ width: width
+ }
+
+ Plotly.newPlot('scatterplot2', getdata(), layout, modebar_options)
+ Plotly.relayout('scatterplot2', width_height_update)
+
+ Plotly.newPlot('srscatterplot2', srgetdata(), sr_layout, modebar_options)
+ Plotly.relayout('srscatterplot2', width_height_update)
+}
+
+function colorer(d) {
+ if ($('#cofactor1_type option:selected').val() == "color"){
+ datamin = d3.min(cofactor1_values);
+ datamax = d3.max(cofactor1_values);
+ } else if ($('#cofactor2_type option:selected').val() == "color"){
+ datamin = d3.min(cofactor2_values);
+ datamax = d3.max(cofactor2_values);
+ } else {
+ datamin = d3.min(cofactor3_values);
+ datamax = d3.max(cofactor3_values);
+ }
+ colormin = $("#cocolorfrom").val();
+ colormax = $("#cocolorto").val();
+
+ compute = d3.interpolate("#"+colormin, "#"+colormax);
+ linear = d3.scale.linear().domain([datamin, datamax]).range([0,1]);
+
+ this_sample = d.tx.split("<br>")[0]
+
+ if ($('#cofactor1_type option:selected').val() == "color"){
+ c= compute(linear(cofactor1_dict[this_sample]));
+ } else if ($('#cofactor2_type option:selected').val() == "color"){
+ c= compute(linear(cofactor2_dict[this_sample]));
+ } else {
+ c= compute(linear(cofactor3_dict[this_sample]));
+ }
+
+ return c;
+}
+
+function ranked_colorer(d) {
+ if ($('#cofactor1_type option:selected').val() == "color"){
+ datamin = d3.min(ranked_cofactor1_values);
+ datamax = d3.max(ranked_cofactor1_values);
+ } else if ($('#cofactor2_type option:selected').val() == "color"){
+ datamin = d3.min(ranked_cofactor2_values);
+ datamax = d3.max(ranked_cofactor2_values);
+ } else {
+ datamin = d3.min(ranked_cofactor3_values);
+ datamax = d3.max(ranked_cofactor3_values);
+ }
+ colormin = $("#cocolorfrom").val();
+ colormax = $("#cocolorto").val();
+
+ compute = d3.interpolate("#"+colormin, "#"+colormax);
+ linear = d3.scale.linear().domain([datamin, datamax]).range([0,1]);
+
+ this_sample = d.tx.split("<br>")[0]
+
+ if ($('#cofactor1_type option:selected').val() == "color"){
+ c= compute(linear(ranked_cofactor1_dict[this_sample]));
+ } else if ($('#cofactor2_type option:selected').val() == "color"){
+ c= compute(linear(ranked_cofactor2_dict[this_sample]));
+ } else {
+ c= compute(linear(ranked_cofactor3_dict[this_sample]));
+ }
+
+ return c;
+}
+
+function chartupdatedata() {
+ var size = $("#marksize").val();
+ var shape = $("#markshape").val();
+
+ var pearson_title_update = {
+ title: "Pearson Correlation Scatterplot"
+ }
+ var spearman_title_update = {
+ title: "Spearman Rank Correlation Scatterplot"
+ }
+
+ Plotly.newPlot('scatterplot2', getdata(), layout, modebar_options)
+ Plotly.relayout('scatterplot2', pearson_title_update)
+ Plotly.newPlot('srscatterplot2', srgetdata(), sr_layout, modebar_options)
+ Plotly.relayout('srscatterplot2', spearman_title_update)
+
+ if ($('#cofactor1_type option:selected').val() == "color"){
+ $('#cofactor_color_selector').css("display", "inline")
+ if ($('input[name=cofactor1_vals]').val()){
+ d3.select('#scatterplot2 svg').selectAll('.point')
+ .style({
+ 'stroke': colorer,
+ 'fill': colorer
+ });
+ d3.select('#srscatterplot2 svg').selectAll('.point')
+ .style({
+ 'stroke': ranked_colorer,
+ 'fill': ranked_colorer
+ });
+ }
+ } else if ($('#cofactor2_type option:selected').val() == "color"){
+ $('#cofactor_color_selector').css("display", "inline")
+ if ($('input[name=cofactor2_vals]').val()){
+ d3.select('#scatterplot2 svg').selectAll('.point')
+ .style({
+ 'stroke': colorer,
+ 'fill': colorer
+ });
+ d3.select('#srscatterplot2 svg').selectAll('.point')
+ .style({
+ 'stroke': ranked_colorer,
+ 'fill': ranked_colorer
+ });
+ }
+ } else {
+ $('#cofactor_color_selector').css("display", "inline")
+ if ($('input[name=cofactor3_vals]').val()){
+ d3.select('#scatterplot2 svg').selectAll('.point')
+ .style({
+ 'stroke': colorer,
+ 'fill': colorer
+ });
+ d3.select('#srscatterplot2 svg').selectAll('.point')
+ .style({
+ 'stroke': ranked_colorer,
+ 'fill': ranked_colorer
+ });
+ }
+ }
+}
+
+drawg();
+srdrawg();
+
+$(".chartupdatewh").change(function () {
+ chartupdatewh();
+});
+
+$(".chartupdatedata").change(function () {
+ chartupdatedata();
+});
+
+$("#cofactor1_type").change(function () {
+
+ the_types = ["color", "size", "symbol"]
+
+ cofactor1_type = $(this).val()
+ cofactor2_type = $("#cofactor2_type option:selected").val()
+ cofactor3_type = $("#cofactor3_type option:selected").val()
+
+ if (cofactor2_type == cofactor1_type){
+ for (i=0; i<3; i++){
+ if (the_types[i] != cofactor1_type && the_types[i] != cofactor3_type) {
+ $("#cofactor2_type").val(the_types[i]);
+ }
+ }
+ }
+ else if (cofactor3_type == cofactor1_type){
+ for (i=0; i<3; i++){
+ if (the_types[i] != cofactor1_type && the_types[i] != cofactor2_type) {
+ $("#cofactor3_type").val(the_types[i]);
+ }
+ }
+ }
+
+ chartupdatedata();
+});
+
+$("#cofactor2_type").change(function () {
+
+ the_types = ["color", "size", "symbol"]
+
+ cofactor2_type = $(this).val()
+ cofactor1_type = $("#cofactor1_type option:selected").val()
+ cofactor3_type = $("#cofactor3_type option:selected").val()
+
+ if (cofactor1_type == cofactor2_type){
+ for (i=0; i<3; i++){
+ if (the_types[i] != cofactor2_type && the_types[i] != cofactor3_type){
+ $("#cofactor1_type").val(the_types[i]);
+ }
+ }
+ }
+ else if (cofactor3_type == cofactor2_type){
+ for (i=0; i<3; i++){
+ if (the_types[i] != cofactor2_type && the_types[i] != cofactor1_type){
+ $("#cofactor3_type").val(the_types[i]);
+ }
+ }
+ }
+
+ chartupdatedata();
+});
+
+$("#cofactor3_type").change(function () {
+
+ the_types = ["color", "size", "symbol"]
+
+ cofactor3_type = $(this).val()
+ cofactor1_type = $("#cofactor1_type option:selected").val()
+ cofactor2_type = $("#cofactor2_type option:selected").val()
+
+ if (cofactor1_type == cofactor3_type){
+ for (i=0; i<3; i++){
+ if (the_types[i] != cofactor2_type && the_types[i] != cofactor3_type){
+ $("#cofactor1_type").val(the_types[i]);
+ }
+ }
+ }
+ else if (cofactor2_type == cofactor3_type){
+ for (i=0; i<3; i++){
+ if (the_types[i] != cofactor2_type && the_types[i] != cofactor1_type){
+ $("#cofactor3_type").val(the_types[i]);
+ }
+ }
+ }
+});
+
+open_covariate_selection = function() {
+ return $('#collections_holder').load('/collections/list #collections_list', (function(_this) {
+ return function() {
+ $.colorbox({
+ inline: true,
+ href: "#collections_holder",
+ onComplete: function(){
+ $.getScript("/static/new/javascript/get_traits_from_collection.js");
+ }
+ });
+ return $('a.collection_name').attr('onClick', 'return false');
+ };
+ })(this));
+};
+
+remove_cofactors = function() {
+ $('input[name=cofactor1_vals]').val("");
+ $('input[name=ranked_cofactor1_vals]').val("");
+ $('input[name=cofactor2_vals]').val("");
+ $('input[name=ranked_cofactor2_vals]').val("");
+ $('input[name=cofactor3_vals]').val("");
+ $('input[name=ranked_cofactor3_vals]').val("");
+
+ $('#select_cofactor1').text("Select Cofactor 1");
+ $('#cofactor2_button').css("display", "none");
+ $('#cofactor3_button').css("display", "none");
+
+ $('#cofactor_color_select').css("display", "none");
+
+ $('#cofactor1_info_container').css("display", "none");
+ $('#cofactor2_info_container').css("display", "none");
+ $('#cofactor3_info_container').css("display", "none");
+
+ chartupdatedata();
+};
+
+$(document).ready(function(){
+ chartupdatedata();
+
+ $('#select_cofactor1').click(function () {
+ $('input[name=selecting_which_cofactor]').val("1");
+ open_covariate_selection();
+ });
+
+ $('#select_cofactor2').click(function () {
+ $('input[name=selecting_which_cofactor]').val("2");
+ open_covariate_selection();
+ });
+
+ $('#select_cofactor3').click(function () {
+ $('input[name=selecting_which_cofactor]').val("3");
+ open_covariate_selection();
+ });
+
+ $('#remove_cofactors').click(function () {
+ remove_cofactors();
+ });
+
+ $('#invert_axes').click(function () {
+ var [dataset_1, trait_1] = js_data.trait_2.split(": ")
+ var [dataset_2, trait_2] = js_data.trait_1.split(": ")
+ window.location.replace("/corr_scatter_plot?method=pearson&dataset_1=" + dataset_1 + "&dataset_2=" + dataset_2 + "&trait_1=" + trait_1 + "&trait_2=" + trait_2)
+ });
+
+});
diff --git a/gn2/wqflask/static/new/javascript/draw_probability_plot.js b/gn2/wqflask/static/new/javascript/draw_probability_plot.js
new file mode 100644
index 00000000..1b944d4f
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/draw_probability_plot.js
@@ -0,0 +1,136 @@
+// Generated by CoffeeScript 1.9.2
+(function() {
+ var get_z_scores, redraw_prob_plot, root;
+
+ root = typeof exports !== "undefined" && exports !== null ? exports : this;
+
+ get_z_scores = function(n) {
+ var i, j, osm_uniform, ref, x;
+ osm_uniform = new Array(n);
+ osm_uniform[n - 1] = Math.pow(0.5, 1.0 / n);
+ osm_uniform[0] = 1 - osm_uniform[n - 1];
+ for (i = j = 1, ref = n - 2; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {
+ osm_uniform[i] = (i + 1 - 0.3175) / (n + 0.365);
+ }
+ return (function() {
+ var k, len, results;
+ results = [];
+ for (k = 0, len = osm_uniform.length; k < len; k++) {
+ x = osm_uniform[k];
+ results.push(jStat.normal.inv(x, 0, 1));
+ }
+ return results;
+ })();
+ };
+
+ redraw_prob_plot = function(samples, sample_group) {
+ var container, h, margin, totalh, totalw, w;
+ h = 600;
+ w = 500;
+ margin = {
+ left: 60,
+ top: 40,
+ right: 40,
+ bottom: 40,
+ inner: 5
+ };
+ totalh = h + margin.top + margin.bottom;
+ totalw = w + margin.left + margin.right;
+ container = $("#prob_plot_container");
+ container.width(totalw);
+ container.height(totalh);
+ return nv.addGraph((function(_this) {
+ return function() {
+ var W, all_samples, chart, data, intercept, make_data, names, pvalue, pvalue_str, slope, sorted_names, sorted_values, sw_result, test_str, x, z_scores;
+ chart = nv.models.scatterChart().width(w).height(h).showLegend(true).color(d3.scale.category10().range());
+ chart.pointRange([50, 50]);
+ chart.legend.updateState(false);
+ chart.xAxis.axisLabel("Expected Z score").axisLabelDistance(20).tickFormat(d3.format('.02f'));
+ chart.tooltipContent(function(obj) {
+ return '<b style="font-size: 20px">' + obj.point.name + '</b>';
+ });
+ all_samples = samples[sample_group];
+ names = (function() {
+ var j, len, ref, results;
+ ref = _.keys(all_samples);
+ results = [];
+ for (j = 0, len = ref.length; j < len; j++) {
+ x = ref[j];
+ if (all_samples[x] !== null) {
+ results.push(x);
+ }
+ }
+ return results;
+ })();
+ sorted_names = names.sort(function(x, y) {
+ return all_samples[x].value - all_samples[y].value;
+ });
+ max_decimals = 0
+ sorted_values = (function() {
+ var j, len, results;
+ results = [];
+ for (j = 0, len = sorted_names.length; j < len; j++) {
+ x = sorted_names[j];
+ results.push(all_samples[x].value);
+ if (all_samples[x].value.countDecimals() > max_decimals) {
+ max_decimals = all_samples[x].value.countDecimals()-1
+ }
+ }
+ return results;
+ })();
+ //ZS: 0.1 indicates buffer, increase to increase buffer
+ y_domain = [sorted_values[0] - (sorted_values.slice(-1)[0] - sorted_values[0])*0.1, sorted_values.slice(-1)[0] + (sorted_values.slice(-1)[0] - sorted_values[0])*0.1]
+ chart.yDomain(y_domain)
+ chart.yAxis.axisLabel("Trait value").axisLabelDistance(10).tickFormat(d3.format('.0'+max_decimals.toString()+'f'));
+ sw_result = ShapiroWilkW(sorted_values);
+ W = sw_result.w.toFixed(3);
+ pvalue = sw_result.p.toFixed(3);
+ pvalue_str = pvalue > 0.05 ? pvalue.toString() : "<span style='color:red'>" + pvalue + "</span>";
+ test_str = "Shapiro-Wilk test statistic is " + W + " (p = " + pvalue_str + ")";
+ z_scores = get_z_scores(sorted_values.length);
+ //ZS: 0.1 indicates buffer, increase to increase buffer
+ x_domain = [z_scores[0] - (z_scores.slice(-1)[0] - z_scores[0])*0.1, z_scores.slice(-1)[0] + (z_scores.slice(-1)[0] - z_scores[0])*0.1]
+ chart.xDomain(x_domain)
+ slope = jStat.stdev(sorted_values);
+ intercept = jStat.mean(sorted_values);
+ make_data = function(group_name) {
+ var sample, value, z_score;
+ return {
+ key: js_data.sample_group_types[group_name],
+ slope: slope,
+ intercept: intercept,
+ values: (function() {
+ var j, len, ref, ref1, results;
+ ref = _.zip(get_z_scores(sorted_values.length), sorted_values, sorted_names);
+ results = [];
+ for (j = 0, len = ref.length; j < len; j++) {
+ ref1 = ref[j], z_score = ref1[0], value = ref1[1], sample = ref1[2];
+ if (sample in samples[group_name]) {
+ results.push({
+ x: z_score,
+ y: value,
+ name: sample
+ });
+ }
+ }
+ return results;
+ })()
+ };
+ };
+ data = [make_data('samples_primary'), make_data('samples_other')];
+ d3.select("#prob_plot_container svg").datum(data).call(chart);
+ if (js_data.trait_symbol != null) {
+ $("#prob_plot_title").html("<h3>" + js_data.trait_symbol + ": " + js_data.trait_id + "</h3>");
+ } else {
+ $("#prob_plot_title").html("<h3>" + js_data.trait_id + "</h3>");
+ }
+ $("#shapiro_wilk_text").html(test_str)
+ $("#prob_plot_container .nv-legendWrap").toggle(sample_group === "samples_all");
+ return chart;
+ };
+ })(this));
+ };
+
+ root.redraw_prob_plot_impl = redraw_prob_plot;
+
+}).call(this);
diff --git a/gn2/wqflask/static/new/javascript/get_covariates_from_collection.js b/gn2/wqflask/static/new/javascript/get_covariates_from_collection.js
new file mode 100644
index 00000000..ba8fa8b0
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/get_covariates_from_collection.js
@@ -0,0 +1,248 @@
+// Generated by CoffeeScript 1.8.0
+var add_trait_data, assemble_into_json, back_to_collections, collection_click, collection_list, color_by_trait, create_trait_data_csv, get_this_trait_vals, get_trait_data, process_traits, selected_traits, submit_click, this_trait_data, trait_click,
+ __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
+
+this_trait_data = null;
+
+selected_traits = {};
+
+$('#collections_list').attr("style", "width: 100%;");
+$('#trait_table').dataTable( {
+ "drawCallback": function( settings ) {
+ $('#trait_table tr').click(function(event) {
+ if (event.target.type !== 'checkbox') {
+ $(':checkbox', this).trigger('click');
+ }
+ });
+ },
+ "columns": [
+ { "type": "natural", "width": "3%" },
+ { "type": "natural", "width": "8%" },
+ { "type": "natural", "width": "20%" },
+ { "type": "natural", "width": "25%" },
+ { "type": "natural", "width": "25%" },
+ { "type": "natural", "width": "15%" }
+ ],
+ "columnDefs": [ {
+ "targets": 0,
+ "orderable": false
+ } ],
+ "order": [[1, "asc" ]],
+ "sDom": "RZtr",
+ "iDisplayLength": -1,
+ "autoWidth": true,
+ "bDeferRender": true,
+ "bSortClasses": false,
+ "paging": false,
+ "orderClasses": true
+} );
+
+if ( ! $.fn.DataTable.isDataTable( '#collection_table' ) ) {
+ $('#collection_table').dataTable( {
+ "createdRow": function ( row, data, index ) {
+ if ($('td', row).eq(2).text().length > 40) {
+ $('td', row).eq(2).text($('td', row).eq(2).text().substring(0, 40));
+ $('td', row).eq(2).text($('td', row).eq(2).text() + '...')
+ }
+ if ($('td', row).eq(4).text().length > 50) {
+ $('td', row).eq(4).text($('td', row).eq(4).text().substring(0, 50));
+ $('td', row).eq(4).text($('td', row).eq(4).text() + '...')
+ }
+ },
+ "columnDefs": [ {
+ "targets": 0,
+ "orderable": false
+ } ],
+ "order": [[1, "asc" ]],
+ "sDom": "ZRtr",
+ "iDisplayLength": -1,
+ "autoWidth": true,
+ "bSortClasses": false,
+ "paging": false,
+ "orderClasses": true
+ } );
+}
+
+collection_click = function() {
+ var this_collection_url;
+ this_collection_url = $(this).find('.collection_name').prop("href");
+ this_collection_url += "&json";
+ collection_list = $("#collections_holder").html();
+ return $.ajax({
+ dataType: "json",
+ url: this_collection_url,
+ success: process_traits
+ });
+};
+
+submit_click = function() {
+ var covariates_string = "";
+ var covariates_as_set = new Set();
+ $(".selected-covariates:first option").each(function() {
+ if ($(this).val() != ""){
+ covariates_as_set.add($(this).val() + "," + $(this).text());
+ }
+ });
+ $('#collections_holder').find('input[type=checkbox]:checked').each(function() {
+ var this_dataset, this_trait;
+ this_trait = $(this).parents('tr').find('.trait').text();
+ this_trait_display = $(this).parents('tr').find('.trait').data("display_name");
+ this_description = $(this).parents('tr').find('.description').text();
+ this_dataset = $(this).parents('tr').find('.dataset').data("dataset");
+ this_covariate_display_string = this_trait_display
+ if (this_covariate_display_string.length > 50) {
+ this_covariate_display_string = this_covariate_display_string.substring(0, 45) + "..."
+ }
+ covariates_as_set.add(this_trait + ":" + this_dataset + "," + this_covariate_display_string)
+ });
+
+ covariates_as_list = Array.from(covariates_as_set)
+
+ // Removed the starting "No covariates selected" option before adding options for each covariate
+ if (covariates_as_list.length > 0){
+ $(".selected-covariates option[value='']").each(function() {
+ $(this).remove();
+ });
+ }
+
+ $(".selected-covariates option").each(function() {
+ $(this).remove();
+ });
+
+ covariate_list_for_form = []
+ $.each(covariates_as_list, function (index, value) {
+ option_value = value.split(",")[0]
+ option_text = value.split(",")[1]
+ $(".selected-covariates").append($("<option/>", {
+ value: option_value,
+ text: option_text
+ }))
+ covariate_list_for_form.push(option_value)
+ });
+
+ $("input[name=covariates]").val(covariate_list_for_form.join(","));
+
+ cofactor_count = $(".selected-covariates:first option").length;
+ if (cofactor_count > 10){
+ $(".selected-covariates").attr("size", 10);
+ } else {
+ $(".selected-covariates").attr("size", cofactor_count);
+ }
+
+ return $.colorbox.close();
+};
+
+trait_click = function() {
+ var dataset, this_trait_url, trait;
+ trait = $(this).parent().find('.trait').text();
+ dataset = $(this).parent().find('.dataset').data("dataset");
+ $("input[name=covariates]").val(trait + ":" + dataset)
+ $(".selected-covariates").text(trait)
+ return $.colorbox.close();
+};
+
+add_trait_data = function(trait_data, textStatus, jqXHR) {
+ var trait_name, trait_sample_data;
+ trait_name = trait_data[0];
+ trait_sample_data = trait_data[1];
+ selected_traits[trait_name] = trait_sample_data;
+ return console.log("selected_traits:", selected_traits);
+};
+
+get_trait_data = function(trait_data, textStatus, jqXHR) {
+ var sample, samples, this_trait_vals, trait_sample_data, vals, _i, _len;
+ trait_sample_data = trait_data[1];
+ samples = $('input[name=allsamples]').val().split(" ");
+ vals = [];
+ for (_i = 0, _len = samples.length; _i < _len; _i++) {
+ sample = samples[_i];
+ if (__indexOf.call(Object.keys(trait_sample_data), sample) >= 0) {
+ vals.push(parseFloat(trait_sample_data[sample]));
+ } else {
+ vals.push(null);
+ }
+ }
+ if ($('input[name=samples]').length < 1) {
+ $('#hidden_inputs').append('<input type="hidden" name="samples" value="[' + samples.toString() + ']" />');
+ }
+ $('#hidden_inputs').append('<input type="hidden" name="vals" value="[' + vals.toString() + ']" />');
+ this_trait_vals = get_this_trait_vals(samples);
+ return color_by_trait(trait_sample_data);
+};
+
+get_this_trait_vals = function(samples) {
+ var sample, this_trait_vals, this_val, this_vals_json, _i, _len;
+ this_trait_vals = [];
+ for (_i = 0, _len = samples.length; _i < _len; _i++) {
+ sample = samples[_i];
+ this_val = parseFloat($("input[name='value:" + sample + "']").val());
+ if (!isNaN(this_val)) {
+ this_trait_vals.push(this_val);
+ } else {
+ this_trait_vals.push(null);
+ }
+ }
+ this_vals_json = '[' + this_trait_vals.toString() + ']';
+ return this_trait_vals;
+};
+
+assemble_into_json = function(this_trait_vals) {
+ var json_data, json_ids, num_traits, samples;
+ num_traits = $('input[name=vals]').length;
+ samples = $('input[name=samples]').val();
+ json_ids = samples;
+ json_data = '[' + this_trait_vals;
+ $('input[name=vals]').each((function(_this) {
+ return function(index, element) {
+ return json_data += ',' + $(element).val();
+ };
+ })(this));
+ json_data += ']';
+ return [json_ids, json_data];
+};
+
+color_by_trait = function(trait_sample_data, textStatus, jqXHR) {
+ console.log('in color_by_trait:', trait_sample_data);
+ return root.bar_chart.color_by_trait(trait_sample_data);
+};
+
+process_traits = function(trait_data, textStatus, jqXHR) {
+ var the_html, trait, _i, _len;
+ the_html = "<button id='back_to_collections' class='btn btn-inverse btn-small'>";
+ the_html += "<i class='icon-white icon-arrow-left'></i> Back </button>";
+ the_html += " <button id='submit_cofactors' class='btn btn-primary btn-small submit'> Submit </button>";
+ the_html += "<table id='collection_table' style='padding-top: 10px;' class='table table-hover'>";
+ the_html += "<thead><tr><th></th><th>Record</th><th>Data Set</th><th>Description</th></tr></thead>";
+ the_html += "<tbody>";
+ for (_i = 0, _len = trait_data.length; _i < _len; _i++) {
+ trait = trait_data[_i];
+ the_html += "<tr class='trait_line'>";
+ the_html += "<td class='select_trait'><input type='checkbox' name='selectCheck' class='checkbox edit_sample_checkbox'></td>";
+ if ("abbreviation" in trait) {
+ the_html += "<td class='trait' data-display_name='" + trait.name + " - " + trait.abbreviation + "'>" + trait.name + "</td>";
+ } else if ("symbol" in trait) {
+ the_html += "<td class='trait' data-display_name='" + trait.name + " - " + trait.symbol + "'>" + trait.name + "</td>";
+ } else {
+ the_html += "<td class='trait' data-display_name='" + trait.name + "'>" + trait.name + "</td>";
+ }
+ the_html += "<td class='dataset' data-dataset='" + trait.dataset + "'>" + trait.dataset_name + "</td>";
+ the_html += "<td class='description'>" + trait.description + "</td>";
+ }
+ the_html += "</tbody>";
+ the_html += "</table>";
+ the_html += "<script type='text/javascript' src='/static/new/javascript/get_covariates_from_collection.js'></script>"
+ $("#collections_holder").html(the_html);
+ return $('#collections_holder').colorbox.resize();
+};
+
+back_to_collections = function() {
+ console.log("collection_list:", collection_list);
+ $("#collections_holder").html(collection_list);
+ $(document).on("click", ".collection_line", collection_click);
+ return $('#collections_holder').colorbox.resize();
+};
+
+$(".collection_line").on("click", collection_click);
+$(".submit").on("click", submit_click);
+$(".trait").on("click", trait_click);
+$("#back_to_collections").on("click", back_to_collections);
diff --git a/gn2/wqflask/static/new/javascript/get_traits_from_collection.js b/gn2/wqflask/static/new/javascript/get_traits_from_collection.js
new file mode 100644
index 00000000..c115f3b0
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/get_traits_from_collection.js
@@ -0,0 +1,414 @@
+// Generated by CoffeeScript 1.8.0
+var add_trait_data, assemble_into_json, back_to_collections, collection_click, collection_list, color_by_trait, create_trait_data_csv, get_this_trait_vals, get_trait_data, process_traits, selected_traits, submit_click, this_trait_data, trait_click,
+ __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
+
+this_trait_data = null;
+
+selected_traits = {};
+
+$('#collections_list').attr("style", "width: 100%;");
+$('#trait_table').dataTable( {
+ "drawCallback": function( settings ) {
+ $('#trait_table tr').click(function(event) {
+ if (event.target.type !== 'checkbox') {
+ $(':checkbox', this).trigger('click');
+ }
+ });
+ },
+ "columns": [
+ { "type": "natural", "width": "3%" },
+ { "type": "natural", "width": "8%" },
+ { "type": "natural", "width": "20%" },
+ { "type": "natural", "width": "25%" },
+ { "type": "natural", "width": "25%" },
+ { "type": "natural", "width": "15%" }
+ ],
+ "columnDefs": [ {
+ "targets": 0,
+ "orderable": false
+ } ],
+ "order": [[1, "asc" ]],
+ "sDom": "RZtr",
+ "iDisplayLength": -1,
+ "autoWidth": true,
+ "bDeferRender": true,
+ "bSortClasses": false,
+ "paging": false,
+ "orderClasses": true
+} );
+
+if ( ! $.fn.DataTable.isDataTable( '#collection_table' ) ) {
+ $('#collection_table').dataTable( {
+ "createdRow": function ( row, data, index ) {
+ if ($('td', row).eq(2).text().length > 40) {
+ $('td', row).eq(2).text($('td', row).eq(2).text().substring(0, 40));
+ $('td', row).eq(2).text($('td', row).eq(2).text() + '...')
+ }
+ if ($('td', row).eq(4).text().length > 50) {
+ $('td', row).eq(4).text($('td', row).eq(4).text().substring(0, 50));
+ $('td', row).eq(4).text($('td', row).eq(4).text() + '...')
+ }
+ },
+ "columnDefs": [ {
+ "targets": 0,
+ "orderable": false
+ } ],
+ "order": [[1, "asc" ]],
+ "sDom": "ZRtr",
+ "iDisplayLength": -1,
+ "autoWidth": true,
+ "bSortClasses": false,
+ "paging": false,
+ "orderClasses": true
+ } );
+}
+
+collection_click = function() {
+ var this_collection_url;
+
+ this_collection_url = $(this).find('.collection_name').prop("href");
+ this_collection_url += "&json";
+ collection_list = $("#collections_holder").html();
+ return $.ajax({
+ dataType: "json",
+ url: this_collection_url,
+ success: process_traits
+ });
+};
+
+submit_click = function() {
+ var all_vals, sample, samples, scatter_matrix, this_trait_vals, trait, trait_names, trait_vals_csv, traits, _i, _j, _len, _len1, _ref;
+ selected_traits = {};
+ traits = [];
+ $('#collections_holder').find('input[type=checkbox]:checked').each(function() {
+ var this_dataset, this_trait, this_trait_url;
+ this_trait = $(this).parents('tr').find('.trait').text();
+ this_dataset = $(this).parents('tr').find('.dataset').text();
+ this_trait_url = "/trait/get_sample_data?trait=" + this_trait + "&dataset=" + this_dataset;
+ return $.ajax({
+ dataType: "json",
+ url: this_trait_url,
+ async: false,
+ success: add_trait_data
+ });
+ });
+ trait_names = [];
+ samples = $('input[name=allsamples]').val().split(" ");
+ all_vals = [];
+ this_trait_vals = get_this_trait_vals(samples);
+ all_vals.push(this_trait_vals);
+ _ref = Object.keys(selected_traits);
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ trait = _ref[_i];
+ trait_names.push(trait);
+ this_trait_vals = [];
+ for (_j = 0, _len1 = samples.length; _j < _len1; _j++) {
+ sample = samples[_j];
+ if (__indexOf.call(Object.keys(selected_traits[trait]), sample) >= 0) {
+ this_trait_vals.push(parseFloat(selected_traits[trait][sample]));
+ } else {
+ this_trait_vals.push(null);
+ }
+ }
+ all_vals.push(this_trait_vals);
+ }
+ trait_vals_csv = create_trait_data_csv(selected_traits);
+ scatter_matrix = new ScatterMatrix(trait_vals_csv);
+ scatter_matrix.render();
+ return $.colorbox.close();
+};
+
+create_trait_data_csv = function(selected_traits) {
+ var all_vals, index, sample, sample_vals, samples, this_trait_vals, trait, trait_names, trait_vals_csv, _i, _j, _k, _l, _len, _len1, _len2, _len3, _ref;
+ trait_names = [];
+ trait_names.push($('input[name=trait_id]').val());
+ samples = $('input[name=allsamples]').val().split(" ");
+ all_vals = [];
+ this_trait_vals = get_this_trait_vals(samples);
+ all_vals.push(this_trait_vals);
+ _ref = Object.keys(selected_traits);
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ trait = _ref[_i];
+ trait_names.push(trait);
+ this_trait_vals = [];
+ for (_j = 0, _len1 = samples.length; _j < _len1; _j++) {
+ sample = samples[_j];
+ if (__indexOf.call(Object.keys(selected_traits[trait]), sample) >= 0) {
+ this_trait_vals.push(parseFloat(selected_traits[trait][sample]));
+ } else {
+ this_trait_vals.push(null);
+ }
+ }
+ all_vals.push(this_trait_vals);
+ }
+
+ trait_vals_csv = trait_names.join(",");
+ trait_vals_csv += "\n";
+ for (index = _k = 0, _len2 = samples.length; _k < _len2; index = ++_k) {
+ sample = samples[index];
+ if (all_vals[0][index] === null) {
+ continue;
+ }
+ sample_vals = [];
+ for (_l = 0, _len3 = all_vals.length; _l < _len3; _l++) {
+ trait = all_vals[_l];
+ sample_vals.push(trait[index]);
+ }
+ trait_vals_csv += sample_vals.join(",");
+ trait_vals_csv += "\n";
+ }
+ return trait_vals_csv;
+};
+
+trait_click = function() {
+ var dataset, this_trait_url, trait;
+
+ trait = $(this).parent().find('.trait').text();
+ dataset = $(this).parent().find('.dataset').text();
+ this_trait_url = "/trait/get_sample_data?trait=" + trait + "&dataset=" + dataset;
+ $.ajax({
+ dataType: "json",
+ url: this_trait_url,
+ success: get_trait_data
+ });
+ return $.colorbox.close();
+};
+
+trait_row_click = function() {
+ var dataset, this_trait_url, trait;
+ trait = $(this).find('.trait').text();
+ dataset = $(this).find('.dataset').data("dataset");
+ this_trait_url = "/trait/get_sample_data?trait=" + trait + "&dataset=" + dataset;
+ $.ajax({
+ dataType: "json",
+ url: this_trait_url,
+ success: get_trait_data
+ });
+ return $.colorbox.close();
+};
+
+add_trait_data = function(trait_data, textStatus, jqXHR) {
+ var trait_name, trait_sample_data;
+ trait_name = trait_data[0];
+ trait_sample_data = trait_data[1];
+ selected_traits[trait_name] = trait_sample_data;
+ return console.log("selected_traits:", selected_traits);
+};
+
+populate_cofactor_info = function(trait_info) {
+ if ($('input[name=selecting_which_cofactor]').val() == "1"){
+ $('#cofactor1_trait_link').attr("href", trait_info['url'])
+ if (trait_info['type'] == "ProbeSet"){
+ $('#cofactor1_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['tissue'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ $('#cofactor1_description').text("[" + trait_info['symbol'] + " on " + trait_info['location'] + " Mb]\n" + trait_info['description'])
+ } else if (trait_info['type'] == "Publish") {
+ $('#cofactor1_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ if ('pubmed_link' in trait_info) {
+ $('#cofactor1_description').html('<a href=\"' + trait_info['pubmed_link'] + '\">PubMed: ' + trait_info['pubmed_text'] + '</a><br>' + trait_info['description'])
+ } else {
+ $('#cofactor1_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ $('#cofactor1_description').text("[" + trait_info['name'] + " on " + trait_info['location'] + " Mb]\n" + trait_info['description'])
+ }
+ } else {
+ $('#cofactor1_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ $('#cofactor1_description').text("[" + trait_info['name'] + " on " + trait_info['location'] + " Mb]\n")
+ }
+ $('#select_cofactor1').text("Change Cofactor 1");
+ $('#cofactor1_info_container').css("display", "inline");
+ $('#cofactor2_button').css("display", "inline-block");
+ } else if ($('input[name=selecting_which_cofactor]').val() == "2"){
+ $('#cofactor2_trait_link').attr("href", trait_info['url'])
+ if (trait_info['type'] == "ProbeSet"){
+ $('#cofactor2_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['tissue'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ $('#cofactor2_description').text("[" + trait_info['symbol'] + " on " + trait_info['location'] + " Mb]\n" + trait_info['description'])
+ } else if (trait_info['type'] == "Publish") {
+ $('#cofactor2_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ if ('pubmed_link' in trait_info) {
+ $('#cofactor2_description').html('<a href=\"' + trait_info['pubmed_link'] + '\">PubMed: ' + trait_info['pubmed_text'] + '</a><br>' + trait_info['description'])
+ } else {
+ $('#cofactor2_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ $('#cofactor2_description').text("[" + trait_info['name'] + " on " + trait_info['location'] + " Mb]\n" + trait_info['description'])
+ }
+ } else {
+ $('#cofactor2_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ $('#cofactor2_description').text("[" + trait_info['name'] + " on " + trait_info['location'] + " Mb]\n")
+ }
+ $('#select_cofactor2').text("Change Cofactor 2");
+ $('#cofactor2_info_container').css("display", "inline");
+ $('#cofactor3_button').css("display", "inline-block");
+ } else {
+ $('#cofactor3_trait_link').attr("href", trait_info['url'])
+ if (trait_info['type'] == "ProbeSet"){
+ $('#cofactor3_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['tissue'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ $('#cofactor3_description').text("[" + trait_info['symbol'] + " on " + trait_info['location'] + " Mb]\n" + trait_info['description'])
+ } else if (trait_info['type'] == "Publish") {
+ $('#cofactor3_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ if ('pubmed_link' in trait_info) {
+ $('#cofactor3_description').html('<a href=\"' + trait_info['pubmed_link'] + '\">PubMed: ' + trait_info['pubmed_text'] + '</a><br>' + trait_info['description'])
+ } else {
+ $('#cofactor3_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ $('#cofactor3_description').text("[" + trait_info['name'] + " on " + trait_info['location'] + " Mb]\n" + trait_info['description'])
+ }
+ } else {
+ $('#cofactor3_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ $('#cofactor3_description').text("[" + trait_info['name'] + " on " + trait_info['location'] + " Mb]\n")
+ }
+ $('#select_cofactor3').text("Change Cofactor 3");
+ $('#cofactor3_info_container').css("display", "inline");
+ }
+}
+
+get_trait_data = function(trait_data, textStatus, jqXHR) {
+ var sample, samples, this_trait_vals, trait_sample_data, vals, _i, _len;
+ trait_sample_data = trait_data[1];
+ if ( $('input[name=allsamples]').length ) {
+ samples = $('input[name=allsamples]').val().split(" ");
+ } else {
+ samples = js_data.indIDs
+ }
+ sample_vals = [];
+ vals = [];
+ for (_i = 0, _len = samples.length; _i < _len; _i++) {
+ sample = samples[_i];
+ if (sample in trait_sample_data) {
+ sample_vals.push(sample + ":" + parseFloat(trait_sample_data[sample]))
+ vals.push(parseFloat(trait_sample_data[sample]))
+ } else {
+ sample_vals.push(null)
+ vals.push(null)
+ }
+ }
+ if ( $('input[name=allsamples]').length ) {
+ if ($('input[name=samples]').length < 1) {
+ $('#hidden_inputs').append('<input type="hidden" name="samples" value="[' + samples.toString() + ']" />');
+ }
+ $('#hidden_inputs').append('<input type="hidden" name="vals" value="[' + vals.toString() + ']" />');
+ this_trait_vals = get_this_trait_vals(samples);
+ return color_by_trait(trait_sample_data);
+ } else{
+ sorted = vals.slice().sort(function(a,b){return a-b})
+ ranks = vals.slice().map(function(v){ return sorted.indexOf(v)+1 });
+ sample_ranks = []
+ for (_i = 0; _i < samples.length; _i++){
+ if (samples[_i] in trait_sample_data){
+ sample_ranks.push(samples[_i] + ":" + ranks[_i])
+ } else {
+ sample_ranks.push(null)
+ }
+ }
+
+ if ($('input[name=selecting_which_cofactor]').val() == "1"){
+ if ($('#cofactor1_type option:selected').val() == "symbol") {
+ unique_vals = [...new Set(vals)]
+ if (unique_vals.length > 45) {
+ alert("If displaying cofactor as symbol, please choose a trait with 45 or fewer distinct sample values.");
+ return false;
+ }
+ }
+ $('input[name=cofactor1_vals]').val(sample_vals)
+ $('input[name=ranked_cofactor1_vals]').val(sample_ranks)
+ } else if ($('input[name=selecting_which_cofactor]').val() == "2"){
+ if ($('#cofactor2_type option:selected').val() == "symbol") {
+ unique_vals = [...new Set(vals)]
+ if (unique_vals.length > 45) {
+ alert("If displaying cofactor as symbol, please choose a trait with 45 or fewer distinct sample values.");
+ return false;
+ }
+ }
+ $('input[name=cofactor2_vals]').val(sample_vals)
+ $('input[name=ranked_cofactor2_vals]').val(sample_ranks)
+ } else{
+ if ($('#cofactor3_type option:selected').val() == "symbol") {
+ unique_vals = [...new Set(vals)]
+ if (unique_vals.length > 45) {
+ alert("If displaying cofactor as symbol, please choose a trait with 45 or fewer distinct sample values.");
+ return false;
+ }
+ }
+ $('input[name=cofactor3_vals]').val(sample_vals)
+ $('input[name=ranked_cofactor3_vals]').val(sample_ranks)
+ }
+ populate_cofactor_info(trait_data[0])
+ chartupdatedata();
+ return false
+ }
+};
+
+get_this_trait_vals = function(samples) {
+ var sample, this_trait_vals, this_val, this_vals_json, _i, _len;
+ this_trait_vals = [];
+ for (_i = 0, _len = samples.length; _i < _len; _i++) {
+ sample = samples[_i];
+ this_val = parseFloat($("input[name='value:" + sample + "']").val());
+ if (!isNaN(this_val)) {
+ this_trait_vals.push(this_val);
+ } else {
+ this_trait_vals.push(null);
+ }
+ }
+ this_vals_json = '[' + this_trait_vals.toString() + ']';
+ return this_trait_vals;
+};
+
+assemble_into_json = function(this_trait_vals) {
+ var json_data, json_ids, num_traits, samples;
+ num_traits = $('input[name=vals]').length;
+ samples = $('input[name=samples]').val();
+ json_ids = samples;
+ json_data = '[' + this_trait_vals;
+ $('input[name=vals]').each((function(_this) {
+ return function(index, element) {
+ return json_data += ',' + $(element).val();
+ };
+ })(this));
+ json_data += ']';
+ return [json_ids, json_data];
+};
+
+color_by_trait = function(trait_sample_data, textStatus, jqXHR) {
+ return root.bar_chart.color_by_trait(trait_sample_data);
+};
+
+process_traits = function(trait_data, textStatus, jqXHR) {
+ var the_html, trait, _i, _len;
+ the_html = "<button id='back_to_collections' class='btn btn-inverse btn-small'>";
+ the_html += "<i class='icon-white icon-arrow-left'></i> Back </button>";
+ the_html += " <button id='submit_cofactors' class='btn btn-primary btn-small submit'> Submit </button>";
+ the_html += "<table id='collection_table' style='padding-top: 10px;' class='table table-hover'>";
+ the_html += "<thead><tr><th></th><th>Record</th><th>Data Set</th><th>Description</th></tr></thead>";
+ the_html += "<tbody>";
+ for (_i = 0, _len = trait_data.length; _i < _len; _i++) {
+ trait = trait_data[_i];
+ the_html += "<tr class='trait_line'>";
+ the_html += "<td class='select_trait'><input type='checkbox' name='selectCheck' class='checkbox edit_sample_checkbox'></td>";
+ if ("abbreviation" in trait) {
+ the_html += "<td class='trait' data-display_name='" + trait.name + " - " + trait.abbreviation + "'>" + trait.name + "</td>";
+ } else if ("symbol" in trait) {
+ the_html += "<td class='trait' data-display_name='" + trait.name + " - " + trait.symbol + "'>" + trait.name + "</td>";
+ } else {
+ the_html += "<td class='trait' data-display_name='" + trait.name + "'>" + trait.name + "</td>";
+ }
+ the_html += "<td class='dataset' data-dataset='" + trait.dataset + "'>" + trait.dataset_name + "</td>";
+ the_html += "<td class='description'>" + trait.description + "</td>";
+ }
+ the_html += "</tbody>";
+ the_html += "</table>";
+ the_html += "<script type='text/javascript' src='/static/new/javascript/get_traits_from_collection.js'></script>"
+ $("#collections_holder").html(the_html);
+ return $('#collections_holder').colorbox.resize();
+};
+
+back_to_collections = function() {
+ $("#collections_holder").html(collection_list);
+ $(document).on("click", ".collection_line", collection_click);
+ return $('#collections_holder').colorbox.resize();
+};
+
+$(".collection_line").on("click", collection_click);
+$("#submit_cofactors").on("click", submit_click);
+if ($('#scatterplot2').length){
+ $(".trait_line").on("click", trait_row_click);
+} else {
+ $(".trait").on("click", trait_click);
+}
+$("#back_to_collections").on("click", back_to_collections);
diff --git a/gn2/wqflask/static/new/javascript/group_manager.js b/gn2/wqflask/static/new/javascript/group_manager.js
new file mode 100644
index 00000000..cd56133a
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/group_manager.js
@@ -0,0 +1,37 @@
+$('#add_to_admins').click(function() {
+ add_emails('admin')
+})
+
+$('#add_to_members').click(function() {
+ add_emails('member')
+})
+
+$('#clear_admins').click(function(){
+ clear_emails('admin')
+})
+
+$('#clear_members').click(function(){
+ clear_emails('member')
+})
+
+
+function add_emails(user_type){
+ let email_address = $('input[name=user_email]').val();
+ let email_list_string = $('input[name=' + user_type + '_emails_to_add]').val().trim()
+ if (email_list_string == ""){
+ let email_set = new Set();
+ } else {
+ let email_set = new Set(email_list_string.split(","))
+ }
+ email_set.add(email_address)
+
+ $('input[name=' + user_type + '_emails_to_add]').val(Array.from(email_set).join(','))
+
+ let emails_display_string = Array.from(email_set).join('\n')
+ $('.added_' + user_type + 's').val(emails_display_string)
+}
+
+function clear_emails(user_type){
+ $('input[name=' + user_type + '_emails_to_add]').val("")
+ $('.added_' + user_type + 's').val("")
+}
diff --git a/gn2/wqflask/static/new/javascript/histogram.js b/gn2/wqflask/static/new/javascript/histogram.js
new file mode 100644
index 00000000..f71080e8
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/histogram.js
@@ -0,0 +1,134 @@
+// Generated by CoffeeScript 1.9.2
+(function() {
+ var Histogram, root;
+
+ root = typeof exports !== "undefined" && exports !== null ? exports : this;
+
+ Histogram = (function() {
+ function Histogram(sample_list1, sample_group) {
+ this.sample_list = sample_list1;
+ this.sample_group = sample_group;
+ this.sort_by = "name";
+ this.format_count = d3.format(",.0f");
+ this.margin = {
+ top: 10,
+ right: 30,
+ bottom: 30,
+ left: 30
+ };
+ this.plot_width = 960 - this.margin.left - this.margin.right;
+ this.plot_height = 500 - this.margin.top - this.margin.bottom;
+ this.x_buffer = this.plot_width / 20;
+ this.y_buffer = this.plot_height / 20;
+ this.plot_height -= this.y_buffer;
+ this.get_sample_vals(this.sample_list);
+ this.redraw(this.sample_vals);
+ }
+
+ Histogram.prototype.redraw = function(sample_vals) {
+ this.sample_vals = sample_vals;
+ this.y_min = d3.min(this.sample_vals);
+ this.y_max = d3.max(this.sample_vals) * 1.1;
+ this.create_x_scale();
+ this.get_histogram_data();
+ this.create_y_scale();
+ $("#histogram").empty();
+ this.svg = this.create_svg();
+ return this.create_graph();
+ };
+
+ Histogram.prototype.get_sample_vals = function(sample_list) {
+ var sample;
+ return this.sample_vals = (function() {
+ var i, len, results;
+ results = [];
+ for (i = 0, len = sample_list.length; i < len; i++) {
+ sample = sample_list[i];
+ if (sample.value !== null) {
+ results.push(sample.value);
+ }
+ }
+ return results;
+ })();
+ };
+
+ Histogram.prototype.create_svg = function() {
+ var svg;
+ svg = d3.select("#histogram").append("svg").attr("class", "histogram").attr("width", this.plot_width + this.margin.left + this.margin.right).attr("height", this.plot_height + this.margin.top + this.margin.bottom).append("g").attr("transform", "translate(" + this.margin.left + "," + this.margin.top + ")");
+ return svg;
+ };
+
+ Histogram.prototype.create_x_scale = function() {
+ var x0;
+ console.log("min/max:", d3.min(this.sample_vals) + "," + d3.max(this.sample_vals));
+ x0 = Math.max(-d3.min(this.sample_vals), d3.max(this.sample_vals));
+ return this.x_scale = d3.scale.linear().domain([d3.min(this.sample_vals), d3.max(this.sample_vals)]).range([0, this.plot_width]).nice();
+ };
+
+ Histogram.prototype.get_histogram_data = function() {
+ var n_bins;
+ console.log("sample_vals:", this.sample_vals);
+ n_bins = 2*Math.sqrt(this.sample_vals.length); //Was originally just the square root, but increased to 2*; ideally would be a GUI for changing this
+ this.histogram_data = d3.layout.histogram().bins(this.x_scale.ticks(n_bins))(this.sample_vals);
+ return console.log("histogram_data:", this.histogram_data[0]);
+ };
+
+ Histogram.prototype.create_y_scale = function() {
+ return this.y_scale = d3.scale.linear().domain([
+ 0, d3.max(this.histogram_data, (function(_this) {
+ return function(d) {
+ return d.y;
+ };
+ })(this))
+ ]).range([this.plot_height, 0]);
+ };
+
+ Histogram.prototype.create_graph = function() {
+ this.add_x_axis();
+ this.add_y_axis();
+ return this.add_bars();
+ };
+
+ Histogram.prototype.add_x_axis = function() {
+ var x_axis;
+ x_axis = d3.svg.axis().scale(this.x_scale).orient("bottom");
+ return this.svg.append("g").attr("class", "x axis").attr("transform", "translate(0," + this.plot_height + ")").call(x_axis);
+ };
+
+ Histogram.prototype.add_y_axis = function() {
+ var yAxis;
+ yAxis = d3.svg.axis().scale(this.y_scale).orient("left").ticks(5);
+ return this.svg.append("g").attr("class", "y axis").call(yAxis).append("text").attr("transform", "rotate(-90)").attr("y", 6).attr("dy", ".71em").style("text-anchor", "end");
+ };
+
+ Histogram.prototype.add_bars = function() {
+ var bar, rect_width;
+ bar = this.svg.selectAll(".bar").data(this.histogram_data).enter().append("g").attr("class", "bar").attr("transform", (function(_this) {
+ return function(d) {
+ return "translate(" + _this.x_scale(d.x) + "," + _this.y_scale(d.y) + ")";
+ };
+ })(this));
+ rect_width = this.x_scale(this.histogram_data[0].x + this.histogram_data[0].dx) - this.x_scale(this.histogram_data[0].x);
+ bar.append("rect").attr("x", 1).attr("width", rect_width - 1).attr("height", (function(_this) {
+ return function(d) {
+ return _this.plot_height - _this.y_scale(d.y);
+ };
+ })(this));
+ return bar.append("text").attr("dy", ".75em").attr("y", 6).attr("x", rect_width / 2).attr("text-anchor", "middle").style("fill", "#fff").text((function(_this) {
+ return function(d) {
+ var bar_height;
+ bar_height = _this.plot_height - _this.y_scale(d.y);
+ if (bar_height > 20) {
+ return _this.format_count(d.y);
+ }
+ };
+ })(this));
+ };
+
+ return Histogram;
+
+ })();
+
+ root.Histogram = Histogram;
+
+}).call(this);
diff --git a/gn2/wqflask/static/new/javascript/init_genome_browser.js b/gn2/wqflask/static/new/javascript/init_genome_browser.js
new file mode 100644
index 00000000..508f5bf2
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/init_genome_browser.js
@@ -0,0 +1,82 @@
+snps_filename = "/browser_input?filename=" + js_data.browser_files[0]
+annot_filename = "/browser_input?filename=" + js_data.browser_files[1]
+
+localUrls =
+{
+ snps: snps_filename,
+ annotations: annot_filename
+};
+
+var coordinateSystem = js_data.chr_lengths
+
+var vscaleWidth = 90.0;
+var legendWidth = 150.0;
+
+if ('significant' in js_data) {
+ var significant_score = parseFloat(js_data.significant)
+} else {
+ var significant_score = js_data.max_score * 0.75
+}
+var score = { min: 0.0, max: js_data.max_score, sig: significant_score };
+var gwasPadding = { top: 35.0,
+ bottom: 35.0,
+ left: vscaleWidth,
+ right: legendWidth };
+var gwasHeight = 500.0;
+var config =
+{ score: score,
+ urls: localUrls,
+ tracks: {
+ gwas: {
+ trackHeight: gwasHeight,
+ padding: gwasPadding,
+ snps: {
+ radius: 3.75,
+ lineWidth: 1.0,
+ color: { outline: "#FFFFFF",
+ fill: "#00008B" },
+ pixelOffset: {x: 0.0, y: 0.0}
+ },
+ annotations: {
+ urls: {
+ url: "GeneNetwork"
+ },
+ radius: 5.5,
+ outline: "#000000",
+ snpColor: "#0074D9",
+ geneColor: "#FF4136"
+ },
+ score: score,
+ legend: {
+ fontSize: 14,
+ hPad: 0.1,
+ vPad: 0.2
+ },
+ vscale: {
+ color: "#000000",
+ hPad: 0.125,
+ numSteps: 3,
+ fonts: { labelSize: 18, scaleSize: 16 }
+ },
+ },
+ },
+ chrs: {
+ chrBG1: "#FFFFFF",
+ chrBG2: "#EEEEEE",
+ chrLabels: { fontSize: 16 },
+ },
+ // initialChrs: { left: "1", right: "5" }
+ coordinateSystem: coordinateSystem,
+};
+
+if (js_data.selected_chr != -1) {
+ config['initialChrs'] = {left: js_data.selected_chr, right: js_data.selected_chr}
+}
+
+$('#browser_tab').click(function() {
+ if ($('#gwas').length == 0){
+ GenomeBrowser.main(config)();
+ }
+});
+
+document.getElementById("controls").style.visibility = "visible"; \ No newline at end of file
diff --git a/gn2/wqflask/static/new/javascript/initialize_show_trait_tables.js b/gn2/wqflask/static/new/javascript/initialize_show_trait_tables.js
new file mode 100644
index 00000000..44076c17
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/initialize_show_trait_tables.js
@@ -0,0 +1,246 @@
+// This file initializes the tables for the show_trait page
+
+// This variable is just created to get the column position of the first case attribute (if case attributes exist), since it's needed to set the row classes in createdRow for the DataTable
+var attributeStartPos = 3;
+if (js_data.se_exists) {
+ attributeStartPos += 2;
+}
+if (js_data.has_num_cases === true) {
+ attributeStartPos += 1;
+}
+
+buildColumns = function() {
+ let columnList = [
+ {
+ 'data': null,
+ 'orderDataType': "dom-checkbox",
+ 'searchable' : false,
+ 'targets': 0,
+ 'width': "25px",
+ 'render': function() {
+ return '<input type="checkbox" name="searchResult" class="checkbox edit_sample_checkbox" value="">'
+ }
+ },
+ {
+ 'title': "ID",
+ 'type': "natural",
+ 'searchable' : false,
+ 'targets': 1,
+ 'width': "35px",
+ 'data': "this_id"
+ },
+ {
+ 'title': "Sample",
+ 'type': "natural",
+ 'data': null,
+ 'targets': 2,
+ 'width': "60px",
+ 'render': function(data) {
+ return '<span class="edit_sample_sample_name">' + data.name + '</span>'
+ }
+ },
+ {
+ 'title': "<div style='text-align: right;'>Value</div>",
+ 'orderDataType': "dom-input",
+ 'type': "cust-txt",
+ 'data': null,
+ 'targets': 3,
+ 'width': "60px",
+ 'render': function(data) {
+ 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=' + js_data.max_digits[0] + '>'
+ } else {
+ if (js_data.no_decimal_place == false) {
+ 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] + '>'
+ } else {
+ return '<input type="text" data-value="' + data.value + '" 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 + '" size=' + js_data.max_digits[0] + '>'
+ }
+ }
+ }
+ }
+ ];
+
+ attrStart = 4
+ if (js_data.se_exists) {
+ attrStart += 2
+ columnList.push(
+ {
+ 'bSortable': false,
+ 'type': "natural",
+ 'data': null,
+ 'targets': 4,
+ 'searchable' : false,
+ 'width': "25px",
+ 'render': function() {
+ return '±'
+ }
+ },
+ {
+ 'title': "<div style='text-align: right;'>SE</div>",
+ 'orderDataType': "dom-input",
+ 'type': "cust-txt",
+ 'data': null,
+ 'targets': 5,
+ 'width': "60px",
+ 'render': function(data) {
+ 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>'
+ } 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>'
+ }
+ }
+ }
+ );
+
+ if (js_data.has_num_cases === true) {
+ attrStart += 1
+ columnList.push(
+ {
+ 'title': "<div style='text-align: right;'>N</div>",
+ 'orderDataType': "dom-input",
+ 'type': "cust-txt",
+ 'data': null,
+ 'targets': 6,
+ 'width': "60px",
+ 'render': function(data) {
+ if (data.num_cases == null || data.num_cases == undefined) {
+ return '<input type="text" data-value="x" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" class="trait_value_input edit_sample_num_cases" value="x" size=4 maxlength=4>'
+ } else {
+ return '<input type="text" data-value="' + data.num_cases + '" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" class="trait_value_input edit_sample_num_cases" value="' + data.num_cases + '" size=4 maxlength=4>'
+ }
+ }
+ }
+ );
+ }
+ }
+ else {
+ if (js_data.has_num_cases === true) {
+ attrStart += 1
+ columnList.push(
+ {
+ 'title': "<div style='text-align: right;'>N</div>",
+ 'orderDataType': "dom-input",
+ 'type': "cust-txt",
+ 'data': null,
+ 'targets': 4,
+ 'width': "60px",
+ 'render': function(data) {
+ if (data.num_cases == null || data.num_cases == undefined) {
+ return '<input type="text" data-value="x" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" class="trait_value_input edit_sample_num_cases" value="x" size=4 maxlength=4>'
+ } else {
+ return '<input type="text" data-value="' + data.num_cases + '" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" class="trait_value_input edit_sample_num_cases" value="' + data.num_cases + '" size=4 maxlength=4>'
+ }
+ }
+ }
+ );
+ }
+ }
+
+ attrKeys = Object.keys(js_data.attributes).sort((a, b) => (js_data.attributes[a].id > js_data.attributes[b].id) ? 1 : -1)
+ for (i = 0; i < attrKeys.length; i++){
+ columnList.push(
+ {
+ 'title': "<div title='" + js_data.attributes[attrKeys[i]].description + "' style='text-align: " + js_data.attributes[attrKeys[i]].alignment + "'>" + js_data.attributes[attrKeys[i]].name + "</div>",
+ 'type': "natural",
+ 'data': null,
+ 'targets': attrStart + i,
+ 'render': function(data, type, row, meta) {
+ attr_name = Object.keys(data.extra_attributes).sort((a, b) => (parseInt(a) > parseInt(b)) ? 1 : -1)[meta.col - data.first_attr_col]
+
+ if (attr_name != null && attr_name != undefined){
+ if (Array.isArray(data.extra_attributes[attr_name])){
+ return '<a href="' + data.extra_attributes[attr_name][1] + '">' + data.extra_attributes[attr_name][0] + '</a>'
+ } else {
+ return data.extra_attributes[attr_name]
+ }
+ } else {
+ return ""
+ }
+ }
+ }
+ )
+ }
+ return columnList
+}
+
+columnDefs = buildColumns();
+
+tableIds = ["samples_primary"]
+if (js_data.sample_lists.length > 1) {
+ tableIds.push("samples_other")
+}
+
+for (var i = 0; i < tableIds.length; i++) {
+ tableId = tableIds[i]
+
+ if (tableId == "samples_primary"){
+ tableType = "Primary"
+ } else {
+ tableType = "Other"
+ }
+
+ tableSettings = {
+ "drawCallback": function( settings ) {
+ $('#' + tableId + ' tr').off().on("click", function(event) {
+ if (event.target.type !== 'checkbox' && event.target.tagName.toLowerCase() !== 'a') {
+ var obj =$(this).find('input');
+ obj.prop('checked', !obj.is(':checked'));
+ }
+ if ($(this).hasClass("selected") && event.target.tagName.toLowerCase() !== 'a'){
+ $(this).removeClass("selected")
+ } else if (event.target.tagName.toLowerCase() !== 'a') {
+ $(this).addClass("selected")
+ }
+ });
+ },
+ 'createdRow': function ( row, data, index ) {
+ $(row).attr('id', tableType + "_" + data.this_id)
+ $(row).addClass("value_se");
+ if (data.outlier) {
+ $(row).addClass("outlier");
+ $(row).attr("style", "background-color: orange;");
+ }
+ $('td', row).eq(1).addClass("column_name-Index")
+ $('td', row).eq(2).addClass("column_name-Sample")
+ $('td', row).eq(3).addClass("column_name-Value")
+ if (js_data.se_exists) {
+ $('td', row).eq(5).addClass("column_name-SE")
+ if (js_data.has_num_cases === true) {
+ $('td', row).eq(6).addClass("column_name-num_cases")
+ } else {
+ if (js_data.has_num_cases === true) {
+ $('td', row).eq(4).addClass("column_name-num_cases")
+ }
+ }
+ } else {
+ if (js_data.has_num_cases === true) {
+ $('td', row).eq(4).addClass("column_name-num_cases")
+ }
+ }
+
+ for (j=0; j < attrKeys.length; j++) {
+ $('td', row).eq(attributeStartPos + j + 1).addClass("column_name-" + js_data.attributes[attrKeys[j]].name)
+ $('td', row).eq(attributeStartPos + j + 1).attr("style", "text-align: " + js_data.attributes[attrKeys[j]].alignment + "; padding-top: 2px; padding-bottom: 0px;")
+ }
+ }
+ }
+
+ create_table(tableId, js_data['sample_lists'][i], columnDefs, tableSettings);
+
+ // Enable mapping compute buttons and replace their text only after table has loaded
+ // This is because submitting the form prior to the table loading causes an error
+ $('button.submit_special').html('<span class="glyphicon glyphicon-play-circle"></span> Compute');
+ $('button.submit_special').prop('disabled', false);
+}
+
+primary_table = $('#samples_primary').DataTable();
+$('#primary_searchbox').on( 'keyup', function () {
+ primary_table.search($(this).val()).draw();
+} );
+
+if ($('#samples_other').length) {
+ other_table = $('#samples_other').DataTable();
+ $('#other_searchbox').on( 'keyup', function () {
+ other_table.search($(this).val()).draw();
+ } );
+}
diff --git a/gn2/wqflask/static/new/javascript/iplotMScanone_noeff.js b/gn2/wqflask/static/new/javascript/iplotMScanone_noeff.js
new file mode 100644
index 00000000..5ecf46e1
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/iplotMScanone_noeff.js
@@ -0,0 +1,114 @@
+// Generated by CoffeeScript 1.8.0
+var iplotMScanone_noeff, lod_data;
+
+iplotMScanone_noeff = function(lod_data, times, chartOpts) {
+ var axispos, chartdivid, chrGap, colors, darkrect, extra_digits, g_heatmap, g_lodchart, hbot, htop, i, lightrect, linecolor, linewidth, lod4curves, lod_labels, lod_ylab, lodchart_curves, lodcolumn, lodcurve, margin, mylodchart, mylodheatmap, nullcolor, nxticks, plotLodCurve, pos, svg, titlepos, totalh, totalw, wleft, wright, x, xticks, y, zlim, zthresh, _ref, _ref1, _ref10, _ref11, _ref12, _ref13, _ref14, _ref15, _ref16, _ref17, _ref18, _ref19, _ref2, _ref20, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9;
+ wleft = (_ref = chartOpts != null ? chartOpts.wleft : void 0) != null ? _ref : 1000;
+ wright = (_ref1 = chartOpts != null ? chartOpts.wright : void 0) != null ? _ref1 : 500;
+ htop = (_ref2 = chartOpts != null ? chartOpts.htop : void 0) != null ? _ref2 : 350;
+ hbot = (_ref3 = chartOpts != null ? chartOpts.hbot : void 0) != null ? _ref3 : 350;
+ margin = (_ref4 = chartOpts != null ? chartOpts.margin : void 0) != null ? _ref4 : {
+ left: 100,
+ top: 40,
+ right: 40,
+ bottom: 40,
+ inner: 5
+ };
+ axispos = (_ref5 = chartOpts != null ? chartOpts.axispos : void 0) != null ? _ref5 : {
+ xtitle: 25,
+ ytitle: 30,
+ xlabel: 5,
+ ylabel: 5
+ };
+ titlepos = (_ref6 = chartOpts != null ? chartOpts.titlepos : void 0) != null ? _ref6 : 20;
+ chrGap = (_ref7 = chartOpts != null ? chartOpts.chrGap : void 0) != null ? _ref7 : 8;
+ darkrect = (_ref8 = chartOpts != null ? chartOpts.darkrect : void 0) != null ? _ref8 : "#C8C8C8";
+ lightrect = (_ref9 = chartOpts != null ? chartOpts.lightrect : void 0) != null ? _ref9 : "#E6E6E6";
+ nullcolor = (_ref10 = chartOpts != null ? chartOpts.nullcolor : void 0) != null ? _ref10 : "#E6E6E6";
+ colors = (_ref11 = chartOpts != null ? chartOpts.colors : void 0) != null ? _ref11 : ["slateblue", "white", "crimson"];
+ zlim = (_ref12 = chartOpts != null ? chartOpts.zlim : void 0) != null ? _ref12 : null;
+ zthresh = (_ref13 = chartOpts != null ? chartOpts.zthresh : void 0) != null ? _ref13 : null;
+ lod_ylab = (_ref14 = chartOpts != null ? chartOpts.lod_ylab : void 0) != null ? _ref14 : "";
+ linecolor = (_ref15 = chartOpts != null ? chartOpts.linecolor : void 0) != null ? _ref15 : "darkslateblue";
+ linewidth = (_ref16 = chartOpts != null ? chartOpts.linewidth : void 0) != null ? _ref16 : 2;
+ nxticks = (_ref17 = chartOpts != null ? chartOpts.nxticks : void 0) != null ? _ref17 : 5;
+ xticks = (_ref18 = chartOpts != null ? chartOpts.xticks : void 0) != null ? _ref18 : null;
+ lod_labels = (_ref19 = chartOpts != null ? chartOpts.lod_labels : void 0) != null ? _ref19 : null;
+ chartdivid = (_ref20 = chartOpts != null ? chartOpts.chartdivid : void 0) != null ? _ref20 : 'chart';
+ totalh = htop + hbot + 2 * (margin.top + margin.bottom);
+ totalw = wleft + wright + 2 * (margin.left + margin.right);
+ if (lod_labels == null) {
+ lod_labels = times != null ? (function() {
+ var _i, _len, _results;
+ _results = [];
+ for (_i = 0, _len = times.length; _i < _len; _i++) {
+ x = times[_i];
+ _results.push(formatAxis(times, extra_digits = 1)(x));
+ }
+ return _results;
+ })() : lod_data.lodnames;
+ }
+ mylodheatmap = lodheatmap().height(htop).width(wleft).margin(margin).axispos(axispos);
+ svg = d3.select("div#" + chartdivid).append("svg").attr("height", totalh).attr("width", totalw);
+ g_heatmap = svg.append("g").attr("id", "heatmap").datum(lod_data).call(mylodheatmap);
+ mylodchart = lodchart().height(hbot).width(wleft).margin(margin).axispos(axispos).titlepos(titlepos).chrGap(chrGap).linecolor("none").pad4heatmap(true).darkrect(darkrect).lightrect(lightrect).ylim([0, d3.max(mylodheatmap.zlim())]).pointsAtMarkers(false);
+ g_lodchart = svg.append("g").attr("transform", "translate(0," + (htop + margin.top + margin.bottom) + ")").attr("id", "lodchart").datum(lod_data).call(mylodchart);
+ lodcurve = function(chr, lodcolumn) {
+ return d3.svg.line().x(function(d) {
+ return mylodchart.xscale()[chr](d);
+ }).y(function(d, i) {
+ return mylodchart.yscale()(Math.abs(lod_data.lodByChr[chr][i][lodcolumn]));
+ });
+ };
+ lodchart_curves = null;
+ plotLodCurve = function(lodcolumn) {
+ var chr, _i, _len, _ref21, _results;
+ g_lodchart.selectAll("g#curves").remove();
+ lodchart_curves = g_lodchart.append("g").attr("id", "lodcurves");
+ _ref21 = lod_data.chrnames;
+ _results = [];
+ for (_i = 0, _len = _ref21.length; _i < _len; _i++) {
+ chr = _ref21[_i];
+ _results.push(lodchart_curves.append("path").datum(lod_data.posByChr[chr[0]]).attr("d", lodcurve(chr[0], lodcolumn)).attr("stroke", linecolor).attr("fill", "none").attr("stroke-width", linewidth).style("pointer-events", "none"));
+ }
+ return _results;
+ };
+ lod4curves = {
+ data: []
+ };
+ for (pos in lod_data.pos) {
+ y = (function() {
+ var _i, _len, _ref21, _results;
+ _ref21 = lod_data.lodnames;
+ _results = [];
+ for (_i = 0, _len = _ref21.length; _i < _len; _i++) {
+ lodcolumn = _ref21[_i];
+ _results.push(Math.abs(lod_data[lodcolumn][pos]));
+ }
+ return _results;
+ })();
+ x = (function() {
+ var _results;
+ _results = [];
+ for (i in lod_data.lodnames) {
+ _results.push(+i);
+ }
+ return _results;
+ })();
+ lod4curves.data.push({
+ x: x,
+ y: y
+ });
+ }
+ return mylodheatmap.cellSelect().on("mouseover", function(d) {
+ var p;
+ plotLodCurve(d.lodindex);
+ g_lodchart.select("g.title text").text("" + lod_labels[d.lodindex]);
+ return p = d3.format(".1f")(d.pos);
+ }).on("mouseout", function(d) {
+ lodchart_curves.remove();
+ return g_lodchart.select("g.title text").text("");
+ });
+};
+
+iplotMScanone_noeff(lod_data = js_data.json_data);
diff --git a/gn2/wqflask/static/new/javascript/loadings_plot.js b/gn2/wqflask/static/new/javascript/loadings_plot.js
new file mode 100644
index 00000000..c44288c0
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/loadings_plot.js
@@ -0,0 +1,109 @@
+var margin = {top: 20, right: 70, bottom: 60, left: 60}
+ , width = 960 - margin.left - margin.right
+ , height = 500 - margin.top - margin.bottom;
+
+var x = d3.scale.linear()
+ .domain([d3.min(loadings, function(d) { return d[0]; }) + 0.1*d3.min(loadings, function(d) { return d[0]; }), d3.max(loadings, function(d) { return d[0]; })])
+ .range([ 0, width ]);
+
+var y = d3.scale.linear()
+ .domain([d3.min(loadings, function(d) { return d[1]; }) + 0.1*d3.min(loadings, function(d) { return d[1]; }), d3.max(loadings, function(d) { return d[1]; })])
+ .range([ height, 0 ]);
+
+var chart = d3.select('#loadings_plot')
+ .append('svg:svg')
+ .attr('width', width + margin.right + margin.left)
+ .attr('height', height + margin.top + margin.bottom)
+ .attr('class', 'chart')
+
+var main = chart.append('g')
+ .attr('transform', 'translate(' + margin.left + ',' + margin.top + ')')
+ .attr('width', width)
+ .attr('height', height)
+ .attr('class', 'main')
+
+// draw the x axis
+var xAxis = d3.svg.axis()
+ .scale(x)
+ .orient('bottom');
+
+main.append('g')
+ .attr('transform', 'translate(0,' + height + ')')
+ .attr('class', 'x axis')
+ .call(xAxis);
+
+chart.append("text")
+ .attr("class", "x label")
+ .attr("text-anchor", "end")
+ .attr("x", 550)
+ .attr("y", 480)
+ .style("font-size", 14)
+ .style("fill", "blue")
+ .text("Factor (1)");
+
+chart.append("text")
+ .attr("class", "y label")
+ .attr("text-anchor", "end")
+ .attr("x", -200)
+ .attr("y", 5)
+ .attr("dy", ".75em")
+ .attr("transform", "rotate(-90)")
+ .style("font-size", 14)
+ .style("fill", "blue")
+ .text("Factor (2)");
+
+// draw the y axis
+var yAxis = d3.svg.axis()
+ .scale(y)
+ .orient('left');
+
+main.append('g')
+ .attr('transform', 'translate(0,0)')
+ .attr('class', 'y axis')
+ .call(yAxis);
+
+chart.select('.x.axis')
+ .selectAll("text")
+ .style("font-size","14px");
+
+chart.select('.y.axis')
+ .selectAll("text")
+ .style("font-size","14px");
+
+var g = main.append("svg:g");
+
+g.selectAll("scatter-dots")
+ .data(loadings)
+ .enter().append("svg:circle")
+ .attr("cx", function (d,i) { return x(d[0]); } )
+ .attr("cy", function (d) { return y(d[1]); } )
+ .attr("r", 4)
+ .style("fill", "blue");
+
+traits_and_loadings = []
+for (i = 0; i < js_data.traits.length; i++) {
+ this_trait_loadings = []
+ this_trait_loadings[0] = js_data.traits[i]
+ this_trait_loadings[1] = [loadings[i][0], loadings[i][1]]
+ traits_and_loadings[i] = this_trait_loadings
+}
+
+g.selectAll("scatter-dots")
+ .data(traits_and_loadings)
+ .enter().append("text")
+ .attr("x", function(d, i) { return x(d[1][0]); })
+ .attr("y", function(d) { return y(d[1][1]); })
+ .text(function(d) { return d[0]; })
+ .style("font-size", 12)
+ .style("fill", "blue");
+
+g.selectAll("scatter-lines")
+ .data(loadings)
+ .enter().append("svg:line")
+ .attr("x1", x(0))
+ .attr("y1", y(0))
+ .attr("x2", function (d,i) {return x(d[0]); } )
+ .attr("y2", function (d) { return y(d[1]); } )
+ .attr("stroke-width", 1)
+ .attr("stroke", "red");
+ \ No newline at end of file
diff --git a/gn2/wqflask/static/new/javascript/lod_chart.js b/gn2/wqflask/static/new/javascript/lod_chart.js
new file mode 100644
index 00000000..014bf59b
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/lod_chart.js
@@ -0,0 +1,473 @@
+// Generated by CoffeeScript 1.9.2
+var lodchart;
+
+lodchart = function() {
+ var additive, additive_ylab, additive_ylim, additive_yscale, additive_yticks, additivelinecolor, axispos, chart, chrGap, chrSelect, darkrect, height, lightrect, linewidth, lodcurve, lodlinecolor, lodvarname, manhattanPlot, mappingScale, margin, markerSelect, nyticks, pad4heatmap, pointcolor, pointsAtMarkers, pointsize, pointstroke, rotate_ylab, significantcolor, suggestivecolor, title, titlepos, width, xlab, xscale, ylab, ylim, yscale, yticks;
+ width = 800;
+ height = 500;
+ margin = {
+ left: 60,
+ top: 40,
+ right: 40,
+ bottom: 40,
+ inner: 5
+ };
+ axispos = {
+ xtitle: 25,
+ ytitle: 30,
+ xlabel: 5,
+ ylabel: 5
+ };
+ titlepos = 20;
+ manhattanPlot = false;
+ ylim = null;
+ additive_ylim = null;
+ nyticks = 5;
+ yticks = null;
+ additive_yticks = null;
+ chrGap = 8;
+ darkrect = "#F1F1F9";
+ lightrect = "#FBFBFF";
+ lodlinecolor = "darkslateblue";
+ additivelinecolor_plus = "red";
+ additivelinecolor_negative = "green";
+ linewidth = 2;
+ suggestivecolor = "gainsboro";
+ significantcolor = "#EBC7C7";
+ pointcolor = "#E9CFEC";
+ pointsize = 0;
+ pointstroke = "black";
+ title = "";
+ xlab = "Chromosome";
+ ylab = "LRS score";
+ additive_ylab = "Additive Effect";
+ rotate_ylab = null;
+ yscale = d3.scale.linear();
+ additive_yscale = d3.scale.linear();
+ xscale = null;
+ pad4heatmap = false;
+ lodcurve = null;
+ lodvarname = null;
+ markerSelect = null;
+ chrSelect = null;
+ pointsAtMarkers = true;
+ chart = function(selection) {
+ return selection.each(function(data) {
+ var additive_yaxis, additivecurve, chr, curves, g, gEnter, hiddenpoints, j, k, len, len1, lodvarnum, markerpoints, markertip, redraw_plot, ref, ref1, rotate_additive_ylab, suggestive_bar, svg, titlegrp, x, xaxis, yaxis;
+ if (manhattanPlot === true) {
+ pointcolor = "darkslateblue";
+ pointsize = 2;
+ }
+ lodvarname = lodvarname != null ? lodvarname : data.lodnames[0];
+ data[lodvarname] = (function() {
+ var j, len, ref, results;
+ ref = data[lodvarname];
+ results = [];
+ for (j = 0, len = ref.length; j < len; j++) {
+ x = ref[j];
+ results.push(Math.abs(x));
+ }
+ return results;
+ })();
+ ylim = ylim != null ? ylim : [0, d3.max(data[lodvarname])];
+
+ if ('additive' in data) {
+ data['additive'] = (function() {
+ var j, len, ref, results;
+ ref = data['additive'];
+ results = [];
+ for (j = 0, len = ref.length; j < len; j++) {
+ x = ref[j];
+ results.push(x);
+ }
+ return results;
+ })();
+ additive_ylim = additive_ylim != null ? additive_ylim : [0, d3.max(data['additive'])];
+ }
+ lodvarnum = data.lodnames.indexOf(lodvarname);
+ svg = d3.select(this).selectAll("svg").data([data]);
+ gEnter = svg.enter().append("svg").append("g");
+ svg.attr("width", width + margin.left + margin.right).attr("height", height + margin.top + margin.bottom);
+ g = svg.select("g");
+ g.append("rect").attr("x", margin.left).attr("y", margin.top).attr("height", height).attr("width", width).attr("fill", darkrect).attr("stroke", "none");
+ yscale.domain(ylim).range([height + margin.top, margin.top + margin.inner]);
+ yticks = yticks != null ? yticks : yscale.ticks(nyticks);
+ if ('additive' in data) {
+ additive_yscale.domain(additive_ylim).range([height + margin.top, margin.top + margin.inner + height / 2]);
+ additive_yticks = additive_yticks != null ? additive_yticks : additive_yscale.ticks(nyticks);
+ }
+ reorgLodData(data, lodvarname);
+ data = chrscales(data, width, chrGap, margin.left, pad4heatmap, mappingScale);
+ xscale = data.xscale;
+ chrSelect = g.append("g").attr("class", "chrRect").selectAll("empty").data(data.chrnames).enter().append("rect").attr("id", function(d) {
+ return "chrrect" + d[0];
+ }).attr("x", function(d, i) {
+ if (i === 0 && pad4heatmap) {
+ return data.chrStart[i];
+ }
+ return data.chrStart[i] - chrGap / 2;
+ }).attr("width", function(d, i) {
+ if ((i === 0 || i + 1 === data.chrnames.length) && pad4heatmap) {
+ return data.chrEnd[i] - data.chrStart[i] + chrGap / 2;
+ }
+ return data.chrEnd[i] - data.chrStart[i] + chrGap;
+ }).attr("y", margin.top).attr("height", height).attr("fill", function(d, i) {
+ if (i % 2) {
+ return darkrect;
+ }
+ return lightrect;
+ }).attr("stroke", "none").on("click", function(d) {
+ console.log("d is:", d);
+ return redraw_plot(d);
+ });
+ xaxis = g.append("g").attr("class", "x axis");
+ xaxis.selectAll("empty").data(data.chrnames).enter().append("text").text(function(d) {
+ return d[0];
+ }).attr("x", function(d, i) {
+ return (data.chrStart[i] + data.chrEnd[i]) / 2;
+ }).attr("y", margin.top + height + axispos.xlabel).attr("dominant-baseline", "hanging").attr("text-anchor", "middle").attr("cursor", "pointer").on("click", function(d) {
+ return redraw_plot(d);
+ });
+ xaxis.append("text").attr("class", "title").attr("y", margin.top + height + axispos.xtitle).attr("x", margin.left + width / 2).attr("fill", "slateblue").text(xlab);
+ redraw_plot = function(chr_ob) {
+ var chr_plot;
+ $('#topchart').remove();
+ $('#chart_container').append('<div class="qtlcharts" id="topchart"></div>');
+ return chr_plot = new Chr_Lod_Chart(600, 1200, chr_ob, manhattanPlot, mappingScale);
+ };
+ rotate_ylab = rotate_ylab != null ? rotate_ylab : ylab.length > 1;
+ yaxis = g.append("g").attr("class", "y axis");
+ yaxis.selectAll("empty").data(yticks).enter().append("line").attr("y1", function(d) {
+ return yscale(d);
+ }).attr("y2", function(d) {
+ return yscale(d);
+ }).attr("x1", margin.left).attr("x2", margin.left + 7).attr("fill", "none").attr("stroke", "white").attr("stroke-width", 1).style("pointer-events", "none");
+ yaxis.selectAll("empty").data(yticks).enter().append("text").attr("y", function(d) {
+ return yscale(d);
+ }).attr("x", margin.left - axispos.ylabel).attr("fill", "blue").attr("dominant-baseline", "middle").attr("text-anchor", "end").text(function(d) {
+ return formatAxis(yticks)(d);
+ });
+ yaxis.append("text").attr("class", "title").attr("y", margin.top + height / 2).attr("x", margin.left - axispos.ytitle).text(ylab).attr("transform", rotate_ylab ? "rotate(270," + (margin.left - axispos.ytitle) + "," + (margin.top + height / 2) + ")" : "").attr("text-anchor", "middle").attr("fill", "slateblue");
+ if ('additive' in data) {
+ rotate_additive_ylab = rotate_additive_ylab != null ? rotate_additive_ylab : additive_ylab.length > 1;
+ additive_yaxis = g.append("g").attr("class", "y axis");
+ additive_yaxis.selectAll("empty").data(additive_yticks).enter().append("line").attr("y1", function(d) {
+ return additive_yscale(d);
+ }).attr("y2", function(d) {
+ return additive_yscale(d);
+ }).attr("x1", margin.left + width).attr("x2", margin.left + width - 7).attr("fill", "none").attr("stroke", "white").attr("stroke-width", 1).style("pointer-events", "none");
+ additive_yaxis.selectAll("empty").data(additive_yticks).enter().append("text").attr("y", function(d) {
+ return additive_yscale(d);
+ }).attr("x", function(d) {
+ return margin.left + width + axispos.ylabel + 20;
+ }).attr("fill", "green").attr("dominant-baseline", "middle").attr("text-anchor", "end").text(function(d) {
+ return formatAxis(additive_yticks)(d);
+ });
+ additive_yaxis.append("text").attr("class", "title").attr("y", margin.top + 1.5 * height).attr("x", margin.left + width + axispos.ytitle).text(additive_ylab).attr("transform", rotate_additive_ylab ? "rotate(270," + (margin.left + width + axispos.ytitle) + ", " + (margin.top + height * 1.5) + ")" : "").attr("text-anchor", "middle").attr("fill", "green");
+ }
+ if ('suggestive' in data) {
+ suggestive_bar = g.append("g").attr("class", "suggestive");
+ suggestive_bar.selectAll("empty").data([data.suggestive]).enter().append("line").attr("y1", function(d) {
+ return yscale(d);
+ }).attr("y2", function(d) {
+ return yscale(d);
+ }).attr("x1", margin.left).attr("x2", margin.left + width).attr("fill", "none").attr("stroke", suggestivecolor).attr("stroke-width", 5).style("pointer-events", "none");
+ suggestive_bar = g.append("g").attr("class", "significant");
+ suggestive_bar.selectAll("empty").data([data.significant]).enter().append("line").attr("y1", function(d) {
+ return yscale(d);
+ }).attr("y2", function(d) {
+ return yscale(d);
+ }).attr("x1", margin.left).attr("x2", margin.left + width).attr("fill", "none").attr("stroke", significantcolor).attr("stroke-width", 5).style("pointer-events", "none");
+ }
+ if (manhattanPlot === false) {
+ lodcurve = function(chr, lodcolumn) {
+ return d3.svg.line().x(function(d) {
+ return xscale[chr](d);
+ }).y(function(d, i) {
+ return yscale(data.lodByChr[chr][i][lodcolumn]);
+ });
+ };
+ if ('additive' in data) {
+ additivecurve = function(chr, lodcolumn) {
+ if (data.additiveByChr[chr][0] < 0) {
+ pos_neg = "negative"
+ }
+ else {
+ pos_neg = "positive"
+ }
+ return [pos_neg, d3.svg.line().x(function(d) {
+ return xscale[chr](d);
+ }).y(function(d, i) {
+ return additive_yscale(Math.abs(data.additiveByChr[chr][i]));
+ })];
+ };
+ }
+ curves = g.append("g").attr("id", "curves");
+ ref = data.chrnames;
+ for (j = 0, len = ref.length; j < len; j++) {
+ chr = ref[j];
+ if (chr.indexOf(data['chr'])) {
+ curves.append("path").datum(data.posByChr[chr[0]]).attr("d", lodcurve(chr[0], lodvarnum)).attr("stroke", lodlinecolor).attr("fill", "none").attr("stroke-width", linewidth).style("pointer-events", "none");
+ }
+ }
+ if ('additive' in data) {
+ ref1 = data.chrnames;
+ for (k = 0, len1 = ref1.length; k < len1; k++) {
+ chr = ref1[k];
+ if (chr.indexOf(data['chr'])) {
+ if (additivecurve(chr[0], lodvarnum)[0] == "negative") {
+ curves.append("path").datum(data.posByChr[chr[0]]).attr("d", additivecurve(chr[0], lodvarnum)[1]).attr("stroke", additivelinecolor_negative).attr("fill", "none").attr("stroke-width", 1).style("pointer-events", "none");
+ }
+ else {
+ curves.append("path").datum(data.posByChr[chr[0]]).attr("d", additivecurve(chr[0], lodvarnum)[1]).attr("stroke", additivelinecolor_plus).attr("fill", "none").attr("stroke-width", 1).style("pointer-events", "none");
+ }
+ }
+ }
+ }
+ }
+ console.log("before pointsize");
+ if (pointsize > 0) {
+ console.log("pointsize > 0 !!!");
+ }
+ markerpoints = g.append("g").attr("id", "markerpoints_visible");
+ markerpoints.selectAll("empty").data(data.markers).enter().append("circle").attr("cx", function(d) {
+ return xscale[d.chr](d.pos);
+ }).attr("cy", function(d) {
+ return yscale(d.lod);
+ }).attr("r", pointsize).attr("fill", pointcolor).attr("stroke", pointstroke).attr("pointer-events", "hidden");
+ titlegrp = g.append("g").attr("class", "title").append("text").attr("x", margin.left + width / 2).attr("y", margin.top - titlepos).text(title);
+ g.append("rect").attr("x", margin.left).attr("y", margin.top).attr("height", height).attr("width", function() {
+ if (pad4heatmap) {
+ return data.chrEnd.slice(-1)[0] - margin.left;
+ }
+ return data.chrEnd.slice(-1)[0] - margin.left + chrGap / 2;
+ }).attr("fill", "none").attr("stroke", "black").attr("stroke-width", "none");
+ if (pointsAtMarkers) {
+ hiddenpoints = g.append("g").attr("id", "markerpoints_hidden");
+ markertip = d3.tip().attr('class', 'd3-tip').html(function(d) {
+ return [d.name, " LRS = " + (d3.format('.2f')(d.lod))];
+ }).direction("e").offset([0, 10]);
+ svg.call(markertip);
+ return markerSelect = hiddenpoints.selectAll("empty").data(data.markers).enter().append("circle").attr("cx", function(d) {
+ return xscale[d.chr](d.pos);
+ }).attr("cy", function(d) {
+ return yscale(d.lod);
+ }).attr("id", function(d) {
+ return d.name;
+ }).attr("r", d3.max([pointsize * 2, 3])).attr("opacity", 0).attr("fill", pointcolor).attr("stroke", pointstroke).attr("stroke-width", "1").on("mouseover.paneltip", function(d) {
+ d3.select(this).attr("opacity", 1);
+ return markertip.show(d);
+ }).on("mouseout.paneltip", function() {
+ return d3.select(this).attr("opacity", 0).call(markertip.hide);
+ });
+ }
+ });
+ };
+ chart.width = function(value) {
+ if (!arguments.length) {
+ return width;
+ }
+ width = value;
+ return chart;
+ };
+ chart.height = function(value) {
+ if (!arguments.length) {
+ return height;
+ }
+ height = value;
+ return chart;
+ };
+ chart.margin = function(value) {
+ if (!arguments.length) {
+ return margin;
+ }
+ margin = value;
+ return chart;
+ };
+ chart.titlepos = function(value) {
+ if (!arguments.length) {
+ return titlepos;
+ }
+ titlepos;
+ return chart;
+ };
+ chart.axispos = function(value) {
+ if (!arguments.length) {
+ return axispos;
+ }
+ axispos = value;
+ return chart;
+ };
+ chart.manhattanPlot = function(value) {
+ if (!arguments.length) {
+ return manhattanPlot;
+ }
+ manhattanPlot = value;
+ return chart;
+ };
+ chart.mappingScale = function(value) {
+ if (!arguments.length) {
+ return mappingScale;
+ }
+ mappingScale = value;
+ return chart;
+ };
+ chart.ylim = function(value) {
+ if (!arguments.length) {
+ return ylim;
+ }
+ ylim = value;
+ return chart;
+ };
+ chart.additive_ylim = function(value) {
+ if (!arguments.length) {
+ return additive_ylim;
+ }
+ additive_ylim = value;
+ return chart;
+ };
+ chart.nyticks = function(value) {
+ if (!arguments.length) {
+ return nyticks;
+ }
+ nyticks = value;
+ return chart;
+ };
+ chart.yticks = function(value) {
+ if (!arguments.length) {
+ return yticks;
+ }
+ yticks = value;
+ return chart;
+ };
+ chart.chrGap = function(value) {
+ if (!arguments.length) {
+ return chrGap;
+ }
+ chrGap = value;
+ return chart;
+ };
+ chart.darkrect = function(value) {
+ if (!arguments.length) {
+ return darkrect;
+ }
+ darkrect = value;
+ return chart;
+ };
+ chart.lightrect = function(value) {
+ if (!arguments.length) {
+ return lightrect;
+ }
+ lightrect = value;
+ return chart;
+ };
+ chart.linecolor = function(value) {
+ var linecolor;
+ if (!arguments.length) {
+ return linecolor;
+ }
+ linecolor = value;
+ return chart;
+ };
+ chart.linewidth = function(value) {
+ if (!arguments.length) {
+ return linewidth;
+ }
+ linewidth = value;
+ return chart;
+ };
+ chart.pointcolor = function(value) {
+ if (!arguments.length) {
+ return pointcolor;
+ }
+ pointcolor = value;
+ return chart;
+ };
+ chart.pointsize = function(value) {
+ if (!arguments.length) {
+ return pointsize;
+ }
+ pointsize = value;
+ return chart;
+ };
+ chart.pointstroke = function(value) {
+ if (!arguments.length) {
+ return pointstroke;
+ }
+ pointstroke = value;
+ return chart;
+ };
+ chart.title = function(value) {
+ if (!arguments.length) {
+ return title;
+ }
+ title = value;
+ return chart;
+ };
+ chart.xlab = function(value) {
+ if (!arguments.length) {
+ return xlab;
+ }
+ xlab = value;
+ return chart;
+ };
+ chart.ylab = function(value) {
+ if (!arguments.length) {
+ return ylab;
+ }
+ ylab = value;
+ return chart;
+ };
+ chart.rotate_ylab = function(value) {
+ if (!arguments.length) {
+ return rotate_ylab;
+ }
+ rotate_ylab = value;
+ return chart;
+ };
+ chart.lodvarname = function(value) {
+ if (!arguments.length) {
+ return lodvarname;
+ }
+ lodvarname = value;
+ return chart;
+ };
+ chart.pad4heatmap = function(value) {
+ if (!arguments.length) {
+ return pad4heatmap;
+ }
+ pad4heatmap = value;
+ return chart;
+ };
+ chart.pointsAtMarkers = function(value) {
+ if (!arguments.length) {
+ return pointsAtMarkers;
+ }
+ pointsAtMarkers = value;
+ return chart;
+ };
+ chart.yscale = function() {
+ return yscale;
+ };
+ chart.additive_yscale = function() {
+ return additive_yscale;
+ };
+ chart.xscale = function() {
+ return xscale;
+ };
+ if (manhattanPlot === false) {
+ chart.lodcurve = function() {
+ return lodcurve;
+ };
+ }
+ chart.additivecurve = function() {
+ return additivecurve;
+ };
+ chart.markerSelect = function() {
+ return markerSelect;
+ };
+ chart.chrSelect = function() {
+ return chrSelect;
+ };
+ return chart;
+}; \ No newline at end of file
diff --git a/gn2/wqflask/static/new/javascript/lodheatmap.js b/gn2/wqflask/static/new/javascript/lodheatmap.js
new file mode 100644
index 00000000..b82c95ad
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/lodheatmap.js
@@ -0,0 +1,277 @@
+// Generated by CoffeeScript 1.8.0
+var lodheatmap;
+
+lodheatmap = function() {
+ var axispos, cellSelect, chart, chrGap, colors, height, margin, rectcolor, rotate_ylab, title, titlepos, width, xlab, xscale, ylab, yscale, zlim, zscale, zthresh;
+ width = 1200;
+ height = 600;
+ margin = {
+ left: 100,
+ top: 40,
+ right: 40,
+ bottom: 40
+ };
+ axispos = {
+ xtitle: 25,
+ ytitle: 30,
+ xlabel: 5,
+ ylabel: 5
+ };
+ chrGap = 8;
+ titlepos = 20;
+ rectcolor = d3.rgb(230, 230, 230);
+ colors = ["slateblue", "white", "red"];
+ title = "";
+ xlab = "Chromosome";
+ ylab = "";
+ rotate_ylab = null;
+ zlim = null;
+ zthresh = null;
+ xscale = d3.scale.linear();
+ yscale = d3.scale.linear();
+ zscale = d3.scale.linear();
+ cellSelect = null;
+ chart = function(selection) {
+ return selection.each(function(data) {
+ var cells, celltip, chr, chr_ob, extent, g, gEnter, i, j, lod, lodcol, nlod, pos, rectHeight, svg, titlegrp, xLR, xaxis, yaxis, zmax, zmin, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m, _ref, _ref1, _ref2, _ref3, _ref4;
+ data = reorgLodData(data);
+ data = chrscales(data, width, chrGap, margin.left, true);
+ xscale = data.xscale;
+ nlod = data.lodnames.length;
+ yscale.domain([-0.5, nlod - 0.5]).range([margin.top + height, margin.top]);
+ rectHeight = yscale(0) - yscale(1);
+ xLR = {};
+ _ref = data.chrnames;
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ chr = _ref[_i];
+ if (data.posByChr[chr[0]].length > 0){
+ xLR[chr[0]] = getLeftRight(data.posByChr[chr[0]]);
+ }
+ }
+ zmin = 0;
+ zmax = 0;
+ _ref1 = data.lodnames;
+ for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
+ lodcol = _ref1[_j];
+ extent = d3.extent(data[lodcol]);
+ if (extent[0] < zmin) {
+ zmin = extent[0];
+ }
+ if (extent[1] > zmax) {
+ zmax = extent[1];
+ }
+ }
+ if (-zmin > zmax) {
+ zmax = -zmin;
+ }
+ zlim = zlim != null ? zlim : [-zmax, 0, zmax];
+ if (zlim.length !== colors.length) {
+ console.log("zlim.length (" + zlim.length + ") != colors.length (" + colors.length + ")");
+ }
+ zscale.domain(zlim).range(colors);
+ zthresh = zthresh != null ? zthresh : zmin - 1;
+ data.cells = [];
+ _ref2 = data.chrnames;
+ for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
+ chr_ob = _ref2[_k];
+ chr = chr_ob[0];
+ _ref3 = data.posByChr[chr];
+ for (i = _l = 0, _len3 = _ref3.length; _l < _len3; i = ++_l) {
+ pos = _ref3[i];
+ _ref4 = data.lodByChr[chr][i];
+ for (j = _m = 0, _len4 = _ref4.length; _m < _len4; j = ++_m) {
+ lod = _ref4[j];
+ if (lod >= zthresh || lod <= -zthresh) {
+ data.cells.push({
+ z: lod,
+ left: (xscale[chr](pos) + xscale[chr](xLR[chr][pos].left)) / 2,
+ right: (xscale[chr](pos) + xscale[chr](xLR[chr][pos].right)) / 2,
+ lodindex: j,
+ chr: chr,
+ pos: pos
+ });
+ }
+ }
+ }
+ }
+ svg = d3.select(this).selectAll("svg").data([data]);
+ gEnter = svg.enter().append("svg").append("g");
+ svg.attr("width", width + margin.left + margin.right).attr("height", height + margin.top + margin.bottom);
+ g = svg.select("g");
+ g.append("g").attr("id", "boxes").selectAll("empty").data(data.chrnames).enter().append("rect").attr("id", function(d) {
+ return "box" + d[0];
+ }).attr("x", function(d, i) {
+ return data.chrStart[i];
+ }).attr("y", function(d) {
+ return margin.top;
+ }).attr("height", height).attr("width", function(d, i) {
+ return data.chrEnd[i] - data.chrStart[i];
+ }).attr("fill", rectcolor).attr("stroke", "none");
+ titlegrp = g.append("g").attr("class", "title").append("text").attr("x", margin.left + width / 2).attr("y", margin.top - titlepos).text(title);
+ xaxis = g.append("g").attr("class", "x axis");
+ xaxis.selectAll("empty").data(data.chrnames).enter().append("text").attr("x", function(d, i) {
+ return (data.chrStart[i] + data.chrEnd[i]) / 2;
+ }).attr("y", margin.top + height + axispos.xlabel).text(function(d) {
+ return d[0];
+ });
+ xaxis.append("text").attr("class", "title").attr("x", margin.left + width / 2).attr("y", margin.top + height + axispos.xtitle).text(xlab);
+ rotate_ylab = rotate_ylab != null ? rotate_ylab : ylab.length > 1;
+ yaxis = g.append("g").attr("class", "y axis");
+ yaxis.append("text").attr("class", "title").attr("y", margin.top + height / 2).attr("x", margin.left - axispos.ytitle).text(ylab).attr("transform", rotate_ylab ? "rotate(270," + (margin.left - axispos.ytitle) + "," + (margin.top + height / 2) + ")" : "");
+ yaxis.selectAll("empty").data(data.lodnames).enter().append("text").attr("id", function(d, i) {
+ return "yaxis" + i;
+ }).attr("y", function(d, i) {
+ return yscale(i);
+ }).attr("x", margin.left - axispos.ylabel).text(function(d) {
+ return d;
+ }).attr("opacity", 0);
+ celltip = d3.tip().attr('class', 'd3-tip').html(function(d) {
+ var p, z;
+ z = d3.format(".2f")(Math.abs(d.z));
+ p = d3.format(".1f")(d.pos);
+ return "" + d.chr + "@" + p + " &rarr; " + z;
+ }).direction('e').offset([0, 10]);
+ svg.call(celltip);
+ cells = g.append("g").attr("id", "cells");
+ cellSelect = cells.selectAll("empty").data(data.cells).enter().append("rect").attr("x", function(d) {
+ return d.left;
+ }).attr("y", function(d) {
+ return yscale(d.lodindex) - rectHeight / 2;
+ }).attr("width", function(d) {
+ return d.right - d.left;
+ }).attr("height", rectHeight).attr("class", function(d, i) {
+ return "cell" + i;
+ }).attr("fill", function(d) {
+ return zscale(d.z);
+ }).attr("stroke", "none").attr("stroke-width", "1").on("mouseover.paneltip", function(d) {
+ yaxis.select("text#yaxis" + d.lodindex).attr("opacity", 1);
+ d3.select(this).attr("stroke", "black");
+ return celltip.show(d, this);
+ }).on("mouseout.paneltip", function(d) {
+ yaxis.select("text#yaxis" + d.lodindex).attr("opacity", 0);
+ d3.select(this).attr("stroke", "none");
+ return celltip.hide();
+ });
+ return g.append("g").attr("id", "boxes").selectAll("empty").data(data.chrnames).enter().append("rect").attr("id", function(d) {
+ return "box" + d;
+ }).attr("x", function(d, i) {
+ return data.chrStart[i];
+ }).attr("y", function(d) {
+ return margin.top;
+ }).attr("height", height).attr("width", function(d, i) {
+ return data.chrEnd[i] - data.chrStart[i];
+ }).attr("fill", "none").attr("stroke", "black").attr("stroke-width", "none");
+ });
+ };
+ chart.width = function(value) {
+ if (!arguments.length) {
+ return width;
+ }
+ width = value;
+ return chart;
+ };
+ chart.height = function(value) {
+ if (!arguments.length) {
+ return height;
+ }
+ height = value;
+ return chart;
+ };
+ chart.margin = function(value) {
+ if (!arguments.length) {
+ return margin;
+ }
+ margin = value;
+ return chart;
+ };
+ chart.axispos = function(value) {
+ if (!arguments.length) {
+ return axispos;
+ }
+ axispos = value;
+ return chart;
+ };
+ chart.titlepos = function(value) {
+ if (!arguments.length) {
+ return titlepos;
+ }
+ titlepos;
+ return chart;
+ };
+ chart.rectcolor = function(value) {
+ if (!arguments.length) {
+ return rectcolor;
+ }
+ rectcolor = value;
+ return chart;
+ };
+ chart.colors = function(value) {
+ if (!arguments.length) {
+ return colors;
+ }
+ colors = value;
+ return chart;
+ };
+ chart.title = function(value) {
+ if (!arguments.length) {
+ return title;
+ }
+ title = value;
+ return chart;
+ };
+ chart.xlab = function(value) {
+ if (!arguments.length) {
+ return xlab;
+ }
+ xlab = value;
+ return chart;
+ };
+ chart.ylab = function(value) {
+ if (!arguments.length) {
+ return ylab;
+ }
+ ylab = value;
+ return chart;
+ };
+ chart.rotate_ylab = function(value) {
+ if (!arguments.length) {
+ return rotate_ylab;
+ }
+ rotate_ylab = value;
+ return chart;
+ };
+ chart.zthresh = function(value) {
+ if (!arguments.length) {
+ return zthresh;
+ }
+ zthresh = value;
+ return chart;
+ };
+ chart.zlim = function(value) {
+ if (!arguments.length) {
+ return zlim;
+ }
+ zlim = value;
+ return chart;
+ };
+ chart.chrGap = function(value) {
+ if (!arguments.length) {
+ return chrGap;
+ }
+ chrGap = value;
+ return chart;
+ };
+ chart.xscale = function() {
+ return xscale;
+ };
+ chart.yscale = function() {
+ return yscale;
+ };
+ chart.zscale = function() {
+ return zscale;
+ };
+ chart.cellSelect = function() {
+ return cellSelect;
+ };
+ return chart;
+};
diff --git a/gn2/wqflask/static/new/javascript/login.js b/gn2/wqflask/static/new/javascript/login.js
new file mode 100644
index 00000000..2fe9ba3c
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/login.js
@@ -0,0 +1,41 @@
+// Generated by CoffeeScript 1.8.0
+$(function() {
+ var form_success, modalize, submit_form;
+ modalize = function(event) {
+ event.preventDefault();
+ console.log("in modal_replace:", $(this).attr("href"));
+ return $.colorbox({
+ open: true,
+ href: this.href,
+ onComplete: function() {
+ return $(".focused").focus();
+ }
+ });
+ };
+ $(document).one("click", ".modalize", modalize);
+ console.log("Modalized click!!!");
+ form_success = function(data) {
+ return $.colorbox({
+ open: true,
+ html: data,
+ onComplete: function() {
+ return $("form").on("submit", submit_form);
+ }
+ });
+ };
+ submit_form = function(event) {
+ var data, submit_to;
+ event.preventDefault();
+ submit_to = $(this).attr('action');
+ data = $(this).serialize();
+ console.log("submit_to is:", submit_to);
+ return $.ajax({
+ type: "POST",
+ url: submit_to,
+ data: data,
+ dataType: "html",
+ success: form_success
+ });
+ };
+ return $("#colorbox form").on("submit", submit_form);
+});
diff --git a/gn2/wqflask/static/new/javascript/network_graph.js b/gn2/wqflask/static/new/javascript/network_graph.js
new file mode 100644
index 00000000..480443ee
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/network_graph.js
@@ -0,0 +1,259 @@
+var default_style = [ // the stylesheet for the graph
+ {
+ selector: 'node',
+ style: {
+ 'background-color': '#666',
+ 'label': 'data(label)',
+ 'font-size': 10
+ }
+ },
+
+ {
+ selector: 'edge',
+ style: {
+ 'width': 'data(width)',
+ 'line-color': 'data(color)',
+ 'target-arrow-color': '#ccc',
+ 'target-arrow-shape': 'triangle',
+ 'font-size': 8
+ }
+ }
+ ]
+
+var default_layout = { name: 'circle',
+ fit: true, // whether to fit the viewport to the graph
+ padding: 30 // the padding on fit
+ //idealEdgeLength: function( edge ){ return edge.data['correlation']*10; },
+ }
+
+window.onload=function() {
+ // id of Cytoscape Web container div
+ //var div_id = "cytoscapeweb";
+
+ var cy = cytoscape({
+ container: $('#cytoscapeweb'), // container to render in
+
+ elements: elements_list,
+
+ style: default_style,
+
+ zoom: 12,
+ layout: default_layout,
+
+ zoomingEnabled: true,
+ userZoomingEnabled: true,
+ panningEnabled: true,
+ userPanningEnabled: true,
+ boxSelectionEnabled: false,
+ selectionType: 'single',
+
+ // rendering options:
+ styleEnabled: true
+ });
+
+ var eles = cy.$() // var containing all elements, so elements can be restored after being removed
+
+ var defaults = {
+ zoomFactor: 0.05, // zoom factor per zoom tick
+ zoomDelay: 45, // how many ms between zoom ticks
+ minZoom: 0.1, // min zoom level
+ maxZoom: 10, // max zoom level
+ fitPadding: 30, // padding when fitting
+ panSpeed: 10, // how many ms in between pan ticks
+ panDistance: 10, // max pan distance per tick
+ panDragAreaSize: 75, // the length of the pan drag box in which the vector for panning is calculated (bigger = finer control of pan speed and direction)
+ panMinPercentSpeed: 0.25, // the slowest speed we can pan by (as a percent of panSpeed)
+ panInactiveArea: 8, // radius of inactive area in pan drag box
+ panIndicatorMinOpacity: 0.5, // min opacity of pan indicator (the draggable nib); scales from this to 1.0
+ zoomOnly: false, // a minimal version of the ui only with zooming (useful on systems with bad mousewheel resolution)
+ fitSelector: undefined, // selector of elements to fit
+ animateOnFit: function(){ // whether to animate on fit
+ return false;
+ },
+ fitAnimationDuration: 1000, // duration of animation on fit
+
+ // icon class names
+ sliderHandleIcon: 'fa fa-minus',
+ zoomInIcon: 'fa fa-plus',
+ zoomOutIcon: 'fa fa-minus',
+ resetIcon: 'fa fa-expand'
+ };
+
+ cy.panzoom( defaults );
+
+ function create_qtips(cy){
+ cy.nodes().qtip({
+ content: function(){
+ qtip_content = ''
+ gn_link = '<b>'+'<a href="' + gn2_url + '/show_trait?trait_id=' + this.data().id.split(":")[0] + '&dataset=' + this.data().id.split(":")[1] + '" >'+this.data().id +'</a>'+'</b><br>'
+ qtip_content += gn_link
+ if (typeof(this.data().geneid) !== 'undefined'){
+ ncbi_link = '<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=gene&cmd=Retrieve&dopt=Graphics&list_uids=' + this.data().geneid + '" >NCBI<a>'+'<br>'
+ qtip_content += ncbi_link
+ }
+ if (typeof(this.data().omim) !== 'undefined'){
+ omim_link = '<a href="http://www.ncbi.nlm.nih.gov/omim/' + this.data().omim + '" >OMIM<a>'+'<br>'
+ qtip_content += omim_link
+ }
+ return qtip_content
+ },
+ position: {
+ my: 'top center',
+ at: 'bottom center'
+ },
+ style: {
+ classes: 'qtip-bootstrap',
+ tip: {
+ width: 16,
+ height: 8
+ }
+ }
+ });
+
+ cy.edges().qtip({
+ content: function(){
+ correlation_line = '<b>Sample r: ' + this.data().correlation + '</b><br>'
+ p_value_line = 'Sample p(r): ' + this.data().p_value + '<br>'
+ overlap_line = 'Overlap: ' + this.data().overlap + '<br>'
+ scatter_plot = '<a href="' + gn2_url + '/corr_scatter_plot?method=pearson&dataset_1=' + this.data().source.split(":")[1] + '&dataset_2=' + this.data().target.split(":")[1] + '&trait_1=' + this.data().source.split(":")[0] + '&trait_2=' + this.data().target.split(":")[0] + '" >View Scatterplot</a>'
+ return correlation_line + p_value_line + overlap_line + scatter_plot
+ },
+ position: {
+ my: 'top center',
+ at: 'bottom center'
+ },
+ style: {
+ classes: 'qtip-bootstrap',
+ tip: {
+ width: 16,
+ height: 8
+ }
+ }
+ });
+ }
+
+ create_qtips(cy)
+
+ $('#neg_slide').change(function() {
+ eles.restore()
+
+ pos_slide_val = $('#pos_slide').val();
+ cy.$("node[max_corr > " + $(this).val() + "][max_corr < " + pos_slide_val + "]").remove();
+ cy.$("edge[correlation > " + $(this).val() + "][correlation < " + pos_slide_val + "]").remove();
+
+ cy.layout({ name: $('select[name=layout_select]').val(),
+ fit: true, // whether to fit the viewport to the graph
+ padding: 25 // the padding on fit
+ }).run();
+
+ });
+ $('#pos_slide').change(function() {
+ eles.restore()
+
+ neg_slide_val = $('#neg_slide').val();
+ cy.$("node[max_corr > " + neg_slide_val +"][max_corr < " + $(this).val() + "]").remove();
+ cy.$("edge[correlation > " + neg_slide_val +"][correlation < " + $(this).val() + "]").remove();
+
+ cy.layout({ name: $('select[name=layout_select]').val(),
+ fit: true, // whether to fit the viewport to the graph
+ padding: 25 // the padding on fit
+ }).run();
+
+ });
+
+ $('#reset_graph').click(function() {
+ eles.restore()
+ $('#pos_slide').val(0)
+ $('#neg_slide').val(0)
+ cy.layout({ name: $('select[name=layout_select]').val(),
+ fit: true, // whether to fit the viewport to the graph
+ padding: 25 // the padding on fit
+ }).run();
+ });
+
+ $('select[name=focus_select]').change(function() {
+ focus_trait = $(this).val()
+
+ eles.restore()
+ cy.$('edge[source != "' + focus_trait + '"][target != "' + focus_trait + '"]').remove()
+
+ cy.layout({ name: $('select[name=layout_select]').val(),
+ fit: true, // whether to fit the viewport to the graph
+ padding: 25 // the padding on fit
+ }).run();
+ });
+
+ $('select[name=layout_select]').change(function() {
+ layout_type = $(this).val()
+ cy.layout({ name: layout_type,
+ fit: true, // whether to fit the viewport to the graph
+ padding: 25 // the padding on fit
+ }).run();
+ });
+
+ $('select[name=font_size]').change(function() {
+ font_size = $(this).val()
+
+ new_style = default_style
+ new_style[0]['style']['font-size'] = parseInt(font_size)
+ cy.style().fromJson(new_style).update()
+ });
+ $('select[name=edge_width]').change(function() {
+ //eles.restore()
+
+ //ZS: This is needed, or else it alters the original object
+ orig_elements = JSON.parse(JSON.stringify(elements_list));
+
+ width_multiplier = $(this).val()
+ updated_elements = []
+ for (i=0; i < orig_elements.length; i++){
+ this_element = orig_elements[i]
+ if ('source' in this_element['data']) {
+ orig_width = this_element['data']['width']
+ this_element['data']['width'] = orig_width * width_multiplier
+ }
+ updated_elements.push(this_element)
+ }
+ cy.remove(eles)
+ cy.add(updated_elements)
+ cy.layout({ name: $('select[name=layout_select]').val(),
+ fit: true, // whether to fit the viewport to the graph
+ padding: 25 // the padding on fit
+ }).run();
+ });
+
+ $('select[name=edge_width]').change(function() {
+ //eles.restore()
+
+ //ZS: This is needed, or else it alters the original object
+ orig_elements = JSON.parse(JSON.stringify(elements_list));
+
+ width_multiplier = $(this).val()
+ updated_elements = []
+ for (i=0; i < orig_elements.length; i++){
+ this_element = orig_elements[i]
+ if ('source' in this_element['data']) {
+ orig_width = this_element['data']['width']
+ this_element['data']['width'] = orig_width * width_multiplier
+ }
+ updated_elements.push(this_element)
+ }
+ cy.remove(eles)
+ cy.add(updated_elements)
+ cy.layout({ name: $('select[name=layout_select]').val(),
+ fit: true, // whether to fit the viewport to the graph
+ padding: 25 // the padding on fit
+ }).run();
+ });
+
+ $("a#image_link").click(function(e) {
+ var pngData = cy.png();
+
+ $(this).attr('href', pngData);
+ $(this).attr('download', 'network_graph.png');
+ });
+
+
+};
+
+
diff --git a/gn2/wqflask/static/new/javascript/panelutil.js b/gn2/wqflask/static/new/javascript/panelutil.js
new file mode 100644
index 00000000..ea55a7cf
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/panelutil.js
@@ -0,0 +1,462 @@
+// Generated by CoffeeScript 1.8.0
+var abs, calc_crosstab, chrscales, colSums, displayError, expand2vector, forceAsArray, formatAxis, getLeftRight, log10, log2, matrixExtent, matrixMax, matrixMaxAbs, matrixMin, maxdiff, median, missing2null, pullVarAsArray, reorgLodData, rowSums, selectGroupColors, sumArray, transpose, unique;
+
+formatAxis = function(d, extra_digits) {
+ var ndig;
+ if (extra_digits == null) {
+ extra_digits = 0;
+ }
+ d = d[1] - d[0];
+ ndig = Math.floor(Math.log(d % 10) / Math.log(10));
+ if (ndig > 0) {
+ ndig = 0;
+ }
+ ndig = Math.abs(ndig) + extra_digits;
+ return d3.format("." + ndig + "f");
+};
+
+unique = function(x) {
+ var output, v, _i, _len, _results;
+ output = {};
+ for (_i = 0, _len = x.length; _i < _len; _i++) {
+ v = x[_i];
+ if (v) {
+ output[v] = v;
+ }
+ }
+ _results = [];
+ for (v in output) {
+ _results.push(output[v]);
+ }
+ return _results;
+};
+
+pullVarAsArray = function(data, variable) {
+ var i, v;
+ v = [];
+ for (i in data) {
+ v = v.concat(data[i][variable]);
+ }
+ return v;
+};
+
+reorgLodData = function(data, lodvarname) {
+ var chr, i, j, lodcolumn, lodval, marker, pos, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2;
+ if (lodvarname == null) {
+ lodvarname = null;
+ }
+ data.posByChr = {};
+ data.lodByChr = {};
+ if ('additive' in data){
+ data.additiveByChr = {};
+ }
+ _ref = data.chrnames;
+ for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
+ chr = _ref[i];
+ data.posByChr[chr[0]] = [];
+ data.lodByChr[chr[0]] = [];
+ if ('additive' in data){
+ data.additiveByChr[chr[0]] = [];
+ }
+ _ref1 = data.pos;
+
+ for (j = _j = 0, _len1 = _ref1.length; _j < _len1; j = ++_j) {
+ pos = _ref1[j];
+ if (data.chr[j].toString() === chr[0]) {
+ data.posByChr[chr[0]].push(pos);
+ if (!Array.isArray(data.lodnames)) {
+ data.lodnames = [data.lodnames];
+ }
+ lodval = (function() {
+ var _k, _len2, _ref2, _results;
+ _ref2 = data.lodnames;
+ _results = [];
+ for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
+ lodcolumn = _ref2[_k];
+ _results.push(data[lodcolumn][j]);
+ }
+ return _results;
+ })();
+ data.lodByChr[chr[0]].push(lodval);
+
+ if ('additive' in data){
+ addval = data['additive'][j]
+ data.additiveByChr[chr[0]].push(addval);
+ }
+
+ }
+ }
+ }
+ if (lodvarname != null) {
+ data.markers = [];
+ _ref2 = data.markernames;
+ for (i = _k = 0, _len2 = _ref2.length; _k < _len2; i = ++_k) {
+ marker = _ref2[i];
+ if (marker !== "") {
+ data.markers.push({
+ name: marker,
+ chr: data.chr[i],
+ pos: data.pos[i],
+ lod: data[lodvarname][i]
+ });
+ }
+ }
+ }
+ return data;
+};
+
+chrscales = function(data, width, chrGap, leftMargin, pad4heatmap, mappingScale) {
+ var L, chr, chrEnd, chrLength, chrStart, cur, d, i, maxd, rng, totalChrLength, w, _i, _j, _len, _len1, _ref, _ref1;
+ chrStart = [];
+ chrEnd = [];
+ chrLength = [];
+ totalChrLength = 0;
+ maxd = 0;
+ _ref = data.chrnames;
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ chr = _ref[_i];
+ d = maxdiff(data.posByChr[chr[0]]);
+ if (d > maxd) {
+ maxd = d;
+ }
+ //rng = d3.extent(data.posByChr[chr[0]]);
+ //chrStart.push(rng[0]);
+ //chrEnd.push(rng[1]);
+ //L = rng[1] - rng[0];
+ chrStart.push(0);
+ chrEnd.push(chr[1]);
+ L = chr[1]
+ chrLength.push(L);
+ totalChrLength += L;
+ }
+ if (pad4heatmap) {
+ data.recwidth = maxd;
+ chrStart = chrStart.map(function(x) {
+ return x - maxd / 2;
+ });
+ chrEnd = chrEnd.map(function(x) {
+ return x + maxd / 2;
+ });
+ chrLength = chrLength.map(function(x) {
+ return x + maxd;
+ });
+ totalChrLength += chrLength.length * maxd;
+ }
+ data.chrStart = [];
+ data.chrEnd = [];
+ cur = leftMargin;
+ if (!pad4heatmap) {
+ cur += chrGap / 2;
+ }
+ data.xscale = {};
+ _ref1 = data.chrnames;
+ for (i = _j = 0, _len1 = _ref1.length; _j < _len1; i = ++_j) {
+ chr = _ref1[i];
+ data.chrStart.push(cur);
+ w = Math.round((width - chrGap * (data.chrnames.length - pad4heatmap)) / totalChrLength * chrLength[i]);
+ data.chrEnd.push(cur + w);
+ cur = data.chrEnd[i] + chrGap;
+
+ if (mappingScale == "morgan") {
+ max_pos = d3.max(data.posByChr[chr[0]])
+ data.xscale[chr[0]] = d3.scale.linear().domain([chrStart[i], max_pos]).range([data.chrStart[i], data.chrEnd[i]]);
+ }
+ else {
+ data.xscale[chr[0]] = d3.scale.linear().domain([chrStart[i], chrEnd[i]]).range([data.chrStart[i], data.chrEnd[i]]);
+ }
+ }
+ return data;
+};
+
+selectGroupColors = function(ngroup, palette) {
+ if (ngroup === 0) {
+ return [];
+ }
+ if (palette === "dark") {
+ if (ngroup === 1) {
+ return ["slateblue"];
+ }
+ if (ngroup === 2) {
+ return ["MediumVioletRed", "slateblue"];
+ }
+ if (ngroup <= 9) {
+ return colorbrewer.Set1[ngroup];
+ }
+ return d3.scale.category20().range().slice(0, ngroup);
+ } else {
+ if (ngroup === 1) {
+ return ["#bebebe"];
+ }
+ if (ngroup === 2) {
+ return ["lightpink", "lightblue"];
+ }
+ if (ngroup <= 9) {
+ return colorbrewer.Pastel1[ngroup];
+ }
+ return ["#8fc7f4", "#fed7f8", "#ffbf8e", "#fffbb8", "#8ce08c", "#d8ffca", "#f68788", "#ffd8d6", "#d4a7fd", "#f5f0f5", "#cc968b", "#f4dcd4", "#f3b7f2", "#f7f6f2", "#bfbfbf", "#f7f7f7", "#fcfd82", "#fbfbcd", "#87feff", "#defaf5"].slice(0, ngroup);
+ }
+};
+
+expand2vector = function(input, n) {
+ var i;
+ if (input == null) {
+ return input;
+ }
+ if (Array.isArray(input) && input.length >= n) {
+ return input;
+ }
+ if (!Array.isArray(input)) {
+ input = [input];
+ }
+ if (input.length === 1 && n > 1) {
+ input = (function() {
+ var _results;
+ _results = [];
+ for (i in d3.range(n)) {
+ _results.push(input[0]);
+ }
+ return _results;
+ })();
+ }
+ return input;
+};
+
+median = function(x) {
+ var n;
+ if (x == null) {
+ return null;
+ }
+ n = x.length;
+ x.sort(function(a, b) {
+ return a - b;
+ });
+ if (n % 2 === 1) {
+ return x[(n - 1) / 2];
+ }
+ return (x[n / 2] + x[(n / 2) - 1]) / 2;
+};
+
+getLeftRight = function(x) {
+ var i, n, result, v, xdif, _i, _j, _k, _len, _ref;
+ n = x.length;
+ x.sort(function(a, b) {
+ return a - b;
+ });
+ xdif = [];
+ result = {};
+ for (_i = 0, _len = x.length; _i < _len; _i++) {
+ v = x[_i];
+ result[v] = {};
+ }
+ for (i = _j = 1; 1 <= n ? _j < n : _j > n; i = 1 <= n ? ++_j : --_j) {
+ xdif.push(x[i] - x[i - 1]);
+ result[x[i]].left = x[i - 1];
+ }
+ for (i = _k = 0, _ref = n - 1; 0 <= _ref ? _k < _ref : _k > _ref; i = 0 <= _ref ? ++_k : --_k) {
+ result[x[i]].right = x[i + 1];
+ }
+ xdif = median(xdif);
+ result.mediandiff = xdif;
+ result[x[0]].left = x[0] - xdif;
+ result[x[n - 1]].right = x[n - 1] + xdif;
+ result.extent = [x[0] - xdif / 2, x[n - 1] + xdif / 2];
+ return result;
+};
+
+maxdiff = function(x) {
+ var d, i, result, _i, _ref;
+ if (x.length < 2) {
+ return null;
+ }
+ result = x[1] - x[0];
+ if (x.length < 3) {
+ return result;
+ }
+ for (i = _i = 2, _ref = x.length; 2 <= _ref ? _i < _ref : _i > _ref; i = 2 <= _ref ? ++_i : --_i) {
+ d = x[i] - x[i - 1];
+ if (d > result) {
+ result = d;
+ }
+ }
+ return result;
+};
+
+matrixMin = function(mat) {
+ var i, j, result;
+ result = mat[0][0];
+ for (i in mat) {
+ for (j in mat[i]) {
+ if (result > mat[i][j]) {
+ result = mat[i][j];
+ }
+ }
+ }
+ return result;
+};
+
+matrixMax = function(mat) {
+ var i, j, result;
+ result = mat[0][0];
+ for (i in mat) {
+ for (j in mat[i]) {
+ if (result < mat[i][j]) {
+ result = mat[i][j];
+ }
+ }
+ }
+ return result;
+};
+
+matrixMaxAbs = function(mat) {
+ var i, j, result;
+ result = Math.abs(mat[0][0]);
+ for (i in mat) {
+ for (j in mat[i]) {
+ if (result < mat[i][j]) {
+ result = Math.abs(mat[i][j]);
+ }
+ }
+ }
+ return result;
+};
+
+matrixExtent = function(mat) {
+ return [matrixMin(mat), matrixMax(mat)];
+};
+
+d3.selection.prototype.moveToFront = function() {
+ return this.each(function() {
+ return this.parentNode.appendChild(this);
+ });
+};
+
+d3.selection.prototype.moveToBack = function() {
+ return this.each(function() {
+ var firstChild;
+ firstChild = this.parentNode.firstchild;
+ if (firstChild) {
+ return this.parentNode.insertBefore(this, firstChild);
+ }
+ });
+};
+
+forceAsArray = function(x) {
+ if (x == null) {
+ return x;
+ }
+ if (Array.isArray(x)) {
+ return x;
+ }
+ return [x];
+};
+
+missing2null = function(vec, missingvalues) {
+ if (missingvalues == null) {
+ missingvalues = ['NA', ''];
+ }
+ return vec.map(function(value) {
+ if (missingvalues.indexOf(value) > -1) {
+ return null;
+ } else {
+ return value;
+ }
+ });
+};
+
+displayError = function(message) {
+ if (d3.select("div.error").empty()) {
+ d3.select("body").insert("div", ":first-child").attr("class", "error");
+ }
+ return d3.select("div.error").append("p").text(message);
+};
+
+sumArray = function(vec) {
+ return vec.reduce(function(a, b) {
+ return a + b;
+ });
+};
+
+calc_crosstab = function(data) {
+ var col, cs, i, ncol, nrow, result, row, rs, _i, _j;
+ nrow = data.ycat.length;
+ ncol = data.xcat.length;
+ result = (function() {
+ var _i, _results;
+ _results = [];
+ for (row = _i = 0; 0 <= nrow ? _i <= nrow : _i >= nrow; row = 0 <= nrow ? ++_i : --_i) {
+ _results.push((function() {
+ var _j, _results1;
+ _results1 = [];
+ for (col = _j = 0; 0 <= ncol ? _j <= ncol : _j >= ncol; col = 0 <= ncol ? ++_j : --_j) {
+ _results1.push(0);
+ }
+ return _results1;
+ })());
+ }
+ return _results;
+ })();
+ for (i in data.x) {
+ result[data.y[i]][data.x[i]] += 1;
+ }
+ rs = rowSums(result);
+ cs = colSums(result);
+ for (i = _i = 0; 0 <= ncol ? _i < ncol : _i > ncol; i = 0 <= ncol ? ++_i : --_i) {
+ result[nrow][i] = cs[i];
+ }
+ for (i = _j = 0; 0 <= nrow ? _j < nrow : _j > nrow; i = 0 <= nrow ? ++_j : --_j) {
+ result[i][ncol] = rs[i];
+ }
+ result[nrow][ncol] = sumArray(rs);
+ return result;
+};
+
+rowSums = function(mat) {
+ var x, _i, _len, _results;
+ _results = [];
+ for (_i = 0, _len = mat.length; _i < _len; _i++) {
+ x = mat[_i];
+ _results.push(sumArray(x));
+ }
+ return _results;
+};
+
+transpose = function(mat) {
+ var i, j, _i, _ref, _results;
+ _results = [];
+ for (j = _i = 0, _ref = mat[0].length; 0 <= _ref ? _i < _ref : _i > _ref; j = 0 <= _ref ? ++_i : --_i) {
+ _results.push((function() {
+ var _j, _ref1, _results1;
+ _results1 = [];
+ for (i = _j = 0, _ref1 = mat.length; 0 <= _ref1 ? _j < _ref1 : _j > _ref1; i = 0 <= _ref1 ? ++_j : --_j) {
+ _results1.push(mat[i][j]);
+ }
+ return _results1;
+ })());
+ }
+ return _results;
+};
+
+colSums = function(mat) {
+ return rowSums(transpose(mat));
+};
+
+log2 = function(x) {
+ if (x == null) {
+ return x;
+ }
+ return Math.log(x) / Math.log(2.0);
+};
+
+log10 = function(x) {
+ if (x == null) {
+ return x;
+ }
+ return Math.log(x) / Math.log(10.0);
+};
+
+abs = function(x) {
+ if (x == null) {
+ return x;
+ }
+ return Math.abs(x);
+}; \ No newline at end of file
diff --git a/gn2/wqflask/static/new/javascript/partial_correlations.js b/gn2/wqflask/static/new/javascript/partial_correlations.js
new file mode 100644
index 00000000..5de1204c
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/partial_correlations.js
@@ -0,0 +1,26 @@
+function selected_traits() {
+ traits = $("#trait_table input:checked").map(function() {
+ return $(this).attr("data-trait-info");
+ }).get();
+ if (traits.length == 0){
+ num_traits = $("#trait_table input").length
+ if (num_traits <= 100){
+ traits = $("#trait_table input").map(function() {
+ return $(this).attr("data-trait-info");
+ }).get();
+ }
+ }
+ return traits
+}
+
+$("#partial-correlations").on("click", function() {
+ // Submit the form to the `partial_correlations` endpoint
+ url = $(this).data("url")
+ traits = selected_traits();
+ $("#trait_list").val(traits.reduce(function(acc, str) {
+ return acc.concat(";;;".concat(str));
+ }));
+ $("input[name=tool_used]").val("Partial Correlation")
+ $("input[name=form_url]").val(url)
+ return submit_special(url)
+})
diff --git a/gn2/wqflask/static/new/javascript/password_strength.js b/gn2/wqflask/static/new/javascript/password_strength.js
new file mode 100644
index 00000000..a8a45f7d
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/password_strength.js
@@ -0,0 +1,57 @@
+// Generated by CoffeeScript 1.8.0
+
+$(function() {
+ var word_score;
+ $("#password").keyup(function() {
+ var crack_time, display, passtext, result, word;
+ passtext = $(this).val();
+ result = zxcvbn(passtext);
+ if (passtext.length < 6) {
+ let error_message = `<strong style="color:red;">the password must have a length greater than six characters</strong>`
+ $("#password_strength").html(error_message);
+ return $("#password_alert").fadeIn();
+ } else {
+ word = word_score(result.score);
+ crack_time = result.crack_times_display.online_throttling_100_per_hour;
+ if (crack_time === "instant") {
+ crack_time = "a second";
+ }
+ display = `This is ${word} password.`
+ $("#password_strength").html(display);
+ return $("#password_alert").fadeIn();
+ }
+ });
+ return word_score = function(num_score) {
+ num_score = parseInt(num_score);
+ console.log("num_score is:", num_score);
+
+ let passwordFeedback = {
+ 0:{
+ color:"#cc1818",
+ feedback:"a weak"
+ },
+
+ 1:{
+ color:"#cc1818",
+ feedback:"a bad"
+ },
+
+ 2:{
+ color:"#f59105",
+ feedback:"a mediocre"
+ },
+
+ 3:{
+ color:"#44ba34",
+ feedback:"a strong"
+ },
+ 4:{
+ color:"green",
+ feedback:"a stronger"
+ }
+ }
+
+ let mappingResult = `<strong style="color:${passwordFeedback[num_score].color};">${passwordFeedback[num_score].feedback}</strong>`
+ return mappingResult;
+ };
+});
diff --git a/gn2/wqflask/static/new/javascript/plotly_probability_plot.js b/gn2/wqflask/static/new/javascript/plotly_probability_plot.js
new file mode 100644
index 00000000..bc1e021b
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/plotly_probability_plot.js
@@ -0,0 +1,308 @@
+// Generated by CoffeeScript 1.9.2
+(function() {
+ var get_z_scores, redraw_prob_plot, root;
+
+ root = typeof exports !== "undefined" && exports !== null ? exports : this;
+
+ get_z_scores = function(n) {
+ var i, j, osm_uniform, ref, x;
+ osm_uniform = new Array(n);
+ osm_uniform[n - 1] = Math.pow(0.5, 1.0 / n);
+ osm_uniform[0] = 1 - osm_uniform[n - 1];
+ for (i = j = 1, ref = n - 2; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {
+ osm_uniform[i] = (i + 1 - 0.3175) / (n + 0.365);
+ }
+ return (function() {
+ var k, len, results;
+ results = [];
+ for (k = 0, len = osm_uniform.length; k < len; k++) {
+ x = osm_uniform[k];
+ results.push(jStat.normal.inv(x, 0, 1));
+ }
+ return results;
+ })();
+ };
+
+ redraw_prob_plot = function(samples, sample_group) {
+ var container, h, margin, totalh, totalw, w;
+ h = 550;
+ w = 600;
+ margin = {
+ left: 60,
+ top: 40,
+ right: 40,
+ bottom: 40,
+ inner: 5
+ };
+ totalh = h + margin.top + margin.bottom;
+ totalw = w + margin.left + margin.right;
+ container = $("#prob_plot_container");
+ container.width(totalw);
+ container.height(totalh);
+ var W, all_samples, chart, data, intercept, make_data, names, pvalue, pvalue_str, slope, sorted_names, sorted_values, sw_result, test_str, x, z_scores;
+ all_samples = samples[sample_group];
+ names = (function() {
+ var j, len, ref, results;
+ ref = _.keys(all_samples);
+ results = [];
+ for (j = 0, len = ref.length; j < len; j++) {
+ x = ref[j];
+ if (all_samples[x] !== null) {
+ results.push(x);
+ }
+ }
+ return results;
+ })();
+ sorted_names = names.sort(function(x, y) {
+ return all_samples[x].value - all_samples[y].value;
+ });
+ max_decimals = 0
+ sorted_values = (function() {
+ var j, len, results;
+ results = [];
+ for (j = 0, len = sorted_names.length; j < len; j++) {
+ x = sorted_names[j];
+ results.push(all_samples[x].value);
+ if (all_samples[x].value.countDecimals() > max_decimals) {
+ max_decimals = all_samples[x].value.countDecimals()-1
+ }
+ }
+ return results;
+ })();
+ //ZS: 0.1 indicates buffer, increase to increase buffer
+ y_domain = [sorted_values[0] - (sorted_values.slice(-1)[0] - sorted_values[0])*0.1, sorted_values.slice(-1)[0] + (sorted_values.slice(-1)[0] - sorted_values[0])*0.1]
+ //sw_result = ShapiroWilkW(sorted_values);
+ //W = sw_result.w.toFixed(3);
+ //pvalue = sw_result.p.toFixed(3);
+ //pvalue_str = pvalue > 0.05 ? pvalue.toString() : "<span style='color:red'>" + pvalue + "</span>";
+ //test_str = "Shapiro-Wilk test statistic is " + W + " (p = " + pvalue_str + ")";
+ z_scores = get_z_scores(sorted_values.length);
+ //ZS: 0.1 indicates buffer, increase to increase buffer
+ x_domain = [z_scores[0] - (z_scores.slice(-1)[0] - z_scores[0])*0.1, z_scores.slice(-1)[0] + (z_scores.slice(-1)[0] - z_scores[0])*0.1]
+ slope = jStat.stdev(sorted_values);
+ intercept = jStat.mean(sorted_values);
+ make_data = function(group_name) {
+ var sample, value, z_score;
+ return {
+ key: js_data.sample_group_types[group_name],
+ slope: slope,
+ intercept: intercept,
+ values: (function() {
+ var j, len, ref, ref1, results;
+ ref = _.zip(get_z_scores(sorted_values.length), sorted_values, sorted_names);
+ results = [];
+ for (j = 0, len = ref.length; j < len; j++) {
+ ref1 = ref[j], z_score = ref1[0], value = ref1[1], sample = ref1[2];
+ if (sample in samples[group_name]) {
+ results.push({
+ x: z_score,
+ y: value,
+ name: sample
+ });
+ }
+ }
+ return results;
+ })()
+ };
+ };
+ data = [make_data('samples_primary'), make_data('samples_other'), make_data('samples_all')];
+ x_values = {}
+ y_values = {}
+ point_names = {}
+ for (i = 0; i < 3; i++){
+ these_x_values = []
+ these_y_values = []
+ these_names = []
+ for (j = 0; j < data[i].values.length; j++){
+ these_x_values.push(data[i].values[j].x)
+ these_y_values.push(data[i].values[j].y)
+ these_names.push(data[i].values[j].name)
+ }
+ if (i == 0){
+ x_values['samples_primary'] = these_x_values
+ y_values['samples_primary'] = these_y_values
+ point_names['samples_primary'] = these_names
+ } else if (i == 1) {
+ x_values['samples_other'] = these_x_values
+ y_values['samples_other'] = these_y_values
+ point_names['samples_other'] = these_names
+ } else {
+ x_values['samples_all'] = these_x_values
+ y_values['samples_all'] = these_y_values
+ point_names['samples_all'] = these_names
+ }
+ }
+
+ intercept_line = {}
+
+ if (sample_group == "samples_primary"){
+ first_x = Math.floor(x_values['samples_primary'][0])
+ first_x = first_x - first_x*0.1
+ last_x = Math.ceil(x_values['samples_primary'][x_values['samples_primary'].length - 1])
+ last_x = last_x + last_x*0.1
+ first_value = data[0].intercept + data[0].slope * first_x
+ last_value = data[0].intercept + data[0].slope * last_x
+ intercept_line['samples_primary'] = [[first_x, last_x], [first_value, last_value]]
+ } else if (sample_group == "samples_other") {
+ first_x = Math.floor(x_values['samples_other'][0])
+ first_x = first_x - first_x*0.1
+ last_x = Math.ceil(x_values['samples_other'][x_values['samples_other'].length - 1])
+ last_x = last_x + last_x*0.1
+ first_value = data[1].intercept + data[1].slope * first_x
+ last_value = data[1].intercept + data[1].slope * last_x
+ intercept_line['samples_other'] = [[first_x, last_x], [first_value, last_value]]
+ } else {
+ first_x = Math.floor(x_values['samples_all'][0])
+ first_x = first_x - first_x*0.1
+ last_x = Math.ceil(x_values['samples_all'][x_values['samples_all'].length - 1])
+ first_value = data[2].intercept + data[2].slope * first_x
+ last_x = last_x + last_x*0.1
+ last_value = data[2].intercept + data[2].slope * last_x
+ intercept_line['samples_all'] = [[first_x, last_x], [first_value, last_value]]
+ }
+
+ val_range = Math.max(...y_values['samples_all']) - Math.min(...y_values['samples_all'])
+ if (val_range < 4){
+ tick_digits = '.1f'
+ } else if (val_range < 0.4) {
+ tick_digits = '.2f'
+ } else {
+ tick_digits = 'f'
+ }
+
+ var layout = {
+ title: {
+ x: 0,
+ y: 10,
+ xanchor: 'left',
+ text: "<b>Trait " + js_data.trait_id + ": " + js_data.short_description + "</b>",
+ },
+ margin: {
+ l: 100,
+ r: 30,
+ t: 100,
+ b: 60
+ },
+ legend: {
+ x: 0.05,
+ y: 0.9,
+ xanchor: 'left'
+ },
+ xaxis: {
+ title: "<b>normal quantiles</b>",
+ range: [first_x, last_x],
+ zeroline: false,
+ visible: true,
+ linecolor: 'black',
+ linewidth: 1,
+ titlefont: {
+ family: "arial",
+ size: 16
+ },
+ ticklen: 4,
+ tickfont: {
+ size: 16
+ }
+ },
+ yaxis: {
+ zeroline: false,
+ visible: true,
+ linecolor: 'black',
+ linewidth: 1,
+ title: "<b>" + js_data.unit_type + "</b>",
+ titlefont: {
+ family: "arial",
+ size: 16
+ },
+ ticklen: 4,
+ tickfont: {
+ size: 16
+ },
+ tickformat: tick_digits,
+ automargin: true
+ },
+ width: 600,
+ height: 600,
+ hovermode: "closest",
+ dragmode: false
+ }
+
+ var primary_trace = {
+ x: x_values['samples_primary'],
+ y: y_values['samples_primary'],
+ mode: 'markers',
+ type: 'scatter',
+ name: 'Samples',
+ text: point_names['samples_primary'],
+ marker: {
+ color: 'blue',
+ width: 6
+ }
+ }
+ if ("samples_other" in js_data.sample_group_types) {
+ var other_trace = {
+ x: x_values['samples_other'],
+ y: y_values['samples_other'],
+ mode: 'markers',
+ type: 'scatter',
+ name: js_data.sample_group_types['samples_other'],
+ text: point_names['samples_other'],
+ marker: {
+ color: 'blue',
+ width: 6
+ }
+ }
+ }
+
+ if (sample_group == "samples_primary"){
+ var primary_intercept_trace = {
+ x: intercept_line['samples_primary'][0],
+ y: intercept_line['samples_primary'][1],
+ mode: 'lines',
+ type: 'scatter',
+ name: 'Normal Function',
+ line: {
+ color: 'black',
+ width: 1
+ }
+ }
+ } else if (sample_group == "samples_other"){
+ var other_intercept_trace = {
+ x: intercept_line['samples_other'][0],
+ y: intercept_line['samples_other'][1],
+ mode: 'lines',
+ type: 'scatter',
+ name: 'Normal Function',
+ line: {
+ color: 'black',
+ width: 1
+ }
+ }
+ } else {
+ var all_intercept_trace = {
+ x: intercept_line['samples_all'][0],
+ y: intercept_line['samples_all'][1],
+ mode: 'lines',
+ type: 'scatter',
+ name: 'Normal Function',
+ line: {
+ color: 'black',
+ width: 1
+ }
+ }
+ }
+
+ if (sample_group == "samples_primary"){
+ var data = [primary_intercept_trace, primary_trace]
+ } else if (sample_group == "samples_other"){
+ var data = [other_intercept_trace, other_trace]
+ } else {
+ var data = [all_intercept_trace, primary_trace, other_trace]
+ }
+
+ Plotly.newPlot('prob_plot_div', data, layout, root.modebar_options)
+ };
+
+ root.redraw_prob_plot_impl = redraw_prob_plot;
+
+}).call(this);
diff --git a/gn2/wqflask/static/new/javascript/scatter-matrix.js b/gn2/wqflask/static/new/javascript/scatter-matrix.js
new file mode 100644
index 00000000..31cb384b
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/scatter-matrix.js
@@ -0,0 +1,551 @@
+// Heavily influenced by Mike Bostock's Scatter Matrix example
+// http://mbostock.github.io/d3/talk/20111116/iris-splom.html
+//
+
+/*
+ScatterMatrix = function(url) {
+ this.__url = url;
+ this.__data = undefined;
+ this.__cell_size = 140;
+};
+*/
+
+ScatterMatrix = function(csv_string) {
+ this.__csv_string = csv_string;
+ this.__data = undefined;
+ this.__cell_size = 140;
+};
+
+ScatterMatrix.prototype.cellSize = function(n) {
+ this.__cell_size = n;
+ return this;
+};
+
+/*
+ScatterMatrix.prototype.onData = function(cb) {
+ if (this.__data) { cb(); return; }
+ var self = this;
+ d3.csv(self.__url, function(data) {
+ self.__data = data;
+ cb();
+ });
+};
+*/
+
+ScatterMatrix.prototype.onData = function(cb) {
+ if (this.__data) { cb(); return; }
+ var self = this;
+ console.log("self.csv_string:", self.__csv_string)
+
+ data = d3.csv.parse(self.__csv_string);
+ self.__data = data;
+ cb();
+
+/*
+ d3.csv.parseRows(self.__csv_string, function(data) {
+ self.__data = data;
+ cb();
+ });
+*/
+
+};
+
+ScatterMatrix.prototype.render = function () {
+ var self = this;
+
+ var container = d3.select('#scatterplot_container').append('div')
+ .attr('class', 'scatter-matrix-container');
+ var control = container.append('div')
+ .attr('class', 'scatter-matrix-control')
+ .style({'float':'left', 'margin-right':'50px'})
+ var svg = container.append('div')
+ .attr('class', 'scatter-matrix-svg')
+ .style({'float':'left'})
+ .html('<em>Loading data...</em>');
+
+ this.onData(function() {
+ var data = self.__data;
+
+ // Fetch data and get all string variables
+ var string_variables = [undefined];
+ var numeric_variables = [];
+ var numeric_variable_values = {};
+
+ for (k in data[0]) {
+ if (isNaN(+data[0][k])) { string_variables.push(k); }
+ else { numeric_variables.push(k); numeric_variable_values[k] = []; }
+ }
+
+ console.log("data:", data)
+
+ data.forEach(function(d) {
+ for (var j in numeric_variables) {
+ var k = numeric_variables[j];
+ var value = d[k];
+ if (numeric_variable_values[k].indexOf(value) < 0) {
+ numeric_variable_values[k].push(value);
+ }
+ }
+ });
+
+ var size_control = control.append('div').attr('class', 'scatter-matrix-size-control');
+ var color_control = control.append('div').attr('class', 'scatter-matrix-color-control');
+ var filter_control = control.append('div').attr('class', 'scatter-matrix-filter-control');
+ var variable_control = control.append('div').attr('class', 'scatter-matrix-variable-control');
+ var drill_control = control.append('div').attr('class', 'scatter-matrix-drill-control');
+
+ // shared control states
+ var to_include = [];
+ var color_variable = undefined;
+ var selected_colors = undefined;
+ for (var j in numeric_variables) {
+ var v = numeric_variables[j];
+ to_include.push(v);
+ }
+ var drill_variables = [];
+
+ function set_filter(variable) {
+ filter_control.selectAll('*').remove();
+ if (variable) {
+ // Get unique values for this variable
+ var values = [];
+ data.forEach(function(d) {
+ var v = d[variable];
+ if (values.indexOf(v) < 0) { values.push(v); }
+ });
+
+ selected_colors = [];
+ for (var j in values) {
+ var v = values[j];
+ selected_colors.push(v);
+ }
+
+ var filter_li =
+ filter_control
+ .append('p').text('Filter by '+variable+': ')
+ .append('ul')
+ .selectAll('li')
+ .data(values)
+ .enter().append('li');
+
+ filter_li.append('input')
+ .attr('type', 'checkbox')
+ .attr('checked', 'checked')
+ .on('click', function(d, i) {
+ var new_selected_colors = [];
+ for (var j in selected_colors) {
+ var v = selected_colors[j];
+ if (v !== d || this.checked) { new_selected_colors.push(v); }
+ }
+ if (this.checked) { new_selected_colors.push(d); }
+ selected_colors = new_selected_colors;
+ self.__draw(self.__cell_size, svg, color_variable, selected_colors, to_include, drill_variables);
+ });
+ filter_li.append('label')
+ .html(function(d) { return d; });
+ }
+ }
+
+ size_a = size_control.append('p').text('Change cell size: ');
+ size_a.append('a')
+ .attr('href', '#')
+ .html('-')
+ .on('click', function() {
+ self.__cell_size *= 0.75;
+ self.__draw(self.__cell_size, svg, color_variable, selected_colors, to_include, drill_variables);
+ });
+ size_a.append('span').html('&nbsp;');
+ size_a.append('a')
+ .attr('href', '#')
+ .html('+')
+ .on('click', function() {
+ self.__cell_size *= 1.25;
+ self.__draw(self.__cell_size, svg, color_variable, selected_colors, to_include, drill_variables);
+ });
+
+ color_control.append('p').text('Select a variable to color:')
+ color_control
+ .append('ul')
+ .selectAll('li')
+ .data(string_variables)
+ .enter().append('li')
+ .append('a')
+ .attr('href', '#')
+ .text(function(d) { return d ? d : 'None'; })
+ .on('click', function(d, i) {
+ color_variable = d;
+ selected_colors = undefined;
+ self.__draw(self.__cell_size, svg, color_variable, selected_colors, to_include, drill_variables);
+ set_filter(d);
+ });
+
+ var variable_li =
+ variable_control
+ .append('p').text('Include variables: ')
+ .append('ul')
+ .selectAll('li')
+ .data(numeric_variables)
+ .enter().append('li');
+
+ variable_li.append('input')
+ .attr('type', 'checkbox')
+ .attr('checked', 'checked')
+ .on('click', function(d, i) {
+ var new_to_include = [];
+ for (var j in to_include) {
+ var v = to_include[j];
+ if (v !== d || this.checked) { new_to_include.push(v); }
+ }
+ if (this.checked) { new_to_include.push(d); }
+ to_include = new_to_include;
+ self.__draw(self.__cell_size, svg, color_variable, selected_colors, to_include, drill_variables);
+ });
+ variable_li.append('label')
+ .html(function(d) { return d; });
+
+ drill_li =
+ drill_control
+ .append('p').text('Drill and Expand: ')
+ .append('ul')
+ .selectAll('li')
+ .data(numeric_variables)
+ .enter().append('li');
+
+ drill_li.append('input')
+ .attr('type', 'checkbox')
+ .on('click', function(d, i) {
+ var new_drill_variables = [];
+ for (var j in drill_variables) {
+ var v = drill_variables[j];
+ if (v !== d || this.checked) { new_drill_variables.push(v); }
+ }
+ if (this.checked) { new_drill_variables.push(d); }
+ drill_variables = new_drill_variables;
+ self.__draw(self.__cell_size, svg, color_variable, selected_colors, to_include, drill_variables);
+ });
+ drill_li.append('label')
+ .html(function(d) { return d+' ('+numeric_variable_values[d].length+')'; });
+
+ self.__draw(self.__cell_size, svg, color_variable, selected_colors, to_include, drill_variables);
+ });
+};
+
+ScatterMatrix.prototype.__draw =
+ function(cell_size, container_el, color_variable, selected_colors, to_include, drill_variables) {
+ var self = this;
+ this.onData(function() {
+ var data = self.__data;
+
+ if (color_variable && selected_colors) {
+ data = [];
+ self.__data.forEach(function(d) {
+ if (selected_colors.indexOf(d[color_variable]) >= 0) { data.push(d); }
+ });
+ }
+
+ container_el.selectAll('*').remove();
+
+ // If no data, don't do anything
+ if (data.length == 0) { return; }
+
+ // Parse headers from first row of data
+ var numeric_variables = [];
+ for (k in data[0]) {
+ if (!isNaN(+data[0][k]) && to_include.indexOf(k) >= 0) { numeric_variables.push(k); }
+ }
+ numeric_variables.sort();
+
+ // Get values of the string variable
+ var colors = [];
+ if (color_variable) {
+ // Using self.__data, instead of data, so our css classes are consistent when
+ // we filter by value.
+ self.__data.forEach(function(d) {
+ var s = d[color_variable];
+ if (colors.indexOf(s) < 0) { colors.push(s); }
+ });
+ }
+
+ function color_class(d) {
+ var c = d;
+ if (color_variable && d[color_variable]) { c = d[color_variable]; }
+ return colors.length > 0 ? 'color-'+colors.indexOf(c) : 'color-2';
+ }
+
+ // Size parameters
+ var size = cell_size, padding = 10,
+ axis_width = 20, axis_height = 15, legend_width = 200, label_height = 15;
+
+ // Get x and y scales for each numeric variable
+ var x = {}, y = {};
+ numeric_variables.forEach(function(trait) {
+ // Coerce values to numbers.
+ data.forEach(function(d) { d[trait] = +d[trait]; });
+
+ var value = function(d) { return d[trait]; },
+ domain = [d3.min(data, value), d3.max(data, value)],
+ range_x = [padding / 2, size - padding / 2],
+ range_y = [padding / 2, size - padding / 2];
+
+ x[trait] = d3.scale.linear().domain(domain).range(range_x);
+ y[trait] = d3.scale.linear().domain(domain).range(range_y.reverse());
+ });
+
+ // When drilling, user select one or more variables. The first drilled
+ // variable becomes the x-axis variable for all columns, and each column
+ // contains only data points that match specific values for each of the
+ // drilled variables other than the first.
+
+ var drill_values = [];
+ var drill_degrees = []
+ drill_variables.forEach(function(variable) {
+ // Skip first one, since that's just the x axis
+ if (drill_values.length == 0) {
+ drill_values.push([]);
+ drill_degrees.push(1);
+ }
+ else {
+ var values = [];
+ data.forEach(function(d) {
+ var v = d[variable];
+ if (v !== undefined && values.indexOf(v) < 0) { values.push(v); }
+ });
+ values.sort();
+ drill_values.push(values);
+ drill_degrees.push(values.length);
+ }
+ });
+ var total_columns = 1;
+ drill_degrees.forEach(function(d) { total_columns *= d; });
+
+ // Pick out stuff to draw on horizontal and vertical dimensions
+
+ if (drill_variables.length > 0) {
+ // First drill is now the x-axis variable for all columns
+ x_variables = [];
+ for (var i=0; i<total_columns; i++) {
+ x_variables.push(drill_variables[0]);
+ }
+ }
+ else {
+ x_variables = numeric_variables.slice(0);
+ }
+
+ if (drill_variables.length > 0) {
+ // Don't draw any of the "drilled" variables in vertical dimension
+ y_variables = [];
+ numeric_variables.forEach(function(variable) {
+ if (drill_variables.indexOf(variable) < 0) { y_variables.push(variable); }
+ });
+ }
+ else {
+ y_variables = numeric_variables.slice(0);
+ }
+
+ var filter_descriptions = 0;
+ if (drill_variables.length > 1) {
+ filter_descriptions = drill_variables.length-1;
+ }
+
+ // Axes
+ var x_axis = d3.svg.axis();
+ var y_axis = d3.svg.axis();
+ var intf = d3.format('d');
+ var fltf = d3.format('.f');
+ var scif = d3.format('e');
+
+ x_axis.ticks(5)
+ .tickSize(size * y_variables.length)
+ .tickFormat(function(d) {
+ if (Math.abs(+d) > 10000 || (Math.abs(d) < 0.001 && Math.abs(d) != 0)) { return scif(d); }
+ if (parseInt(d) == +d) { return intf(d); }
+ return fltf(d);
+ });
+
+ y_axis.ticks(5)
+ .tickSize(size * x_variables.length)
+ .tickFormat(function(d) {
+ if (Math.abs(+d) > 10000 || (Math.abs(d) < 0.001 && Math.abs(d) != 0)) { return scif(d); }
+ if (parseInt(d) == +d) { return intf(d); }
+ return fltf(d);
+ });
+
+ // Brush - for highlighting regions of data
+ var brush = d3.svg.brush()
+ .on("brushstart", brushstart)
+ .on("brush", brush)
+ .on("brushend", brushend);
+
+ // Root panel
+ var svg = container_el.append("svg:svg")
+ .attr("width", label_height + size * x_variables.length + axis_width + padding + legend_width)
+ .attr("height", size * y_variables.length + axis_height + label_height + label_height*filter_descriptions)
+ .append("svg:g")
+ .attr("transform", "translate("+label_height+",0)");
+
+ // Push legend to the side
+ var legend = svg.selectAll("g.legend")
+ .data(colors)
+ .enter().append("svg:g")
+ .attr("class", "legend")
+ .attr("transform", function(d, i) {
+ return "translate(" + (label_height + size * x_variables.length + padding) + "," + (i*20+10) + ")";
+ });
+
+ legend.append("svg:circle")
+ .attr("class", function(d, i) { return color_class(d); })
+ .attr("r", 3);
+
+ legend.append("svg:text")
+ .attr("x", 12)
+ .attr("dy", ".31em")
+ .text(function(d) { return d; });
+
+ // Draw X-axis
+ svg.selectAll("g.x.axis")
+ .data(x_variables)
+ .enter().append("svg:g")
+ .attr("class", "x axis")
+ .attr("transform", function(d, i) { return "translate(" + i * size + ",0)"; })
+ .each(function(d) { d3.select(this).call(x_axis.scale(x[d]).orient("bottom")); });
+
+ // Draw Y-axis
+ svg.selectAll("g.y.axis")
+ .data(y_variables)
+ .enter().append("svg:g")
+ .attr("class", "y axis")
+ .attr("transform", function(d, i) { return "translate(0," + i * size + ")"; })
+ .each(function(d) { d3.select(this).call(y_axis.scale(y[d]).orient("right")); });
+
+ // Draw scatter plot
+ var cell = svg.selectAll("g.cell")
+ .data(cross(x_variables, y_variables))
+ .enter().append("svg:g")
+ .attr("class", "cell")
+ .attr("transform", function(d) { return "translate(" + d.i * size + "," + d.j * size + ")"; })
+ .each(plot);
+
+ // Add titles for y variables
+ cell.filter(function(d) { return d.i == 0; }).append("svg:text")
+ .attr("x", padding-size)
+ .attr("y", -label_height)
+ .attr("dy", ".71em")
+ .attr("transform", function(d) { return "rotate(-90)"; })
+ .text(function(d) { return d.y; });
+
+ function plot(p) {
+ // console.log(p);
+
+ var data_to_draw = data;
+
+ // If drilling, compute what values of the drill variables correspond to
+ // this column.
+ //
+ var filter = {};
+ if (drill_variables.length > 1) {
+ var column = p.i;
+
+ var cap = 1;
+ for (var i=drill_variables.length-1; i > 0; i--) {
+ var var_name = drill_variables[i];
+ var var_value = undefined;
+
+ if (i == drill_variables.length-1) {
+ // for the last drill variable, we index by %
+ var_value = drill_values[i][column % drill_degrees[i]];
+ }
+ else {
+ // otherwise divide by capacity of subsequent variables to get value array index
+ var_value = drill_values[i][parseInt(column/cap)];
+ }
+
+ filter[var_name] = var_value;
+ cap *= drill_degrees[i];
+ }
+
+ data_to_draw = [];
+ data.forEach(function(d) {
+ var pass = true;
+ for (k in filter) { if (d[k] != filter[k]) { pass = false; break; } }
+ if (pass === true) { data_to_draw.push(d); }
+ });
+ }
+
+ var cell = d3.select(this);
+
+ // Frame
+ cell.append("svg:rect")
+ .attr("class", "frame")
+ .attr("x", padding / 2)
+ .attr("y", padding / 2)
+ .attr("width", size - padding)
+ .attr("height", size - padding);
+
+ // Scatter plot dots
+ cell.selectAll("circle")
+ .data(data_to_draw)
+ .enter().append("svg:circle")
+ .attr("class", function(d) { return color_class(d); })
+ .attr("cx", function(d) { return x[p.x](d[p.x]); })
+ .attr("cy", function(d) { return y[p.y](d[p.y]); })
+ .attr("r", 5);
+
+ // Add titles for x variables and drill variable values
+ if (p.j == y_variables.length-1) {
+ cell.append("svg:text")
+ .attr("x", padding)
+ .attr("y", size+axis_height)
+ .attr("dy", ".71em")
+ .text(function(d) { return d.x; });
+
+ if (drill_variables.length > 1) {
+ var i = 0;
+ for (k in filter) {
+ i += 1;
+ cell.append("svg:text")
+ .attr("x", padding)
+ .attr("y", size+axis_height+label_height*i)
+ .attr("dy", ".71em")
+ .text(function(d) { return filter[k]+': '+k; });
+ }
+ }
+ }
+
+ // Brush
+ cell.call(brush.x(x[p.x]).y(y[p.y]));
+ }
+
+ // Clear the previously-active brush, if any
+ function brushstart(p) {
+ if (brush.data !== p) {
+ cell.call(brush.clear());
+ brush.x(x[p.x]).y(y[p.y]).data = p;
+ }
+ }
+
+ // Highlight selected circles
+ function brush(p) {
+ var e = brush.extent();
+ svg.selectAll(".cell circle").attr("class", function(d) {
+ return e[0][0] <= d[p.x] && d[p.x] <= e[1][0]
+ && e[0][1] <= d[p.y] && d[p.y] <= e[1][1]
+ ? color_class(d) : null;
+ });
+ }
+
+ // If brush is empty, select all circles
+ function brushend() {
+ if (brush.empty()) svg.selectAll(".cell circle").attr("class", function(d) {
+ return color_class(d);
+ });
+ }
+
+ function cross(a, b) {
+ var c = [], n = a.length, m = b.length, i, j;
+ for (i = -1; ++i < n;) for (j = -1; ++j < m;) c.push({x: a[i], i: i, y: b[j], j: j});
+ return c;
+ }
+ });
+
+};
+
diff --git a/gn2/wqflask/static/new/javascript/scatterplot.js b/gn2/wqflask/static/new/javascript/scatterplot.js
new file mode 100644
index 00000000..3fea0503
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/scatterplot.js
@@ -0,0 +1,414 @@
+// Generated by CoffeeScript 1.8.0
+var root, scatterplot;
+
+root = typeof exports !== "undefined" && exports !== null ? exports : this;
+
+scatterplot = function() {
+ var axispos, chart, dataByInd, height, margin, nxticks, nyticks, pointcolor, pointsSelect, pointsize, pointstroke, rectcolor, rotate_ylab, title, titlepos, width, xNA, xlab, xlim, xscale, xticks, xvar, yNA, ylab, ylim, yscale, yticks, yvar;
+ width = 800;
+ height = 600;
+ margin = {
+ left: 60,
+ top: 40,
+ right: 40,
+ bottom: 40,
+ inner: 5
+ };
+ axispos = {
+ xtitle: 25,
+ ytitle: 45,
+ xlabel: 5,
+ ylabel: 5
+ };
+ titlepos = 20;
+ xNA = {
+ handle: true,
+ force: false,
+ width: 15,
+ gap: 10
+ };
+ yNA = {
+ handle: true,
+ force: false,
+ width: 15,
+ gap: 10
+ };
+ xlim = null;
+ ylim = null;
+ nxticks = 5;
+ xticks = null;
+ nyticks = 5;
+ yticks = null;
+ rectcolor = d3.rgb(230, 230, 230);
+ pointcolor = null;
+ pointstroke = "black";
+ pointsize = 3;
+ title = "Correlation Scatterplot";
+ xlab = "X";
+ ylab = "Y";
+ rotate_ylab = null;
+ yscale = d3.scale.linear();
+ xscale = d3.scale.linear();
+ xvar = 0;
+ yvar = 1;
+ pointsSelect = null;
+ dataByInd = false;
+ chart = function(selection) {
+ return selection.each(function(data) {
+ var g, gEnter, group, i, indID, indtip, maxx, minx, na_value, ngroup, panelheight, paneloffset, panelwidth, points, svg, titlegrp, x, xaxis, xrange, xs, y, yaxis, yrange, ys, _i, _ref, _ref1, _ref2, _results;
+ if (dataByInd) {
+ x = data.data.map(function(d) {
+ return d[xvar];
+ });
+ y = data.data.map(function(d) {
+ return d[yvar];
+ });
+ } else {
+ x = data.data[xvar];
+ y = data.data[yvar];
+ }
+
+ indID = (_ref = data != null ? data.indID : void 0) != null ? _ref : null;
+ indID = indID != null ? indID : (function() {
+ _results = [];
+ for (var _i = 1, _ref1 = x.length; 1 <= _ref1 ? _i <= _ref1 : _i >= _ref1; 1 <= _ref1 ? _i++ : _i--){ _results.push(_i); }
+ return _results;
+ }).apply(this);
+
+ group = (_ref2 = data != null ? data.group : void 0) != null ? _ref2 : (function() {
+ var _j, _len, _results1;
+ _results1 = [];
+ for (_j = 0, _len = x.length; _j < _len; _j++) {
+ i = x[_j];
+ _results1.push(1);
+ }
+ return _results1;
+ })();
+ ngroup = d3.max(group);
+ group = (function() {
+ var _j, _len, _results1;
+ _results1 = [];
+ for (_j = 0, _len = group.length; _j < _len; _j++) {
+ g = group[_j];
+ _results1.push(g - 1);
+ }
+ return _results1;
+ })();
+ pointcolor = pointcolor != null ? pointcolor : selectGroupColors(ngroup, "dark");
+ pointcolor = expand2vector(pointcolor, ngroup);
+ if (x.every(function(v) {
+ return (v != null) && !xNA.force;
+ })) {
+ xNA.handle = false;
+ }
+ if (y.every(function(v) {
+ return (v != null) && !yNA.force;
+ })) {
+ yNA.handle = false;
+ }
+ if (xNA.handle) {
+ paneloffset = xNA.width + xNA.gap;
+ panelwidth = width - paneloffset;
+ } else {
+ paneloffset = 0;
+ panelwidth = width;
+ }
+ if (yNA.handle) {
+ panelheight = height - (yNA.width + yNA.gap);
+ } else {
+ panelheight = height;
+ }
+ xlim = xlim != null ? xlim : d3.extent(x);
+ ylim = ylim != null ? ylim : d3.extent(y);
+ na_value = d3.min(x.concat(y)) - 100;
+ svg = d3.select(this).selectAll("svg").data([data]);
+ gEnter = svg.enter().append("svg").append("g");
+ svg.attr("width", width + margin.left + margin.right).attr("height", height + margin.top + margin.bottom);
+ g = svg.select("g");
+ g.append("rect").attr("x", paneloffset + margin.left).attr("y", margin.top).attr("height", panelheight).attr("width", panelwidth).attr("fill", rectcolor).attr("stroke", "none");
+ if (xNA.handle) {
+ g.append("rect").attr("x", margin.left).attr("y", margin.top).attr("height", panelheight).attr("width", xNA.width).attr("fill", rectcolor).attr("stroke", "none");
+ }
+ if (xNA.handle && yNA.handle) {
+ g.append("rect").attr("x", margin.left).attr("y", margin.top + height - yNA.width).attr("height", yNA.width).attr("width", xNA.width).attr("fill", rectcolor).attr("stroke", "none");
+ }
+ if (yNA.handle) {
+ g.append("rect").attr("x", margin.left + paneloffset).attr("y", margin.top + height - yNA.width).attr("height", yNA.width).attr("width", panelwidth).attr("fill", rectcolor).attr("stroke", "none");
+ }
+ xrange = [margin.left + paneloffset + margin.inner, margin.left + paneloffset + panelwidth - margin.inner];
+ yrange = [margin.top + panelheight - margin.inner, margin.top + margin.inner];
+ xscale.domain(xlim).range(xrange);
+ yscale.domain(ylim).range(yrange);
+ xs = d3.scale.linear().domain(xlim).range(xrange);
+ ys = d3.scale.linear().domain(ylim).range(yrange);
+ if (xNA.handle) {
+ xscale.domain([na_value].concat(xlim)).range([margin.left + xNA.width / 2].concat(xrange));
+ x = x.map(function(e) {
+ if (e != null) {
+ return e;
+ } else {
+ return na_value;
+ }
+ });
+ }
+ if (yNA.handle) {
+ yscale.domain([na_value].concat(ylim)).range([height + margin.top - yNA.width / 2].concat(yrange));
+ y = y.map(function(e) {
+ if (e != null) {
+ return e;
+ } else {
+ return na_value;
+ }
+ });
+ }
+ minx = xlim[0];
+ maxx = xlim[1];
+ yticks = yticks != null ? yticks : ys.ticks(nyticks);
+ xticks = xticks != null ? xticks : xs.ticks(nxticks);
+ titlegrp = g.append("g").attr("class", "title").append("text").attr("x", margin.left + width / 2).attr("y", margin.top - titlepos).style("fill", "black").style("font-size", "24px").text(title);
+ xaxis = g.append("g").attr("class", "x axis");
+ xaxis.selectAll("empty").data(xticks).enter().append("line").attr("x1", function(d) {
+ return xscale(d);
+ }).attr("x2", function(d) {
+ return xscale(d);
+ }).attr("y1", margin.top).attr("y2", margin.top + height).attr("fill", "none").attr("stroke", "white").attr("stroke-width", 1).style("pointer-events", "none");
+ xaxis.selectAll("empty").data(xticks).enter().append("text").attr("x", function(d) {
+ return xscale(d);
+ }).attr("y", margin.top + height + axispos.xlabel).text(function(d) {
+ return formatAxis(xticks)(d);
+ });
+ xaxis.append("text").attr("class", "title").attr("x", margin.left + width / 2).attr("y", margin.top + height + axispos.xtitle).style("fill", "black").text(xlab);
+ if (xNA.handle) {
+ xaxis.append("text").attr("x", margin.left + xNA.width / 2).attr("y", margin.top + height + axispos.xlabel).text("N/A");
+ }
+ rotate_ylab = rotate_ylab != null ? rotate_ylab : ylab.length > 1;
+ yaxis = g.append("g").attr("class", "y axis");
+ yaxis.selectAll("empty").data(yticks).enter().append("line").attr("y1", function(d) {
+ return yscale(d);
+ }).attr("y2", function(d) {
+ return yscale(d);
+ }).attr("x1", margin.left).attr("x2", margin.left + width).attr("fill", "none").attr("stroke", "white").attr("stroke-width", 1).style("pointer-events", "none");
+ yaxis.selectAll("empty").data(yticks).enter().append("text").attr("y", function(d) {
+ return yscale(d);
+ }).attr("x", margin.left - axispos.ylabel).text(function(d) {
+ return formatAxis(yticks)(d);
+ });
+ yaxis.append("text").attr("class", "title").attr("y", margin.top + height / 2).attr("x", margin.left - axispos.ytitle).style("fill", "black").text(ylab).attr("transform", rotate_ylab ? "rotate(270," + (margin.left - axispos.ytitle) + "," + (margin.top + height / 2) + ")" : "");
+ if (yNA.handle) {
+ yaxis.append("text").attr("x", margin.left - axispos.ylabel).attr("y", margin.top + height - yNA.width / 2).text("N/A");
+ }
+ indtip = d3.tip().attr('class', 'd3-tip').html(function(d, i) {
+ return indID[i];
+ }).direction('e').offset([0, 10]);
+ svg.call(indtip);
+ if (js_data.slope && js_data.intercept) {
+ g.append("line").attr("x1", xscale(minx) - margin.inner).attr('y1', yscale(js_data.slope * minx + js_data.intercept)).attr("x2", xscale(maxx * 1) + margin.inner).attr("y2", yscale(slope * maxx * 1 + intercept)).style("stroke", "black").style("stroke-width", 2);
+ }
+ points = g.append("g").attr("id", "points");
+ pointsSelect = points.selectAll("empty").data(d3.range(x.length)).enter().append("circle").attr("cx", function(d, i) {
+ return xscale(x[i]);
+ }).attr("cy", function(d, i) {
+ return yscale(y[i]);
+ }).attr("class", function(d, i) {
+ return "pt" + i;
+ }).attr("r", pointsize).attr("fill", function(d, i) {
+ return pointcolor[group[i]];
+ }).attr("stroke", pointstroke).attr("stroke-width", "1").attr("opacity", function(d, i) {
+ if (((x[i] != null) || xNA.handle) && ((y[i] != null) || yNA.handle)) {
+ return 1;
+ }
+ return 0;
+ }).on("mouseover.paneltip", indtip.show).on("mouseout.paneltip", indtip.hide);
+ g.append("rect").attr("x", margin.left + paneloffset).attr("y", margin.top).attr("height", panelheight).attr("width", panelwidth).attr("fill", "none").attr("stroke", "black").attr("stroke-width", "none");
+ if (xNA.handle) {
+ g.append("rect").attr("x", margin.left).attr("y", margin.top).attr("height", panelheight).attr("width", xNA.width).attr("fill", "none").attr("stroke", "black").attr("stroke-width", "none");
+ }
+ if (xNA.handle && yNA.handle) {
+ g.append("rect").attr("x", margin.left).attr("y", margin.top + height - yNA.width).attr("height", yNA.width).attr("width", xNA.width).attr("fill", "none").attr("stroke", "black").attr("stroke-width", "none");
+ }
+ if (yNA.handle) {
+ return g.append("rect").attr("x", margin.left + paneloffset).attr("y", margin.top + height - yNA.width).attr("height", yNA.width).attr("width", panelwidth).attr("fill", "none").attr("stroke", "black").attr("stroke-width", "none");
+ }
+ });
+ };
+ chart.width = function(value) {
+ if (!arguments.length) {
+ return width;
+ }
+ width = value;
+ return chart;
+ };
+ chart.height = function(value) {
+ if (!arguments.length) {
+ return height;
+ }
+ height = value;
+ return chart;
+ };
+ chart.margin = function(value) {
+ if (!arguments.length) {
+ return margin;
+ }
+ margin = value;
+ return chart;
+ };
+ chart.axispos = function(value) {
+ if (!arguments.length) {
+ return axispos;
+ }
+ axispos = value;
+ return chart;
+ };
+ chart.titlepos = function(value) {
+ if (!arguments.length) {
+ return titlepos;
+ }
+ titlepos;
+ return chart;
+ };
+ chart.xlim = function(value) {
+ if (!arguments.length) {
+ return xlim;
+ }
+ xlim = value;
+ return chart;
+ };
+ chart.nxticks = function(value) {
+ if (!arguments.length) {
+ return nxticks;
+ }
+ nxticks = value;
+ return chart;
+ };
+ chart.xticks = function(value) {
+ if (!arguments.length) {
+ return xticks;
+ }
+ xticks = value;
+ return chart;
+ };
+ chart.ylim = function(value) {
+ if (!arguments.length) {
+ return ylim;
+ }
+ ylim = value;
+ return chart;
+ };
+ chart.nyticks = function(value) {
+ if (!arguments.length) {
+ return nyticks;
+ }
+ nyticks = value;
+ return chart;
+ };
+ chart.yticks = function(value) {
+ if (!arguments.length) {
+ return yticks;
+ }
+ yticks = value;
+ return chart;
+ };
+ chart.rectcolor = function(value) {
+ if (!arguments.length) {
+ return rectcolor;
+ }
+ rectcolor = value;
+ return chart;
+ };
+ chart.pointcolor = function(value) {
+ if (!arguments.length) {
+ return pointcolor;
+ }
+ pointcolor = value;
+ return chart;
+ };
+ chart.pointsize = function(value) {
+ if (!arguments.length) {
+ return pointsize;
+ }
+ pointsize = value;
+ return chart;
+ };
+ chart.pointstroke = function(value) {
+ if (!arguments.length) {
+ return pointstroke;
+ }
+ pointstroke = value;
+ return chart;
+ };
+ chart.dataByInd = function(value) {
+ if (!arguments.length) {
+ return dataByInd;
+ }
+ dataByInd = value;
+ return chart;
+ };
+ chart.title = function(value) {
+ if (!arguments.length) {
+ return title;
+ }
+ title = value;
+ return chart;
+ };
+ chart.xlab = function(value) {
+ if (!arguments.length) {
+ return xlab;
+ }
+ xlab = value;
+ return chart;
+ };
+ chart.ylab = function(value) {
+ if (!arguments.length) {
+ return ylab;
+ }
+ ylab = value;
+ return chart;
+ };
+ chart.rotate_ylab = function(value) {
+ if (!arguments.length) {
+ return rotate_ylab;
+ }
+ rotate_ylab = value;
+ return chart;
+ };
+ chart.xvar = function(value) {
+ if (!arguments.length) {
+ return xvar;
+ }
+ xvar = value;
+ return chart;
+ };
+ chart.yvar = function(value) {
+ if (!arguments.length) {
+ return yvar;
+ }
+ yvar = value;
+ return chart;
+ };
+ chart.xNA = function(value) {
+ if (!arguments.length) {
+ return xNA;
+ }
+ xNA = value;
+ return chart;
+ };
+ chart.yNA = function(value) {
+ if (!arguments.length) {
+ return yNA;
+ }
+ yNA = value;
+ return chart;
+ };
+ chart.yscale = function() {
+ return yscale;
+ };
+ chart.xscale = function() {
+ return xscale;
+ };
+ chart.pointsSelect = function() {
+ return pointsSelect;
+ };
+ return chart;
+};
+
+root.scatterplot = scatterplot;
diff --git a/gn2/wqflask/static/new/javascript/search_autocomplete.js b/gn2/wqflask/static/new/javascript/search_autocomplete.js
new file mode 100644
index 00000000..10c22c95
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/search_autocomplete.js
@@ -0,0 +1,173 @@
+ //replace with gn search hints
+
+
+
+
+
+ function autocomplete(inp, arr) {
+ /*the autocomplete function takes two arguments,
+ the text field element and an array of possible autocompleted values:*/
+ var currentFocus;
+ /*execute a function when someone writes in the text field:*/
+
+ inp.addEventListener("focus", function(e) {
+
+
+ var a, b, i, val = this.value;
+ closeAllLists();
+ currentFocus = -1;
+ a = document.createElement("DIV");
+ a.setAttribute("id", this.id + "autocomplete-list");
+ a.setAttribute("class", "autocomplete-items");
+ this.parentNode.appendChild(a);
+ let historySearch = retrieveSearchHistory().splice(0, 5)
+ let text_title = document.createElement("DIV")
+ text_title.innerHTML = "<strong>RECENT SEARCH</strong><input id='clear_all' type='button' value='clear_all'>";
+ text_title.setAttribute("class", "recent-search-title")
+ text_title.setAttribute('disabled', true);
+
+ a.appendChild(text_title);
+ for (i = 0; i < historySearch.length; i++) {
+ b = document.createElement("DIV");
+ b.innerHTML = "<span>" + historySearch[i].substr(0, val.length) + "</span>";
+ b.style.color = "blue";
+ b.innerHTML += historySearch[i].substr(val.length);
+ b.innerHTML += "<input type='hidden' value='" + historySearch[i] + "'>";
+ b.addEventListener("click", function(e) {
+ inp.value = this.getElementsByTagName("input")[0].value;
+ closeAllLists();
+ });
+ a.appendChild(b);
+
+ }
+ document.getElementById("clear_all").addEventListener("click",(event)=>{
+
+
+ deleteSearchHistory()
+ })
+
+ });
+
+
+
+ inp.addEventListener("input", function(e) {
+ var a, b, i, val = this.value;
+ /*close any already open lists of autocompleted values*/
+ closeAllLists();
+ if (!val) { return false; }
+ currentFocus = -1;
+ /*create a DIV element that will contain the items (values):*/
+ a = document.createElement("DIV");
+ a.setAttribute("id", this.id + "autocomplete-list");
+ a.setAttribute("class", "autocomplete-items");
+ /*append the DIV element as a child of the autocomplete container:*/
+ this.parentNode.appendChild(a);
+ /*for each item in the array...*/
+ for (i = 0; i < arr.length; i++) {
+ /*check if the item starts with the same letters as the text field value:*/
+ if (arr[i].substr(0, val.length).toUpperCase() == val.toUpperCase()) {
+ /*create a DIV element for each matching element:*/
+ b = document.createElement("DIV");
+ /*make the matching letters bold:*/
+ b.innerHTML = "<strong>" + arr[i].substr(0, val.length) + "</strong>";
+ b.innerHTML += arr[i].substr(val.length);
+ /*insert a input field that will hold the current array item's value:*/
+ b.innerHTML += "<input type='hidden' value='" + arr[i] + "'>";
+ /*execute a function when someone clicks on the item value (DIV element):*/
+ b.addEventListener("click", function(e) {
+ /*insert the value for the autocomplete text field:*/
+ inp.value = this.getElementsByTagName("input")[0].value;
+ /*close the list of autocompleted values,
+ (or any other open lists of autocompleted values:*/
+ closeAllLists();
+ });
+ a.appendChild(b);
+ }
+ }
+ });
+ /*execute a function presses a key on the keyboard:*/
+ inp.addEventListener("keydown", function(e) {
+ var x = document.getElementById(this.id + "autocomplete-list");
+ if (x) x = x.getElementsByTagName("div");
+ if (e.keyCode == 40) {
+ /*If the arrow DOWN key is pressed,
+ increase the currentFocus variable:*/
+ currentFocus++;
+ /*and and make the current item more visible:*/
+ addActive(x);
+ } else if (e.keyCode == 38) { //up
+ /*If the arrow UP key is pressed,
+ decrease the currentFocus variable:*/
+ currentFocus--;
+ /*and and make the current item more visible:*/
+ addActive(x);
+ } else if (e.keyCode == 13) {
+ /*If the ENTER key is pressed, prevent the form from being submitted,*/
+ e.preventDefault();
+ if (currentFocus > -1) {
+ /*and simulate a click on the "active" item:*/
+ if (x) x[currentFocus].click();
+ }
+ }
+ });
+
+ function addActive(x) {
+ /*a function to classify an item as "active":*/
+ if (!x) return false;
+ /*start by removing the "active" class on all items:*/
+ removeActive(x);
+ if (currentFocus >= x.length) currentFocus = 0;
+ if (currentFocus < 0) currentFocus = (x.length - 1);
+ /*add class "autocomplete-active":*/
+ x[currentFocus].classList.add("autocomplete-active");
+ }
+
+ function removeActive(x) {
+ /*a function to remove the "active" class from all autocomplete items:*/
+ for (var i = 0; i < x.length; i++) {
+ x[i].classList.remove("autocomplete-active");
+ }
+ }
+
+ function closeAllLists(elmnt) {
+ /*close all autocomplete lists in the document,
+ except the one passed as an argument:*/
+ var x = document.getElementsByClassName("autocomplete-items");
+ for (var i = 0; i < x.length; i++) {
+ if (elmnt != x[i] && elmnt != inp) {
+ x[i].parentNode.removeChild(x[i]);
+ }
+ }
+ }
+
+
+
+ /*execute a function when someone clicks in the document:*/
+ document.addEventListener("click", function(e) {
+ closeAllLists(e.target);
+ })
+
+ }
+
+ function retrieveSearchHistory() {
+ let results = localStorage.getItem("gn_search_history")
+
+ return results ? JSON.parse(results) : []
+ }
+
+
+
+
+
+ function saveBeforeSubmit(new_search) {
+
+ let search = retrieveSearchHistory()
+ search.unshift(new_search)
+
+ localStorage.setItem("gn_search_history", JSON.stringify([...new Set(search)].splice(0,8)))
+
+ }
+
+ function deleteSearchHistory(){
+ localStorage.setItem("gn_search_history", [])
+ } \ No newline at end of file
diff --git a/gn2/wqflask/static/new/javascript/search_results.js b/gn2/wqflask/static/new/javascript/search_results.js
new file mode 100644
index 00000000..c263ef49
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/search_results.js
@@ -0,0 +1,386 @@
+change_buttons = function(check_node = 0) {
+ var button, buttons, item, num_checked, text, _i, _j, _k, _l, _len, _len2, _len3, _len4, _results, _results2;
+ buttons = ["#add", "#remove"];
+
+ num_checked = 0
+ table_api = $('#trait_table').DataTable();
+ check_cells = table_api.column(0).nodes().to$();
+ for (let i = 0; i < check_cells.length; i++) {
+ if (check_cells[i].childNodes[check_node].checked){
+ num_checked += 1
+ }
+ }
+
+ if (num_checked === 0) {
+ for (_i = 0, _len = buttons.length; _i < _len; _i++) {
+ button = buttons[_i];
+ $(button).prop("disabled", true);
+ }
+ } else {
+ for (_j = 0, _len2 = buttons.length; _j < _len2; _j++) {
+ button = buttons[_j];
+ $(button).prop("disabled", false);
+ }
+ }
+};
+
+$(function() {
+ let selectAll, deselectAll, invert;
+
+ selectAll = function() {
+ table_api = $('#trait_table').DataTable();
+
+ check_cells = table_api.column(0).nodes().to$();
+ for (let i = 0; i < check_cells.length; i++) {
+ check_cells[i].childNodes[0].checked = true;
+ }
+
+ check_rows = table_api.rows().nodes();
+ for (let i =0; i < check_rows.length; i++) {
+ check_rows[i].classList.add("selected");
+ }
+
+ change_buttons();
+ };
+
+ deselectAll = function() {
+ table_api = $('#trait_table').DataTable();
+
+ check_cells = table_api.column(0).nodes().to$();
+ for (let i = 0; i < check_cells.length; i++) {
+ check_cells[i].childNodes[0].checked = false;
+ }
+
+ check_rows = table_api.rows().nodes();
+ for (let i =0; i < check_rows.length; i++) {
+ check_rows[i].classList.remove("selected")
+ }
+
+ change_buttons();
+ };
+
+ invert = function() {
+ table_api = $('#trait_table').DataTable();
+
+ check_cells = table_api.column(0).nodes().to$();
+ for (let i = 0; i < check_cells.length; i++) {
+ if (check_cells[i].childNodes[0].checked){
+ check_cells[i].childNodes[0].checked = false;
+ } else {
+ check_cells[i].childNodes[0].checked = true;
+ }
+ }
+
+ check_rows = table_api.rows().nodes();
+ for (let i =0; i < check_rows.length; i++) {
+ if (check_rows[i].classList.contains("selected")){
+ check_rows[i].classList.remove("selected")
+ } else {
+ check_rows[i].classList.add("selected")
+ }
+ }
+
+ change_buttons();
+ };
+
+ $('#searchbox').keyup(function(){
+ if ($(this).val() != ""){
+ $('#filter_term').val($(this).val());
+ } else {
+ $('#filter_term').val("None");
+ }
+ $('#trait_table').DataTable().search($(this).val()).draw();
+ });
+
+ /**
+ * parseIndexString takes a string consisting of integers,
+ * hyphens, and/or commas to indicate range(s) of indices
+ * to select a rows and returns the corresponding set of indices
+ * For example - "1, 5-10, 15" would return a set of 8 rows
+ * @return {Set} The list of indices as a Set
+ */
+ parseIndexString = function(idx_string) {
+ index_list = [];
+
+ _ref = idx_string.split(",");
+ for (_i = 0; _i < _ref.length; _i++) {
+ index_set = _ref[_i];
+ if (!/^ *([0-9]+$) *| *([0-9]+ *- *[0-9]+$) *|(^$)$/.test(index_set)) {
+ $('#select_samples_invalid').show();
+ break
+ } else {
+ $('#select_samples_invalid').hide();
+ }
+ if (index_set.indexOf('-') !== -1) {
+ start_index = parseInt(index_set.split("-")[0]);
+ end_index = parseInt(index_set.split("-")[1]);
+
+ // If start index is higher than end index (for example is the string "10-5" exists) swap values so it'll be interpreted as "5-10" instead
+ if (start_index > end_index) {
+ [start_index, end_index] = [end_index, start_index]
+ }
+
+ for (index = start_index; index <= end_index; index++) {
+ index_list.push(index);
+ }
+ } else {
+ index = parseInt(index_set);
+ index_list.push(index);
+ }
+ }
+ return new Set(index_list)
+ }
+
+ filterByIndex = function() {
+ indexString = $('#select_top').val()
+ indexSet = parseIndexString(indexString)
+
+ tableApi = $('#trait_table').DataTable();
+ checkNodes = tableApi.column(0).nodes().to$();
+ checkNodes.each(function(index) {
+ if (indexSet.has(index + 1)){
+ $(this)[0].childNodes[0].checked = true
+ }
+ })
+
+ checkRows = tableApi.rows().nodes().to$();
+ checkRows.each(function(index) {
+ if (indexSet.has(index + 1)){
+ $(this)[0].classList.add("selected");
+ }
+ })
+ }
+
+ $(window).keydown(function(event){
+ if((event.keyCode == 13)) {
+ event.preventDefault();
+ return false;
+ }
+ });
+
+ $('#select_top').keyup(function(event){
+ if (event.keyCode === 13) {
+ filterByIndex()
+ }
+ });
+
+ $('#select_top').blur(function() {
+ filterByIndex()
+ });
+
+ addToCollection = function() {
+ var traits;
+ table_api = $('#trait_table').DataTable();
+ check_nodes = table_api.column(0).nodes().to$();
+ traits = Array.from(check_nodes.map(function() {
+ if ($(this)[0].childNodes[0].checked){
+ return $(this)[0].childNodes[0].value
+ }
+ }))
+
+ var traits_hash = md5(traits.toString());
+
+ $.ajax({
+ type: "POST",
+ url: "/collections/store_trait_list",
+ data: {
+ hash: traits_hash,
+ traits: traits.toString()
+ }
+ });
+
+ return $.colorbox({
+ href: "/collections/add",
+ data: {
+ "traits": traits.toString(),
+ "hash": traits_hash
+ }
+ });
+
+ };
+
+ submitBnw = function() {
+ trait_data = submitTraits("trait_table", "submit_bnw")
+ }
+
+ exportTraits = function() {
+ trait_data = submitTraits("trait_table", "export_traits_csv")
+ };
+
+ exportCollection = function() {
+ trait_data = submitTraits("trait_table", "export_collection")
+ }
+
+ fetchTraits = function(table_name){
+ trait_table = $('#'+table_name);
+ table_dict = {};
+
+ headers = [];
+ trait_table.find('th').each(function () {
+ if ($(this).data('export')){
+ headers.push($(this).data('export'))
+ }
+ });
+ table_dict['headers'] = headers;
+
+ selected_rows = [];
+ all_rows = []; // If no rows are checked, export all
+ table_api = $('#' + table_name).DataTable();
+ check_cells = table_api.column(0).nodes().to$();
+ for (let i = 0; i < check_cells.length; i++) {
+ this_node = check_cells[i].childNodes[0];
+ all_rows.push(this_node.value)
+ if (this_node.checked){
+ selected_rows.push(this_node.value)
+ }
+ }
+
+ if (selected_rows.length > 0){
+ table_dict['rows'] = selected_rows;
+ } else {
+ table_dict['rows'] = all_rows;
+ }
+
+ json_table_dict = JSON.stringify(table_dict);
+ $('input[name=export_data]').val(json_table_dict);
+ }
+
+ submitTraits = function(table_name, destination) {
+ fetchTraits(table_name);
+ $('#export_form').attr('action', '/' + destination);
+ $('#export_form').submit();
+ };
+
+ getTraitsFromTable = function(){
+ traits = $("#trait_table input:checked").map(function() {
+ return $(this).val();
+ }).get();
+ if (traits.length == 0){
+ num_traits = $("#trait_table input").length
+ if (num_traits <= 100){
+ traits = $("#trait_table input").map(function() {
+ return $(this).val();
+ }).get();
+ }
+ }
+ return traits
+ }
+
+ $("#corr_matrix").on("click", function() {
+ traits = getTraitsFromTable()
+ $("#trait_list").val(traits)
+ $("input[name=tool_used]").val("Correlation Matrix")
+ $("input[name=form_url]").val($(this).data("url"))
+ return submit_special("/loading")
+ });
+ $("#network_graph").on("click", function() {
+ traits = getTraitsFromTable()
+ $("#trait_list").val(traits)
+ $("input[name=tool_used]").val("Network Graph")
+ $("input[name=form_url]").val($(this).data("url"))
+ return submit_special("/loading")
+ });
+ $("#wgcna_setup").on("click", function() {
+ traits = getTraitsFromTable()
+ $("#trait_list").val(traits)
+ $("input[name=tool_used]").val("WGCNA Setup")
+ $("input[name=form_url]").val($(this).data("url"))
+ return submit_special("/loading")
+ });
+ $("#ctl_setup").on("click", function() {
+ traits = getTraitsFromTable()
+ $("#trait_list").val(traits)
+ $("input[name=tool_used]").val("CTL Setup")
+ $("input[name=form_url]").val($(this).data("url"))
+ return submit_special("/loading")
+ });
+ $("#heatmap").on("click", function() {
+ traits = getTraitsFromTable()
+ $("#trait_list").val(traits)
+ $("input[name=tool_used]").val("Heatmap")
+ $("input[name=form_url]").val($(this).data("url"))
+ return submit_special("/loading")
+ });
+ $("#comp_bar_chart").on("click", function() {
+ traits = getTraitsFromTable()
+ $("#trait_list").val(traits)
+ $("input[name=tool_used]").val("Comparison Bar Chart")
+ $("input[name=form_url]").val($(this).data("url"))
+ return submit_special("/loading")
+ });
+
+ $("#send_to_webgestalt, #send_to_bnw, #send_to_geneweaver").on("click", function() {
+ traits = getTraitsFromTable()
+ $("#trait_list").val(traits)
+ url = $(this).data("url")
+ return submit_special(url)
+ });
+
+
+ $("#select_all").click(selectAll);
+ $("#deselect_all").click(deselectAll);
+ $("#invert").click(invert);
+ $("#add").click(addToCollection);
+ $("#submit_bnw").click(submitBnw);
+ $("#export_traits").click(exportTraits);
+ $("#export_collection").click(exportCollection);
+
+ let naturalAsc = $.fn.dataTableExt.oSort["natural-ci-asc"]
+ let naturalDesc = $.fn.dataTableExt.oSort["natural-ci-desc"]
+
+ let na_equivalent_vals = ["N/A", "--", ""]; //ZS: Since there are multiple values that should be treated the same as N/A
+
+ function extractInnerText(the_string){
+ var span = document.createElement('span');
+ span.innerHTML = the_string;
+ return span.textContent || span.innerText;
+ }
+
+ function sortNAs(a, b, sort_function){
+ if ( na_equivalent_vals.includes(a) && na_equivalent_vals.includes(b)) {
+ return 0;
+ }
+ if (na_equivalent_vals.includes(a)){
+ return 1
+ }
+ if (na_equivalent_vals.includes(b)) {
+ return -1;
+ }
+ return sort_function(a, b)
+ }
+
+ $.extend( $.fn.dataTableExt.oSort, {
+ "natural-minus-na-asc": function (a, b) {
+ return sortNAs(extractInnerText(a), extractInnerText(b), naturalAsc)
+ },
+ "natural-minus-na-desc": function (a, b) {
+ return sortNAs(extractInnerText(a), extractInnerText(b), naturalDesc)
+ }
+ });
+
+ $.fn.dataTable.ext.order['dom-checkbox'] = function ( settings, col )
+ {
+ return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
+ return $('input', td).prop('checked') ? '1' : '0';
+ } );
+ };
+
+ $.fn.dataTable.ext.order['dom-inner-text'] = function ( settings, col )
+ {
+ return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
+ return $(td).text();
+ } );
+ }
+
+ applyDefault = function() {
+ let default_collection_id = $.cookie('default_collection');
+ if (default_collection_id) {
+ let the_option = $('[name=existing_collection] option').filter(function() {
+ return ($(this).text().split(":")[0] == default_collection_id);
+ })
+ the_option.prop('selected', true);
+ }
+ }
+ applyDefault();
+
+});
diff --git a/gn2/wqflask/static/new/javascript/show_trait.js b/gn2/wqflask/static/new/javascript/show_trait.js
new file mode 100644
index 00000000..c5214947
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/show_trait.js
@@ -0,0 +1,1677 @@
+var statTableRows, isNumber,
+ __hasProp = {}.hasOwnProperty,
+ __slice = [].slice;
+
+isNumber = function(o) {
+ return !isNaN((o - 0) && o !== null);
+};
+
+statTableRows = [
+ {
+ vn: "n_of_samples",
+ pretty: "N of Samples",
+ digits: 0
+ }, {
+ vn: "mean",
+ pretty: "Mean",
+ digits: 3
+ }, {
+ vn: "median",
+ pretty: "Median",
+ digits: 3
+ }, {
+ vn: "std_error",
+ pretty: "Standard Error (SE)",
+ digits: 3
+ }, {
+ vn: "std_dev",
+ pretty: "Standard Deviation (SD)",
+ digits: 3
+ }, {
+ vn: "min",
+ pretty: "Minimum",
+ digits: 3
+ }, {
+ vn: "max",
+ pretty: "Maximum",
+ digits: 3
+ }
+]
+
+if (js_data.dataset_type == "ProbeSet"){
+ if (js_data.data_scale == "linear_positive" || js_data.data_scale == "log2") {
+ statTableRows.push({
+ vn: "range",
+ pretty: "Range (log2)",
+ digits: 3
+ })
+ } else {
+ statTableRows.push({
+ vn: "range",
+ pretty: "Range",
+ digits: 3
+ })
+ }
+} else {
+ statTableRows.push({
+ vn: "range",
+ pretty: "Range",
+ digits: 3
+ })
+}
+
+statTableRows.push(
+ {
+ vn: "range_fold",
+ pretty: "Range (fold)",
+ digits: 3
+ }, {
+ vn: "interquartile",
+ pretty: "<font color='black'>Interquartile Range</font>",
+ url: "http://www.genenetwork.org/glossary.html#Interquartile",
+ digits: 3
+ }, {
+ vn: "skewness",
+ pretty: "Skewness",
+ url: "https://en.wikipedia.org/wiki/Skewness",
+ digits: 3
+ }, {
+ vn: "kurtosis",
+ pretty: "Excess Kurtosis",
+ url: "https://en.wikipedia.org/wiki/Kurtosis",
+ digits: 3
+ }
+);
+
+toggleDescription = function() {
+ if ($('.truncDesc').is(':visible')) {
+ $('.truncDesc').hide();
+ $('.fullDesc').show();
+ } else {
+ $('.truncDesc').show();
+ $('.fullDesc').hide();
+ }
+}
+
+add = function() {
+ var trait;
+ trait = $("input[name=trait_hmac]").val();
+ return $.colorbox({
+ href: "/collections/add",
+ data: {
+ "traits": trait
+ }
+ });
+};
+$('#add_to_collection').click(add);
+
+sampleLists = js_data.sample_lists;
+sampleGroupTypes = js_data.sample_group_types;
+
+$(".select_covariates").click(function () {
+ openCovariateSelection();
+});
+
+$(".remove_covariates").click(function () {
+ $(".selected-covariates option:selected").each(function() {
+ this_val = $(this).val();
+ $(".selected-covariates option").each(function(){
+ if ($(this).val() == this_val){
+ $(this).remove();
+ }
+ })
+ cofactor_count = $(".selected-covariates:first option").length
+ if (cofactor_count > 2 && cofactor_count < 11){
+ $(".selected-covariates").each(function() {
+ $(this).attr("size", $(".selected-covariates:first option").length)
+ });
+ } else if (cofactor_count > 10) {
+ $(".selected-covariates").each(function() {
+ $(this).attr("size", 10)
+ });
+ } else {
+ $(".selected-covariates").each(function() {
+ $(this).attr("size", 2)
+ });
+ }
+ if (cofactor_count == 0){
+ $(".selected-covariates").each(function() {
+ $(this).append($("<option/>", {
+ value: "",
+ text: "No covariates selected"
+ }))
+ })
+ }
+ });
+
+ covariates_list = [];
+ $(".selected-covariates:first option").each(function() {
+ covariates_list.push($(this).val());
+ })
+ $("input[name=covariates]").val(covariates_list.join(","))
+});
+
+$(".remove_all_covariates").click(function() {
+ $(".selected-covariates option").each(function() {
+ $(this).remove();
+ });
+ $(".selected-covariates").attr("size", 2)
+ $("input[name=covariates]").val("");
+})
+
+openTraitSelection = function() {
+ return $('#collections_holder').load('/collections/list?color_by_trait #collections_list', (function(_this) {
+ return function() {
+ $.colorbox({
+ inline: true,
+ href: "#collections_holder",
+ onComplete: function(){
+ $.getScript("/static/new/javascript/get_traits_from_collection.js");
+ }
+ });
+ return $('a.collection_name').attr('onClick', 'return false');
+ };
+ })(this));
+};
+openCovariateSelection = function() {
+ return $('#collections_holder').load('/collections/list #collections_list', (function(_this) {
+ return function() {
+ $.colorbox({
+ inline: true,
+ href: "#collections_holder",
+ width: "1000px",
+ height: "700px",
+ onComplete: function(){
+ $.getScript("/static/new/javascript/get_covariates_from_collection.js");
+ }
+ });
+ return $('a.collection_name').attr('onClick', 'return false');
+ };
+ })(this));
+};
+hideTabs = function(start) {
+ var x, _i, _results;
+ _results = [];
+ for (x = _i = start; start <= 10 ? _i <= 10 : _i >= 10; x = start <= 10 ? ++_i : --_i) {
+ _results.push($("#stats_tabs" + x).hide());
+ }
+ return _results;
+};
+statsMdpChange = function() {
+ var selected;
+ selected = $(this).val();
+ hideTabs(0);
+ return $("#stats_tabs" + selected).show();
+};
+changeStatsValue = function(sample_sets, category, value_type, decimal_places, effects) {
+ var current_value, id, in_box, the_value, title_value;
+ id = "#" + processId(category, value_type);
+ in_box = $(id).html;
+ current_value = parseFloat($(in_box)).toFixed(decimal_places);
+ the_value = sample_sets[category][value_type]();
+ if (decimal_places > 0) {
+ title_value = the_value.toFixed(decimal_places * 2);
+ the_value = the_value.toFixed(decimal_places);
+ } else {
+ title_value = null;
+ }
+ if (the_value !== current_value) {
+ if (effects) {
+ $(id).html(the_value).effect("highlight");
+ } else {
+ $(id).html(the_value);
+ }
+ }
+ if (title_value) {
+ return $(id).attr('title', title_value);
+ }
+};
+updateStatValues = function(sample_sets) {
+ var category, row, show_effects, _i, _len, _ref, _results;
+ show_effects = $(".tab-pane.active").attr("id") === "stats_tab";
+ _ref = ['samples_primary', 'samples_other', 'samples_all'];
+ _results = [];
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ category = _ref[_i];
+ _results.push((function() {
+ var _j, _len1, _results1;
+ _results1 = [];
+ for (_j = 0, _len1 = statTableRows.length; _j < _len1; _j++) {
+ row = statTableRows[_j];
+ _results1.push(changeStatsValue(sample_sets, category, row.vn, row.digits, show_effects));
+ }
+ return _results1;
+ })());
+ }
+ return _results;
+};
+
+updateHistogram_width = function() {
+ num_bins = $('#histogram').find('g.trace.bars').find('g.point').length
+
+ if (num_bins < 10) {
+ width_update = {
+ width: 400
+ }
+
+ Plotly.relayout('histogram', width_update)
+ }
+}
+
+updateHistogram = function() {
+ var x;
+ var _i, _len, _ref, data;
+ _ref = _.values(root.selected_samples[root.stats_group]);
+ var trait_vals = [];
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ x = _ref[_i];
+ trait_vals.push(x.value);
+ }
+ root.histogram_data[0]['x'] = trait_vals
+
+ if ($('input[name="transform"]').val() != ""){
+ root.histogram_layout['xaxis']['title'] = "<b>" + js_data.unit_type + " (" + $('input[name="transform"]').val() + ")</b>"
+ } else {
+ root.histogram_layout['xaxis']['title'] = "<b>" + js_data.unit_type + "</b>"
+ }
+
+ Plotly.newPlot('histogram', root.histogram_data, root.histogram_layout, root.modebar_options);
+ updateHistogram_width()
+};
+
+updateBarChart = function() {
+ var x;
+ var _i, _len, _ref, data;
+ _ref = _.values(root.selected_samples[root.stats_group]);
+ names_and_values = []
+ for (i = 0; i < _ref.length; i++){
+ _ref[i]["name"] = Object.keys(root.selected_samples[root.stats_group])[i]
+ }
+ trait_vals = [];
+ trait_vars = [];
+ trait_samples = [];
+
+ function sortFunction(a, b) {
+ if (a.value === b.value) {
+ return 0;
+ }
+ else {
+ return (a.value < b.value) ? -1 : 1;
+ }
+ }
+
+ if (root.bar_sort == "value") {
+ _ref.sort(sortFunction)
+ }
+
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ x = _ref[_i];
+ trait_samples.push(x.name)
+ trait_vals.push(x.value);
+ if (x["variance"] != undefined) {
+ trait_vars.push(x.variance);
+ } else{
+ trait_vars.push(null)
+ }
+ }
+
+ new_chart_range = getBarRange(trait_vals, trait_vars)
+
+ root.bar_layout['yaxis']['range'] = new_chart_range
+
+ if ($('input[name="transform"]').val() != ""){
+ root.bar_layout['yaxis']['title'] = "<b>" + js_data.unit_type + " (" + $('input[name="transform"]').val() + ")</b>"
+ } else {
+ root.bar_layout['yaxis']['title'] = "<b>" + js_data.unit_type + "</b>"
+ }
+
+ root.bar_data[0]['y'] = trait_vals
+ root.bar_data[0]['error_y'] = {
+ type: 'data',
+ array: trait_vars,
+ visible: root.errors_exist
+ }
+ root.bar_data[0]['x'] = trait_samples
+
+ if (trait_vals.length < 256) {
+ Plotly.newPlot('bar_chart', root.bar_data, root.bar_layout, root.modebar_options);
+ }
+};
+
+updateViolinPlot = function() {
+ var y_value_list = []
+ if (sampleLists.length > 1) {
+ i = 0;
+ for (var sample_group in root.selected_samples){
+ var trait_sample_data = _.values(root.selected_samples[sample_group])
+ var trait_vals = [];
+ for (j = 0, len = trait_sample_data.length; j < len; j++) {
+ this_sample_data = trait_sample_data[j];
+ trait_vals.push(this_sample_data.value);
+ }
+ root.violin_data[i]['y'] = trait_vals
+ i++;
+ }
+ } else {
+ var trait_sample_data = _.values(root.selected_samples['samples_all'])
+ var trait_vals = [];
+ for (j = 0, len = trait_sample_data.length; j < len; j++) {
+ this_sample_data = trait_sample_data[j];
+ trait_vals.push(this_sample_data.value);
+ }
+ root.violin_data[0]['y'] = trait_vals
+ }
+
+ if ($('input[name="transform"]').val() != ""){
+ root.violin_layout['yaxis']['title'] = "<b>" + js_data.unit_type + " (" + $('input[name="transform"]').val() + ")</b>"
+ } else {
+ root.violin_layout['yaxis']['title'] = "<b>" + js_data.unit_type + "</b>"
+ }
+
+ Plotly.newPlot('violin_plot', root.violin_data, root.violin_layout, root.modebar_options)
+}
+
+
+updateProbPlot = function() {
+ return root.redraw_prob_plot_impl(root.selected_samples, root.prob_plot_group);
+};
+
+makeTable = function() {
+ var header, key, row, row_line, table, the_id, the_rows, value, _i, _len, _ref, _ref1;
+ if (js_data.trait_symbol != null) {
+ header = "<thead><tr><th style=\"color: white; background-color: #369; text-align: center;\" colspan=\"100%\">Trait " + js_data.trait_id + " - " + js_data.trait_symbol + "</th></tr><tr><th style=\"text-align: right; padding-left: 5px;\">Statistic</th>";
+ } else if (js_data.dataset_type == "Geno"){
+ header = "<thead><tr><th style=\"color: white; background-color: #369; text-align: center;\" colspan=\"100%\">Marker " + js_data.trait_id + "</th></tr><tr><th style=\"text-align: right; padding-left: 5px;\">Statistic</th>";
+ } else {
+ header = "<thead><tr><th style=\"color: white; background-color: #369; text-align: center;\" colspan=\"100%\">Trait " + js_data.trait_id + ": " + js_data.short_description + "</th></tr><tr><th style=\"text-align: right; padding-left: 5px;\">Statistic</th>";
+ }
+ _ref = js_data.sample_group_types;
+ for (key in _ref) {
+ if (!__hasProp.call(_ref, key)) continue;
+ value = _ref[key];
+ the_id = processId("column", key);
+ if (Object.keys(_ref).length > 1) {
+ header += "<th id=\"" + the_id + "\" style=\"text-align: right; padding-left: 5px;\">" + value + "</th>";
+ } else {
+ header += "<th id=\"" + the_id + "\" style=\"text-align: right; padding-left: 5px;\">Value</th>";
+ }
+ }
+
+ header += "</thead>";
+ the_rows = "<tbody>";
+ for (_i = 0, _len = statTableRows.length; _i < _len; _i++) {
+ row = statTableRows[_i];
+ if ((row.vn == "range_fold") && js_data.dataset_type == "Publish"){
+ continue;
+ }
+ row_line = "<tr>";
+ if (row.url != null) {
+ row_line += "<td id=\"" + row.vn + "\" align=\"right\"><a href=\"" + row.url + "\" style=\"color: #0000EE;\">" + row.pretty + "</a></td>";
+ } else {
+ row_line += "<td id=\"" + row.vn + "\" align=\"right\">" + row.pretty + "</td>";
+ }
+ _ref1 = js_data.sample_group_types;
+ for (key in _ref1) {
+ if (!__hasProp.call(_ref1, key)) continue;
+ value = _ref1[key];
+ the_id = processId(key, row.vn);
+ row_line += "<td id=\"" + the_id + "\" align=\"right\">N/A</td>";
+ }
+ row_line += "</tr>";
+ the_rows += row_line;
+ }
+ the_rows += "</tbody>";
+ table = header + the_rows;
+ return $("#stats_table").append(table);
+};
+processId = function() {
+ var processed, value, values, _i, _len;
+ values = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
+
+ /* Make an id or a class valid javascript by, for example, eliminating spaces */
+ processed = "";
+ for (_i = 0, _len = values.length; _i < _len; _i++) {
+ value = values[_i];
+ value = value.replace(" ", "_");
+ if (processed.length) {
+ processed += "-";
+ }
+ processed += value;
+ }
+ return processed;
+};
+
+fetchSampleValues = function() {
+ // This is meant to fetch all sample values using DataTables API, since they can't all be submitted with the form when using Scroller (and this should also be faster)
+ sample_val_dict = {};
+
+ table = 'samples_primary';
+ if ($('#' + table).length){
+ tableApi = $('#' + table).DataTable();
+ val_nodes = tableApi.column(3).nodes().to$();
+ for (_j = 0; _j < val_nodes.length; _j++){
+ sample_name = val_nodes[_j].childNodes[0].name.split(":")[1]
+ sample_val = val_nodes[_j].childNodes[0].value
+ sample_val_dict[sample_name] = sample_val
+ }
+ }
+
+ return sample_val_dict;
+}
+
+editDataChange = function() {
+ var already_seen, sample_sets, table, tables, _i, _j, _len;
+ already_seen = {};
+ sample_sets = {
+ samples_primary: new Stats([]),
+ samples_other: new Stats([]),
+ samples_all: new Stats([])
+ };
+ root.selected_samples = {
+ samples_primary: {},
+ samples_other: {},
+ samples_all: {}
+ };
+
+ tables = ['samples_primary', 'samples_other'];
+ for (_i = 0, _len = tables.length; _i < _len; _i++) {
+ table = tables[_i];
+ if ($('#' + table).length){
+ tableApi = $('#' + table).DataTable();
+ sample_vals = [];
+ name_nodes = tableApi.column(2).nodes().to$();
+ val_nodes = tableApi.column(3).nodes().to$();
+ var_nodes = tableApi.column(5).nodes().to$();
+ for (_j = 0; _j < val_nodes.length; _j++){
+ sample_val = val_nodes[_j].childNodes[0].value
+ sample_name = $.trim(name_nodes[_j].childNodes[0].textContent)
+ if (isNumber(sample_val) && sample_val !== "") {
+ sample_val = parseFloat(sample_val);
+ sample_sets[table].add_value(sample_val);
+ try {
+ sample_var = var_nodes[_j].childNodes[0].value
+ if (isNumber(sample_var)) {
+ sample_var = parseFloat(sample_var)
+ } else {
+ sample_var = null;
+ }
+ } catch {
+ sample_var = null;
+ }
+ sample_dict = {
+ value: sample_val,
+ variance: sample_var
+ }
+ root.selected_samples[table][sample_name] = sample_dict;
+ if (!(sample_name in already_seen)) {
+ sample_sets['samples_all'].add_value(sample_val);
+ root.selected_samples['samples_all'][sample_name] = sample_dict;
+ already_seen[sample_name] = true;
+ }
+ }
+ }
+ }
+
+ }
+
+ updateStatValues(sample_sets);
+
+ if ($('#histogram').hasClass('js-plotly-plot')){
+ updateHistogram();
+ }
+ if ($('#bar_chart').hasClass('js-plotly-plot')){
+ updateBarChart();
+ }
+ if ($('#violin_plot').hasClass('js-plotly-plot')){
+ updateViolinPlot();
+ }
+ if ($('#prob_plot_div').hasClass('js-plotly-plot')){
+ return updateProbPlot();
+ }
+};
+
+showHideOutliers = function() {
+ var label;
+ label = $('#showHideOutliers').val();
+ if (label === "Hide Outliers") {
+ return $('#showHideOutliers').val("Show Outliers");
+ } else if (label === "Show Outliers") {
+ $('#showHideOutliers').val("Hide Outliers");
+ return console.log("Should be now Hide Outliers");
+ }
+};
+
+onCorrMethodChange = function() {
+ var corr_method;
+ corr_method = $('select[name=corr_type]').val();
+ $('.correlation_desc').hide();
+ $('#' + corr_method + "_r_desc").show().effect("highlight");
+ if (corr_method === "lit") {
+ return $("#corr_sample_method").hide();
+ } else {
+ return $("#corr_sample_method").show();
+ }
+};
+$('select[name=corr_type]').change(onCorrMethodChange);
+
+on_dataset_change = function() {
+ let dataset_type = $('select[name=corr_dataset] option:selected').data('type');
+ let location_type = $('select[name=location_type] option:selected').val();
+
+ if (dataset_type == "mrna_assay"){
+ $('#min_expr_filter').show();
+ $('select[name=location_type] option:disabled').prop('disabled', false)
+ }
+ else if (dataset_type == "pheno"){
+ $('#min_expr_filter').show();
+ $('select[name=location_type]>option:eq(0)').prop('disabled', true).attr('selected', false);
+ $('select[name=location_type]>option:eq(1)').prop('disabled', false).attr('selected', true);
+ }
+ else {
+ $('#min_expr_filter').hide();
+ $('select[name=location_type]>option:eq(0)').prop('disabled', false).attr('selected', true);
+ $('select[name=location_type]>option:eq(1)').prop('disabled', true).attr('selected', false);
+ }
+}
+
+$('select[name=corr_dataset]').change(on_dataset_change);
+$('select[name=location_type]').change(on_dataset_change);
+
+submit_special = function(url) {
+ $("input[name=sample_vals]").val(JSON.stringify(fetchSampleValues()))
+ $("#trait_data_form").attr("action", url);
+
+ $("#trait_data_form").submit();
+};
+
+var corrInputList = ['sample_vals', 'corr_type', 'primary_samples', 'trait_id', 'dataset', 'group', 'tool_used', 'form_url', 'corr_sample_method', 'corr_samples_group', 'corr_dataset', 'min_expr',
+ 'corr_return_results', 'location_type', 'loc_chr', 'min_loc_mb', 'max_loc_mb', 'p_range_lower', 'p_range_upper',"use_cache"]
+
+$(".test_corr_compute").on("click", (function(_this) {
+ return function() {
+ $('input[name=tool_used]').val("Correlation");
+ $('input[name=form_url]').val("/test_corr_compute");
+ $('input[name=wanted_inputs]').val(corrInputList.join(","));
+
+
+ url = "/loading";
+ return submit_special(url);
+ };
+})(this));
+
+$(".corr_compute").on("click", (function(_this) {
+
+ return function() {
+
+
+ $('input[name=tool_used]').val("Correlation");
+ $('input[name=form_url]').val("/corr_compute");
+ $('input[name=wanted_inputs]').val(corrInputList.join(","));
+
+
+ $('input[name=use_cache]').val($('#use_cache').is(":checked") ? "true": "false");
+
+ url = "/loading";
+ return submit_special(url);
+ };
+})(this));
+
+createValueDropdown = function(value) {
+ return "<option val=" + value + ">" + value + "</option>";
+};
+
+populateSampleAttributesValuesDropdown = function() {
+ var attribute_info, key, sample_attributes, selected_attribute, value, _i, _len, _ref, _ref1, _results;
+ $('#attribute_values').empty();
+ sample_attributes = [];
+
+ var attributesAsList = Object.keys(js_data.attributes).map(function(key) {
+ return [key, js_data.attributes[key].id];
+ });
+
+ attributesAsList.sort(function(first, second) {
+ if (second[1] > first[1]){
+ return -1
+ }
+ if (first[1] > second[1]){
+ return 1
+ }
+ return 0
+ });
+
+ for (i=0; i < attributesAsList.length; i++) {
+ attribute_info = js_data.attributes[attributesAsList[i][1]]
+ sample_attributes.push(attribute_info.distinct_values);
+ }
+
+ selected_attribute = $('#exclude_column').val()
+ _ref1 = sample_attributes[selected_attribute - 1];
+ _results = [];
+ for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
+ value = _ref1[_i];
+ if (value != ""){
+ _results.push($(createValueDropdown(value)).appendTo($('#attribute_values')));
+ }
+ }
+ return _results;
+};
+
+if (js_data.categorical_attr_exists == "true"){
+ populateSampleAttributesValuesDropdown();
+}
+
+$('#exclude_column').change(populateSampleAttributesValuesDropdown);
+blockByAttributeValue = function() {
+ var attribute_name, cell_class, exclude_by_value;
+
+ let exclude_group = $('#exclude_by_attr_group').val();
+ let exclude_column = $('#exclude_column').val();
+
+ if (exclude_group === "other") {
+ var tableApi = $('#samples_other').DataTable();
+ } else {
+ var tableApi = $('#samples_primary').DataTable();
+ }
+
+ exclude_by_value = $('#attribute_values').val();
+
+ let val_nodes = tableApi.column(3).nodes().to$();
+ let exclude_val_nodes = tableApi.column(attributeStartPos + parseInt(exclude_column)).nodes().to$();
+
+ for (i = 0; i < exclude_val_nodes.length; i++) {
+ if (exclude_val_nodes[i].hasChildNodes()) {
+ let this_col_value = exclude_val_nodes[i].childNodes[0].data;
+ let this_val_node = val_nodes[i].childNodes[0];
+
+ if (this_col_value == exclude_by_value){
+ this_val_node.value = "x";
+ }
+ }
+ }
+
+ editDataChange();
+};
+$('#exclude_by_attr').click(blockByAttributeValue);
+
+blockByIndex = function() {
+ var end_index, error, index, index_list, index_set, index_string, start_index, _i, _j, _k, _len, _len1, _ref;
+ index_string = $('#remove_samples_field').val();
+ index_list = [];
+ _ref = index_string.split(",");
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ index_set = _ref[_i];
+ if (index_set.indexOf('-') !== -1) {
+ try {
+ start_index = parseInt(index_set.split("-")[0]);
+ end_index = parseInt(index_set.split("-")[1]);
+ for (index = _j = start_index; start_index <= end_index ? _j <= end_index : _j >= end_index; index = start_index <= end_index ? ++_j : --_j) {
+ index_list.push(index);
+ }
+ } catch (_error) {
+ error = _error;
+ alert("Syntax error");
+ }
+ } else {
+ index = parseInt(index_set);
+ index_list.push(index);
+ }
+ }
+
+ let block_group = $('#block_group').val();
+ if (block_group === "other") {
+ tableApi = $('#samples_other').DataTable();
+ } else {
+ tableApi = $('#samples_primary').DataTable();
+ }
+ val_nodes = tableApi.column(3).nodes().to$();
+ for (_k = 0, _len1 = index_list.length; _k < _len1; _k++) {
+ index = index_list[_k];
+ val_nodes[index - 1].childNodes[0].value = "x";
+ }
+};
+
+filter_by_study = function() {
+ let this_study = $('#filter_study').val();
+
+ let study_sample_data = JSON.parse($('input[name=study_samplelists]').val())
+ let filter_samples = study_sample_data[parseInt(this_study)]['samples']
+
+ if ($('#filter_study_group').length){
+ let block_group = $('#filter_study_group').val();
+ if (block_group === "other") {
+ tableApi = $('#samples_other').DataTable();
+ } else {
+ tableApi = $('#samples_primary').DataTable();
+ }
+ }
+
+ let sample_nodes = tableApi.column(2).nodes().to$();
+ let val_nodes = tableApi.column(3).nodes().to$();
+ for (i = 0; i < sample_nodes.length; i++) {
+ this_sample = sample_nodes[i].childNodes[0].innerText;
+ if (!filter_samples.includes(this_sample)){
+ val_nodes[i].childNodes[0].value = "x";
+ }
+ }
+}
+
+filter_by_value = function() {
+ let filter_logic = $('#filter_logic').val();
+ let filter_column = $('#filter_column').val();
+ let filter_value = $('#filter_value').val();
+ let block_group = $('#filter_group').val();
+
+ if (block_group === "other") {
+ var tableApi = $('#samples_other').DataTable();
+ } else {
+ var tableApi = $('#samples_primary').DataTable();
+ }
+
+ let val_nodes = tableApi.column(3).nodes().to$();
+ if (filter_column == "value"){
+ var filter_val_nodes = tableApi.column(3).nodes().to$();
+ }
+ else if (filter_column == "stderr"){
+ var filter_val_nodes = tableApi.column(5).nodes().to$();
+ }
+ else if (!isNaN(filter_column)){
+ var filter_val_nodes = tableApi.column(attributeStartPos + parseInt(filter_column)).nodes().to$();
+ }
+ else {
+ return false
+ }
+
+ for (i = 0; i < filter_val_nodes.length; i++) {
+ if (filter_column == "value" || filter_column == "stderr"){
+ var this_col_value = filter_val_nodes[i].childNodes[0].value;
+ } else {
+ if (filter_val_nodes[i].childNodes[0] !== undefined){
+ var this_col_value = filter_val_nodes[i].innerText;
+ } else {
+ continue
+ }
+ }
+ let this_val_node = val_nodes[i].childNodes[0];
+
+ if(!isNaN(this_col_value) && !isNaN(filter_value)) {
+ if (filter_logic == "greater_than"){
+ if (parseFloat(this_col_value) <= parseFloat(filter_value)){
+ this_val_node.value = "x";
+ }
+ }
+ else if (filter_logic == "less_than"){
+ if (parseFloat(this_col_value) >= parseFloat(filter_value)){
+ this_val_node.value = "x";
+ }
+ }
+ else if (filter_logic == "greater_or_equal"){
+ if (parseFloat(this_col_value) < parseFloat(filter_value)){
+ this_val_node.value = "x";
+ }
+ }
+ else if (filter_logic == "less_or_equal"){
+ if (parseFloat(this_col_value) > parseFloat(filter_value)){
+ this_val_node.value = "x";
+ }
+ }
+ }
+ }
+};
+
+hideNoValue_filter = function( settings, data, dataIndex ) {
+ this_value = tableApi.column(3).nodes().to$()[dataIndex].childNodes[0].value;
+ if (this_value == "x"){
+ return false
+ } else {
+ return true
+ }
+}
+
+hideNoValue = function() {
+ tables = ['samples_primary', 'samples_other'];
+ filter_active = $(this).data("active");
+ for (_i = 0, _len = tables.length; _i < _len; _i++) {
+ table = tables[_i];
+ if ($('#' + table).length) {
+ tableApi = $('#' + table).DataTable();
+ if (filter_active == "true"){
+ $(this).val("Hide No Value")
+ tableApi.draw();
+ $(this).data("active", "false");
+ } else {
+ $(this).val("Show No Value")
+ $.fn.dataTable.ext.search.push(hideNoValue_filter);
+ tableApi.search();
+ tableApi.draw();
+ $.fn.dataTable.ext.search.splice($.fn.dataTable.ext.search.indexOf(hideNoValue_filter, 1));
+ $(this).data("active", "true");
+ }
+ }
+ }
+};
+$('#hideNoValue').click(hideNoValue);
+
+blockOutliers = function() {
+ return $('.outlier').each((function(_this) {
+ return function(_index, element) {
+ return $(element).find('.trait-value-input').val('x');
+ };
+ })(this));
+};
+$('#blockOutliers').click(blockOutliers);
+
+resetSamplesTable = function() {
+ $('input[name="transform"]').val("");
+ $('span[name="transform_text"]').text("")
+ $('#hideNoValue').val("Hide No Value")
+ tables = ['samples_primary', 'samples_other'];
+ for (_i = 0, _len = tables.length; _i < _len; _i++) {
+ table = tables[_i];
+ if ($('#' + table).length) {
+ tableApi = $('#' + table).DataTable();
+ val_nodes = tableApi.column(3).nodes().to$();
+ for (i = 0; i < val_nodes.length; i++) {
+ this_node = val_nodes[i].childNodes[0];
+ this_node.value = this_node.attributes["data-value"].value;
+ }
+ if (js_data.se_exists){
+ se_nodes = tableApi.column(5).nodes().to$();
+ for (i = 0; i < val_nodes.length; i++) {
+ this_node = val_nodes[i].childNodes[0];
+ this_node.value = this_node.attributes["data-value"].value;
+ }
+ }
+ tableApi.draw();
+ }
+ }
+};
+$('.reset').click(function() {
+ $('.selected').each(function() {
+ $(this).removeClass('selected');
+ $(this).find('.edit_sample_checkbox').prop("checked", false);
+ })
+ resetSamplesTable();
+ $('input[name="transform"]').val("");
+ editDataChange();
+});
+
+checkForZeroToOneVals = function() {
+ tables = ['samples_primary', 'samples_other'];
+ for (_i = 0, _len = tables.length; _i < _len; _i++) {
+ table = tables[_i];
+ if ($('#' + table).length) {
+ tableApi = $('#' + table).DataTable();
+ val_nodes = tableApi.column(3).nodes().to$();
+ for (i = 0; i < val_nodes.length; i++) {
+ this_node = val_nodes[i].childNodes[0];
+ if(!isNaN(this_node.value)) {
+ if (0 <= this_node.value && this_node.value < 1){
+ return true
+ }
+ }
+ }
+ }
+ }
+ return false
+}
+
+log2Data = function(this_node) {
+ current_value = this_node.value;
+ original_value = this_node.attributes['data-value'].value;
+ if(!isNaN(current_value) && !isNaN(original_value)) {
+ if (zeroToOneValsExist){
+ original_value = parseFloat(original_value) + 1;
+ }
+ this_node.value = Math.log2(original_value).toFixed(3);
+ }
+};
+
+log10Data = function() {
+ current_value = this_node.value;
+ original_value = this_node.attributes['data-value'].value;
+ if(!isNaN(current_value) && !isNaN(original_value)) {
+ if (zeroToOneValsExist){
+ original_value = parseFloat(original_value) + 1;
+ }
+ this_node.value = Math.log10(original_value).toFixed(3);
+ }
+};
+
+sqrtData = function() {
+ current_value = this_node.value;
+ original_value = this_node.attributes['data-value'].value;
+ if(!isNaN(current_value) && !isNaN(original_value)) {
+ if (zeroToOneValsExist){
+ original_value = parseFloat(original_value) + 1;
+ }
+ this_node.value = Math.sqrt(original_value).toFixed(3);
+ }
+};
+
+invertData = function() {
+ current_value = this_node.value;
+ if(!isNaN(current_value)) {
+ this_node.value = parseFloat(-(current_value)).toFixed(3);
+ }
+};
+
+qnormData = function() {
+ current_value = this_node.value;
+ qnorm_value = this_node.attributes['data-qnorm'].value;
+ if(!isNaN(current_value)) {
+ this_node.value = qnorm_value;
+ }
+};
+
+zScoreData = function() {
+ current_value = this_node.value;
+ zscore_value = this_node.attributes['data-zscore'].value;
+ if(!isNaN(current_value)) {
+ this_node.value = zscore_value;
+ }
+};
+
+doTransform = function(transform_type) {
+ tables = ['samples_primary', 'samples_other'];
+ for (_i = 0, _len = tables.length; _i < _len; _i++) {
+ table = tables[_i];
+ if ($('#' + table).length) {
+ tableApi = $('#' + table).DataTable();
+ val_nodes = tableApi.column(3).nodes().to$();
+ for (i = 0; i < val_nodes.length; i++) {
+ this_node = val_nodes[i].childNodes[0]
+ if (transform_type == "log2"){
+ log2Data(this_node)
+ }
+ if (transform_type == "log10"){
+ log10Data(this_node)
+ }
+ if (transform_type == "sqrt"){
+ sqrtData(this_node)
+ }
+ if (transform_type == "invert"){
+ invertData(this_node)
+ }
+ if (transform_type == "qnorm"){
+ qnormData(this_node)
+ }
+ if (transform_type == "zscore"){
+ zScoreData(this_node)
+ }
+ }
+ }
+ }
+}
+
+normalizeData = function() {
+ if ($('#norm_method option:selected').val() == 'log2' || $('#norm_method option:selected').val() == 'log10'){
+ if ($('input[name="transform"]').val() != "log2" && $('#norm_method option:selected').val() == 'log2') {
+ doTransform("log2")
+ $('input[name="transform"]').val("log2")
+ $('span[name="transform_text"]').text(" - log2 Transformed")
+ } else {
+ if ($('input[name="transform"]').val() != "log10" && $('#norm_method option:selected').val() == 'log10'){
+ doTransform("log10")
+ $('input[name="transform"]').val("log10")
+ $('span[name="transform_text"]').text(" - log10 Transformed")
+ }
+ }
+ }
+ else if ($('#norm_method option:selected').val() == 'sqrt'){
+ if ($('input[name="transform"]').val() != "sqrt") {
+ doTransform("sqrt")
+ $('input[name="transform"]').val("sqrt")
+ $('span[name="transform_text"]').text(" - Square Root Transformed")
+ }
+ }
+ else if ($('#norm_method option:selected').val() == 'invert'){
+ doTransform("invert")
+ $('input[name="transform"]').val("inverted")
+ if ($('span[name="transform_text"]:eq(0)').text() != ""){
+ current_text = $('span[name="transform_text"]:eq(0)').text();
+ $('span[name="transform_text"]').text(current_text + " and Inverted");
+ } else {
+ $('span[name="transform_text"]').text(" - Inverted")
+ }
+ }
+ else if ($('#norm_method option:selected').val() == 'qnorm'){
+ if ($('input[name="transform"]').val() != "qnorm") {
+ doTransform("qnorm")
+ $('input[name="transform"]').val("qnorm")
+ $('span[name="transform_text"]').text(" - Quantile Normalized")
+ }
+ }
+ else if ($('#norm_method option:selected').val() == 'zscore'){
+ if ($('input[name="transform"]').val() != "zscore") {
+ doTransform("zscore")
+ $('input[name="transform"]').val("zscore")
+ $('span[name="transform_text"]').text(" - Z-Scores")
+ }
+ }
+}
+
+zeroToOneValsExist = checkForZeroToOneVals();
+
+showTransformWarning = function() {
+ transform_type = $('#norm_method option:selected').val()
+ if (transform_type == "log2" || transform_type == "log10"){
+ if (zeroToOneValsExist){
+ $('#transform_alert').css("display", "block")
+ }
+ } else {
+ $('#transform_alert').css("display", "none")
+ }
+}
+
+$('#norm_method').change(function(){
+ showTransformWarning()
+});
+$('#normalize').hover(function(){
+ showTransformWarning()
+});
+
+$('#normalize').click(normalizeData)
+
+switchQNormData = function() {
+ return $('.trait-value-input').each((function(_this) {
+ return function(_index, element) {
+ transform_val = $(element).data('transform')
+ if (transform_val != "") {
+ $(element).val(transform_val.toFixed(3));
+ }
+ return transform_val
+ };
+ })(this));
+};
+$('#qnorm').click(switchQNormData);
+
+getSampleTableData = function(tableName, attributesAsList, includeNAs=false) {
+ var samples = [];
+
+ if ($('#' + tableName).length){
+ tableApi = $('#' + tableName).DataTable();
+ attrCol = 4
+
+ nameNodes = tableApi.column(2).nodes().to$();
+ valNodes = tableApi.column(3).nodes().to$();
+ if (js_data.se_exists){
+ varNodes = tableApi.column(5).nodes().to$();
+ attrCol = 6
+ if (js_data.has_num_cases) {
+ nNodes = tableApi.column(6).nodes().to$();
+ attrCol = 7
+ }
+ } else {
+ if (js_data.has_num_cases){
+ nNodes = tableApi.column(4).nodes().to$();
+ attrCol = 5
+ }
+ }
+
+ attributeNodes = []
+ for (_i = 0; _i < attributesAsList.length; _i++){
+ attributeNodes.push(tableApi.column(attrCol + _i).nodes().to$())
+ }
+
+ checkedRows = getCheckedRows(tableName)
+
+ for (_j = 0; _j < valNodes.length; _j++){
+ if (!checkedRows.includes(_j) && checkedRows.length > 0) {
+ continue
+ }
+ sampleVal = valNodes[_j].childNodes[0].value
+ sampleName = $.trim(nameNodes[_j].childNodes[0].textContent)
+ if (isNumber(sampleVal) && sampleVal !== "") {
+ sampleVal = parseFloat(sampleVal);
+ } else {
+ sampleVal = 'x'
+ }
+ if (typeof varNodes == 'undefined'){
+ sampleVar = null;
+ } else {
+ sampleVar = varNodes[_j].childNodes[0].value;
+ if (isNumber(sampleVar)) {
+ sampleVar = parseFloat(sampleVar);
+ } else {
+ sampleVar = 'x';
+ }
+ }
+ if (typeof nNodes == 'undefined'){
+ sampleN = null;
+ } else {
+ sampleN = nNodes[_j].childNodes[0].value;
+ if (isNumber(sampleN)) {
+ sampleN = parseInt(sampleN);
+ } else {
+ sampleN = 'x';
+ }
+ }
+
+ rowDict = {
+ name: sampleName,
+ value: sampleVal,
+ se: sampleVar,
+ num_cases: sampleN
+ }
+
+ for (_k = 0; _k < attributeNodes.length; _k++){
+ rowDict[attributesAsList[_k]] = attributeNodes[_k][_j].textContent;
+ }
+ if (includeNAs || sampleVal != 'x') {
+ samples.push(rowDict)
+ }
+ }
+ }
+
+ return samples;
+};
+exportSampleTableData = function() {
+ var format, json_sample_data, sample_data;
+
+ var attributesAsList = Object.keys(js_data.attributes).map(function(key) {
+ return js_data.attributes[key].name;
+ });
+
+ sample_data = {};
+ sample_data.primary_samples = getSampleTableData('samples_primary', attributesAsList, true);
+ sample_data.other_samples = getSampleTableData('samples_other', attributesAsList, true);
+ sample_data.attributes = attributesAsList;
+ json_sample_data = JSON.stringify(sample_data);
+ $('input[name=export_data]').val(json_sample_data);
+ format = $('input[name=export_format]').val();
+ if (format === "excel") {
+ $('#trait_data_form').attr('action', '/export_trait_excel');
+ } else {
+ $('#trait_data_form').attr('action', '/export_trait_csv');
+ }
+ return $('#trait_data_form').submit();
+};
+
+$('.export_format').change(function() {
+ if (this.value == "csv"){
+ $('#export_code').css("display", "block")
+ } else{
+ $('#export_code').css("display", "none")
+ }
+ $('input[name=export_format]').val( this.value );
+ $('.export_format').val( this.value );
+});
+
+$('.export').click(exportSampleTableData);
+$('#blockOutliers').click(blockOutliers);
+_.mixin(_.str.exports());
+
+getSampleVals = function(sample_list) {
+ var sample;
+ return this.sample_vals = (function() {
+ var i, len, results;
+ results = [];
+ for (i = 0, len = sample_list.length; i < len; i++) {
+ sample = sample_list[i];
+ if (sample.value !== null) {
+ results.push(sample.value);
+ }
+ }
+ return results;
+ })();
+};
+
+getSampleErrors = function(sample_list) {
+ var sample;
+ return this.sample_vals = (function() {
+ var i, len, results;
+ variance_exists = false;
+ results = [];
+ for (i = 0, len = sample_list.length; i < len; i++) {
+ sample = sample_list[i];
+ if (sample.variance !== null) {
+ results.push(sample.variance);
+ variance_exists = true;
+ }
+ }
+ return [results, variance_exists];
+ })();
+};
+
+getSampleNames = function(sample_list) {
+ var sample;
+ return this.sampleNames = (function() {
+ var i, len, results;
+ results = [];
+ for (i = 0, len = sample_list.length; i < len; i++) {
+ sample = sample_list[i];
+ if (sample.value !== null) {
+ results.push(sample.name);
+ }
+ }
+ return results;
+ })();
+};
+
+getBarBottomMargin = function(sample_list){
+ bottomMargin = 80
+ maxLength = 0
+ sampleNames = getSampleNames(sample_list)
+ for (i=0; i < sampleNames.length; i++){
+ if (sampleNames[i].length > maxLength) {
+ maxLength = sampleNames[i].length
+ }
+ }
+
+ if (maxLength > 6){
+ bottomMargin += 11*(maxLength - 6)
+ }
+
+ return bottomMargin;
+}
+
+root.stats_group = 'samples_primary';
+
+if (Object.keys(js_data.sample_group_types).length > 1) {
+ fullSampleLists = [sampleLists[0], sampleLists[1], sampleLists[0].concat(sampleLists[1])]
+ sampleGroupList = [js_data.sample_group_types['samples_primary'], js_data.sample_group_types['samples_other'], js_data.sample_group_types['samples_all']]
+} else {
+ fullSampleLists = [sampleLists[0]]
+ sampleGroupList = [js_data.sample_group_types['samples_primary']]
+}
+
+// Define Plotly Options (for the options bar at the top of each figure)
+
+root.modebar_options = {
+ displayModeBar: true,
+ modeBarButtonsToAdd:[{
+ name: 'Export as SVG',
+ icon: Plotly.Icons.disk,
+ click: function(gd) {
+ Plotly.downloadImage(gd, {format: 'svg'})
+ }
+ },
+ {
+ name: 'Export as JPEG',
+ icon: Plotly.Icons.camera,
+ click: function(gd) {
+ Plotly.downloadImage(gd, {format: 'jpeg'})
+ }
+ }],
+ showEditInChartStudio: true,
+ plotlyServerURL: "https://chart-studio.plotly.com",
+ modeBarButtonsToRemove:['zoom2d', 'pan2d', 'toImage', 'hoverClosest', 'hoverCompare', 'hoverClosestCartesian', 'hoverCompareCartesian', 'lasso2d', 'toggleSpikelines', 'resetScale2d'],
+ displaylogo: false
+ //modeBarButtons:['toImage2', 'zoom2d', 'pan2d', 'select2d', 'zoomIn2d', 'zoomOut2d', 'autoScale2d', 'resetScale2d'],
+}
+
+// Bar Chart
+
+root.errors_exist = getSampleErrors(sampleLists[0])[1]
+var barTrace = {
+ x: getSampleNames(sampleLists[0]),
+ y: getSampleVals(sampleLists[0]),
+ error_y: {
+ type: 'data',
+ array: getSampleErrors(sampleLists[0])[0],
+ visible: root.errors_exist
+ },
+ type: 'bar'
+}
+
+root.bar_data = [barTrace]
+
+getBarRange = function(sample_vals, sampleErrors = null){
+ positiveErrorVals = []
+ negativeErrorVals = []
+ for (i = 0;i < sample_vals.length; i++){
+ if (sampleErrors[i] != undefined) {
+ positiveErrorVals.push(sample_vals[i] + sampleErrors[i])
+ negativeErrorVals.push(sample_vals[i] - sampleErrors[i])
+ } else {
+ positiveErrorVals.push(sample_vals[i])
+ negativeErrorVals.push(sample_vals[i])
+ }
+ }
+
+ minYVal = Math.min(...negativeErrorVals)
+ maxYVal = Math.max(...positiveErrorVals)
+
+ if (minYVal == 0) {
+ rangeTop = maxYVal + Math.abs(maxYVal)*0.1
+ rangeBottom = 0;
+ } else {
+ rangeTop = maxYVal + Math.abs(maxYVal)*0.1
+ rangeBottom = minYVal - Math.abs(minYVal)*0.1
+ if (minYVal > 0) {
+ rangeBottom = minYVal - 0.1*Math.abs(minYVal)
+ } else if (minYVal < 0) {
+ rangeBottom = minYVal + 0.1*minYVal
+ } else {
+ rangeBottom = 0
+ }
+ }
+
+ return [rangeBottom, rangeTop]
+}
+
+root.chart_range = getBarRange(getSampleVals(sampleLists[0]), getSampleErrors(sampleLists[0])[0])
+valRange = root.chart_range[1] - root.chart_range[0]
+
+if (valRange < 0.05){
+ tickDigits = '.3f'
+ leftMargin = 80
+} else if (valRange < 0.5) {
+ tickDigits = '.2f'
+ leftMargin = 70
+} else if (valRange < 5){
+ tickDigits = '.1f'
+ leftMargin = 60
+} else {
+ tickDigits = 'f'
+ leftMargin = 55
+}
+
+if (js_data.num_values < 256) {
+ barChartWidth = 25 * getSampleVals(sampleLists[0]).length
+
+ // Set bottom margin dependent on longest sample name length, since those can get long
+ bottomMargin = getBarBottomMargin(sampleLists[0])
+
+ root.bar_layout = {
+ title: {
+ x: 0,
+ y: 10,
+ xanchor: 'left',
+ text: "<b>Trait " + js_data.trait_id + ": " + js_data.short_description + "</b>",
+ },
+ xaxis: {
+ type: 'category',
+ titlefont: {
+ size: 16
+ },
+ showline: true,
+ ticklen: 4,
+ tickfont: {
+ size: 16
+ },
+ },
+ yaxis: {
+ title: "<b>" + js_data.unit_type + "</b>",
+ range: root.chart_range,
+ titlefont: {
+ size: 16
+ },
+ showline: true,
+ ticklen: 4,
+ tickfont: {
+ size: 16
+ },
+ tickformat: tickDigits,
+ fixedrange: true
+ },
+ width: barChartWidth,
+ height: 600,
+ margin: {
+ l: leftMargin,
+ r: 30,
+ t: 100,
+ b: bottomMargin
+ },
+ dragmode: false
+ };
+
+ $('.bar_chart_tab').click(function() {
+ updateBarChart();
+ });
+}
+
+total_sample_count = 0
+for (i = 0, i < sampleLists.length; i++;) {
+ total_sample_count += getSampleVals(sampleLists[i]).length
+}
+
+// Histogram
+var hist_trace = {
+ x: getSampleVals(sampleLists[0]),
+ type: 'histogram'
+};
+root.histogram_data = [hist_trace];
+root.histogram_layout = {
+ bargap: 0.05,
+ title: {
+ x: 0,
+ y: 10,
+ xanchor: 'left',
+ text: "<b> Trait " + js_data.trait_id + ": " + js_data.short_description + "</b>",
+ },
+ xaxis: {
+ autorange: true,
+ title: js_data.unit_type,
+ titlefont: {
+ family: "arial",
+ size: 16
+ },
+ ticklen: 4,
+ tickfont: {
+ size: 16
+ }
+ },
+ yaxis: {
+ autorange: true,
+ title: "<b>count</b>",
+ titlefont: {
+ family: "arial",
+ size: 16
+ },
+ showline: true,
+ ticklen: 4,
+ tickfont: {
+ size: 16
+ },
+ automargin: true,
+ fixedrange: true
+ },
+ width: 500,
+ height: 600,
+ margin: {
+ l: 100,
+ r: 30,
+ t: 100,
+ b: 50
+ }
+};
+
+$('.histogram_tab').click(function() {
+ updateHistogram();
+ updateHistogram_width();
+});
+
+$('.histogram_samples_group').val(root.stats_group);
+$('.histogram_samples_group').change(function() {
+ root.stats_group = $(this).val();
+ return updateHistogram();
+});
+
+// Violin Plot
+
+root.violin_layout = {
+ title: "<b>Trait " + js_data.trait_id + ": " + js_data.short_description + "</b>",
+ xaxis: {
+ showline: true,
+ titlefont: {
+ family: "arial",
+ size: 16
+ },
+ tickfont: {
+ family: "arial",
+ size: 16
+ }
+ },
+ yaxis: {
+ title: {
+ text: "<b>"+js_data.unit_type+"</b>"
+ },
+ titlefont: {
+ family: "arial",
+ size: 16
+ },
+ autorange: true,
+ showline: true,
+ ticklen: 4,
+ tickfont: {
+ size: 16
+ },
+ tickformat: tickDigits,
+ zeroline: false,
+ automargin: true
+ },
+ margin: {
+ l: 100,
+ r: 30,
+ t: 100,
+ b: 80
+ },
+ dragmode: false,
+ showlegend: false
+};
+
+if (fullSampleLists.length > 1) {
+ root.violin_layout['width'] = 600;
+ root.violin_layout['height'] = 500;
+ var trace1 = {
+ y: getSampleVals(fullSampleLists[2]),
+ type: 'violin',
+ points: 'none',
+ box: {
+ visible: true
+ },
+ line: {
+ color: 'blue',
+ },
+ meanline: {
+ visible: true
+ },
+ name: "<b>" + sampleGroupList[2] + "</b>",
+ x0: "<b>" + sampleGroupList[2] + "</b>"
+ }
+ var trace2 = {
+ y: getSampleVals(fullSampleLists[1]),
+ type: 'violin',
+ points: 'none',
+ box: {
+ visible: true
+ },
+ line: {
+ color: 'red',
+ },
+ meanline: {
+ visible: true
+ },
+ name: "<b>" + sampleGroupList[1] + "</b>",
+ x0: "<b>" + sampleGroupList[1] + "</b>"
+ }
+ var trace3 = {
+ y: getSampleVals(fullSampleLists[0]),
+ type: 'violin',
+ points: 'none',
+ box: {
+ visible: true
+ },
+ line: {
+ color: 'green',
+ },
+ meanline: {
+ visible: true
+ },
+ name: "<b>" + sampleGroupList[0] + "</b>",
+ x0: "<b>" + sampleGroupList[0] + "</b>"
+ }
+ root.violin_data = [trace1, trace2, trace3]
+} else {
+ root.violin_layout['width'] = 320;
+ root.violin_layout['height'] = 400;
+ root.violin_data = [
+ {
+ y: getSampleVals(fullSampleLists[0]),
+ type: 'violin',
+ points: 'none',
+ box: {
+ visible: true
+ },
+ meanline: {
+ visible: true
+ },
+ name: "<b>Trait " + js_data.trait_id + "</b>",
+ x0: "<b>density</b>"
+ }
+ ]
+}
+
+$('.violin_plot_tab').click(function() {
+ updateViolinPlot();
+});
+
+if (getSampleVals(sampleLists[0]).length < 256) {
+ $('.bar_chart_samples_group').change(function() {
+ root.stats_group = $(this).val();
+ return updateBarChart();
+ });
+ root.bar_sort = "name"
+}
+$('.sort_by_name').click(function() {
+ root.bar_sort = "name"
+ return updateBarChart();
+});
+$('.sort_by_value').click(function() {
+ root.bar_sort = "value"
+ return updateBarChart();
+});
+
+root.prob_plot_group = 'samples_primary';
+$('.prob_plot_samples_group').val(root.prob_plot_group);
+$('.prob_plot_tab').click(function() {
+ return updateProbPlot();
+});
+$('.prob_plot_samples_group').change(function() {
+ root.prob_plot_group = $(this).val();
+ return updateProbPlot();
+});
+
+function isEmpty( el ){
+ return !$.trim(el.html())
+}
+
+$('.stats_panel').click(function() {
+ if (isEmpty($('#stats_table'))){
+ makeTable();
+ editDataChange();
+ } else {
+ editDataChange();
+ }
+});
+
+$('#block_by_index').click(function(){
+ blockByIndex();
+ editDataChange();
+});
+
+$('#filter_by_study').click(function(){
+ filter_by_study();
+ editDataChange();
+})
+
+$('#filter_by_value').click(function(){
+ filter_by_value();
+ editDataChange();
+})
+
+$('.edit_sample_value').change(function() {
+ editDataChange();
+});
+
+$('#exclude_group').click(editDataChange);
+$('#blockOutliers').click(editDataChange);
+$('#reset').click(editDataChange);
+$('#qnorm').click(editDataChange);
+$('#normalize').click(editDataChange);
+
+Number.prototype.countDecimals = function () {
+ if(Math.floor(this.valueOf()) === this.valueOf()) return 0;
+ return this.toString().split(".")[1].length || 0;
+}
diff --git a/gn2/wqflask/static/new/javascript/show_trait_mapping_tools.js b/gn2/wqflask/static/new/javascript/show_trait_mapping_tools.js
new file mode 100644
index 00000000..a4e6dafc
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/show_trait_mapping_tools.js
@@ -0,0 +1,329 @@
+var block_outliers, composite_mapping_fields, do_ajax_post, get_progress, mapping_method_fields, open_mapping_results, outlier_text, showalert, submit_special, toggle_enable_disable, update_time_remaining;
+
+update_time_remaining = function(percent_complete) {
+ var minutes_remaining, now, period, total_seconds_remaining;
+ now = new Date();
+ period = now.getTime() - root.start_time;
+ console.log("period is:", period);
+ if (period > 8000) {
+ total_seconds_remaining = (period / percent_complete * (100 - percent_complete)) / 1000;
+ minutes_remaining = Math.round(total_seconds_remaining / 60);
+ if (minutes_remaining < 3) {
+ return $('#time_remaining').text(Math.round(total_seconds_remaining) + " seconds remaining");
+ } else {
+ return $('#time_remaining').text(minutes_remaining + " minutes remaining");
+ }
+ }
+};
+
+get_progress = function() {
+ var params, params_str, temp_uuid, url;
+ console.log("temp_uuid:", $("#temp_uuid").val());
+ temp_uuid = $("#temp_uuid").val();
+ params = {
+ key: temp_uuid
+ };
+ params_str = $.param(params);
+ url = "/get_temp_data?" + params_str;
+ console.log("url:", url);
+ $.ajax({
+ type: "GET",
+ url: url,
+ success: (function(_this) {
+ return function(progress_data) {
+ var percent_complete;
+ percent_complete = progress_data['percent_complete'];
+ console.log("in get_progress data:", progress_data);
+ $('#marker_regression_progress').css("width", percent_complete + "%");
+ if (root.start_time) {
+ if (!isNaN(percent_complete)) {
+ return update_time_remaining(percent_complete);
+ }
+ } else {
+ return root.start_time = new Date().getTime();
+ }
+ };
+ })(this)
+ });
+ return false;
+};
+
+block_outliers = function() {
+ return $('.outlier').each((function(_this) {
+ return function(_index, element) {
+ return $(element).find('.trait_value_input').val('x');
+ };
+ })(this));
+};
+
+do_ajax_post = function(url, form_data) {
+ $.ajax({
+ type: "POST",
+ url: url,
+ data: form_data,
+ error: (function(_this) {
+ return function(xhr, ajaxOptions, thrownError) {
+ alert("Sorry, an error occurred");
+ console.log(xhr);
+ clearInterval(_this.my_timer);
+ $('#progress_bar_container').modal('hide');
+ $('#static_progress_bar_container').modal('hide');
+ return $("body").html("We got an error.");
+ };
+ })(this),
+ success: (function(_this) {
+ return function(data) {
+ clearInterval(_this.my_timer);
+ $('#progress_bar_container').modal('hide');
+ $('#static_progress_bar_container').modal('hide');
+ return open_mapping_results(data);
+ };
+ })(this)
+ });
+ console.log("settingInterval");
+ this.my_timer = setInterval(get_progress, 1000);
+ return false;
+};
+
+open_mapping_results = function(data) {
+ return $.colorbox({
+ html: data,
+ href: "#mapping_results_holder",
+ height: "90%",
+ width: "90%",
+ onComplete: (function(_this) {
+ return function() {
+ var filename, getSvgXml;
+ root.create_lod_chart();
+ filename = "lod_chart_" + js_data.this_trait;
+ getSvgXml = function() {
+ var svg;
+ svg = $("#topchart").find("svg")[0];
+ return (new XMLSerializer).serializeToString(svg);
+ };
+ $("#exportform > #export").click(function() {
+ var form, svg_xml;
+ svg_xml = getSvgXml();
+ form = $("#exportform");
+ form.find("#data").val(svg_xml);
+ form.find("#filename").val(filename);
+ return form.submit();
+ });
+ return $("#exportpdfform > #export_pdf").click(function() {
+ var form, svg_xml;
+ svg_xml = getSvgXml();
+ form = $("#exportpdfform");
+ form.find("#data").val(svg_xml);
+ form.find("#filename").val(filename);
+ return form.submit();
+ });
+ };
+ })(this)
+ });
+};
+
+outlier_text = "One or more outliers exist in this data set. Please review values before mapping. Including outliers when mapping may lead to misleading results.";
+showalert = function(message, alerttype) {
+ return $('#outlier_alert_placeholder').append('<div id="mapping_alert" class="alert ' + alerttype + '"><a class="close" data-dismiss="alert">�</a><span>' + message + '</span></div>');
+};
+
+$('#suggestive').hide();
+
+$('input[name=display_all]').change((function(_this) {
+ return function() {
+ if ($('input[name=display_all]:checked').val() === "False") {
+ return $('#suggestive').show();
+ } else {
+ return $('#suggestive').hide();
+ }
+ };
+})(this));
+
+// This is a list of inputs to be passed to the loading page, since not all inputs on the trait page are relevant to mapping
+var mapping_input_list = ['temp_uuid', 'trait_id', 'dataset', 'tool_used', 'form_url', 'method',
+ 'transform', 'trimmed_markers', 'selected_chr', 'chromosomes', 'mapping_scale',
+ 'sample_vals', 'vals_hash', 'score_type', 'suggestive', 'significant',
+ 'num_perm', 'permCheck', 'perm_output', 'perm_strata', 'categorical_vars',
+ 'num_bootstrap', 'bootCheck', 'bootstrap_results', 'LRSCheck', 'covariates',
+ 'maf', 'use_loco', 'manhattan_plot', 'control_marker', 'do_control',
+ 'genofile', 'pair_scan', 'startMb', 'endMb', 'graphWidth', 'lrsMax',
+ 'additiveCheck', 'showSNP', 'showGenes', 'viewLegend', 'haplotypeAnalystCheck',
+ 'mapmethod_rqtl', 'mapmodel_rqtl', 'temp_trait', 'group', 'species',
+ 'reaper_version', 'primary_samples']
+
+$(".rqtl-geno-tab, #rqtl_geno_compute").on("click", (function(_this) {
+ return function() {
+ if ($(this).hasClass('active') || $(this).attr('id') == "rqtl_geno_compute"){
+ var form_data, url;
+ url = "/loading";
+ $('input[name=method]').val("rqtl_geno");
+ $('input[name=pair_scan]').val("false");
+ $('input[name=selected_chr]').val($('#chr_rqtl_geno').val());
+ $('input[name=mapping_scale]').val($('#scale_rqtl_geno').val());
+ $('input[name=genofile]').val($('#genofile_rqtl_geno').val());
+ $('input[name=mapmodel_rqtl]').val($('#mapmodel_rqtl_geno').val());
+ $('input[name=mapmethod_rqtl]').val($('#mapmethod_rqtl_geno').val());
+ $('input[name=num_perm]').val($('input[name=num_perm_rqtl_geno]').val());
+ $('input[name=categorical_vars]').val(js_data.categorical_vars)
+ $('input[name=manhattan_plot]').val($('input[name=manhattan_plot_rqtl]:checked').val());
+ $('input[name=control_marker]').val($('input[name=control_rqtl_geno]').val());
+ $('input[name=do_control]').val($('input[name=do_control_rqtl]:checked').val());
+ $('input[name=tool_used]').val("Mapping");
+ $('input[name=form_url]').val("/run_mapping");
+ $('input[name=wanted_inputs]').val(mapping_input_list.join(","));
+ return submit_special(url);
+ } else {
+ return true
+ }
+ };
+})(this));
+
+$(".rqtl-pair-tab, #rqtl_pair_compute").on("click", (function(_this) {
+ return function() {
+ if ($(this).hasClass('active') || $(this).attr('id') == "rqtl_pair_compute"){
+ var form_data, url;
+ url = "/loading";
+ $('input[name=method]').val("rqtl_geno");
+ $('input[name=pair_scan]').val("true");
+ $('input[name=genofile]').val($('#genofile_rqtl_pair').val());
+ $('input[name=mapmodel_rqtl]').val($('#mapmodel_rqtl_pair').val());
+ $('input[name=mapmethod_rqtl]').val($('#mapmethod_rqtl_pair').val());
+ $('input[name=num_perm]').val($('input[name=num_perm_rqtl_pair]').val());
+ $('input[name=categorical_vars]').val(js_data.categorical_vars)
+ $('input[name=control_marker]').val($('input[name=control_rqtl_pair]').val());
+ $('input[name=do_control]').val($('input[name=do_control_rqtl_pair]:checked').val());
+ $('input[name=tool_used]').val("Mapping");
+ $('input[name=form_url]').val("/run_mapping");
+ $('input[name=wanted_inputs]').val(mapping_input_list.join(","));
+ return submit_special(url);
+ } else {
+ return true
+ }
+ };
+})(this));
+
+$(".gemma-tab, #gemma_compute").on("click", (function(_this) {
+ return function() {
+ if ($(this).hasClass('active') || $(this).attr('id') == "gemma_compute"){
+ var form_data, url;
+ url = "/loading";
+ $('input[name=method]').val("gemma");
+ $('input[name=mapping_scale]').val('physic');
+ $('input[name=selected_chr]').val($('#chr_gemma').val());
+ $('input[name=num_perm]').val(0);
+ $('input[name=genofile]').val($('#genofile_gemma').val());
+ $('input[name=maf]').val($('input[name=maf_gemma]').val());
+ $('input[name=tool_used]').val("Mapping");
+ $('input[name=form_url]').val("/run_mapping");
+ $('input[name=wanted_inputs]').val(mapping_input_list.join(","));
+ return submit_special(url);
+ } else {
+ return true
+ }
+ };
+})(this));
+
+$(".reaper-tab, #interval_mapping_compute").on("click", (function(_this) {
+ return function() {
+ if ($(this).hasClass('active') || $(this).attr('id') == "interval_mapping_compute"){
+ var form_data, url;
+ console.log("In interval mapping");
+ url = "/loading";
+ $('input[name=method]').val("reaper");
+ $('input[name=selected_chr]').val($('#chr_reaper').val());
+ $('input[name=mapping_scale]').val($('#scale_reaper').val());
+ $('input[name=genofile]').val($('#genofile_reaper').val());
+ $('input[name=num_perm]').val($('input[name=num_perm_reaper]').val());
+ $('input[name=control_marker]').val($('input[name=control_reaper]').val());
+ $('input[name=do_control]').val($('input[name=do_control_reaper]:checked').val());
+ $('input[name=manhattan_plot]').val($('input[name=manhattan_plot_reaper]:checked').val());
+ $('input[name=mapping_display_all]').val($('input[name=display_all_reaper]'));
+ $('input[name=suggestive]').val($('input[name=suggestive_reaper]'));
+ $('input[name=tool_used]').val("Mapping");
+ $('input[name=form_url]').val("/run_mapping");
+ $('input[name=wanted_inputs]').val(mapping_input_list.join(","));
+ return submit_special(url);
+ } else {
+ return true
+ }
+ };
+})(this));
+
+$("#interval_mapping_compute, #gemma_compute, rqtl_geno_compute").on("mouseover", (function(_this) {
+ return function() {
+ if ($(".outlier").length && $(".outlier-alert").length < 1) {
+ return showalert(outlier_text, "alert-success outlier-alert");
+ }
+ };
+})(this));
+
+composite_mapping_fields = function() {
+ return $(".composite_fields").toggle();
+};
+
+mapping_method_fields = function() {
+ return $(".mapping_method_fields").toggle();
+};
+
+$("#use_composite_choice").change(composite_mapping_fields);
+
+$("#mapping_method_choice").change(mapping_method_fields);
+
+$("#mapmodel_rqtl_geno,#mapmodel_rqtl_pair").change(function() {
+ if ($(this).val() == "np"){
+ $("#mapmethod_rqtl_geno").attr('disabled', 'disabled');
+ $("#mapmethod_rqtl_geno").css('background-color', '#CCC');
+ $("#missing_geno,#missing_geno_pair").attr('disabled', 'disabled');
+ $("#missing_geno,#missing_geno_pair").css('background-color', '#CCC');
+ } else {
+ $("#mapmethod_rqtl_geno").removeAttr('disabled');
+ $("#mapmethod_rqtl_geno").css('background-color', '#FFF');
+ $("#missing_geno,#missing_geno_pair").removeAttr('disabled');
+ $("#missing_geno,#missing_geno_pair").css('background-color', '#FFF');
+ }
+});
+
+$("#mapmethod_rqtl_geno,#mapmethod_rqtl_pair").change(function() {
+ if ($(this).val() == "mr"){
+ $("#missing_geno_div,#missing_geno_pair_div").css('display', 'block');
+ } else {
+ $("#missing_geno_div,#missing_geno_pair_div").css('display', 'none');
+ }
+});
+
+$("li.mapping-tab").click(function() {
+ if ($(this).hasClass("rqtl")){
+ $(".rqtl_description").css("display", "block");
+ } else {
+ $(".rqtl_description").css("display", "none");
+ }
+});
+
+toggle_enable_disable = function(elem) {
+ return $(elem).prop("disabled", !$(elem).prop("disabled"));
+};
+
+$("#choose_closet_control").change(function() {
+ return toggle_enable_disable("#control_locus");
+});
+
+$("#display_all_lrs").change(function() {
+ return toggle_enable_disable("#suggestive_lrs");
+});
+
+$('#genofile_rqtl_geno').change(function() {
+ geno_location = $(this).children("option:selected").val().split(":")[0]
+ $('#scale_rqtl_geno').empty()
+ the_scales = js_data.scales_in_geno[geno_location]
+ for (var i = 0; i < the_scales.length; i++){
+ $('#scale_rqtl_geno').append($("<option></option>").attr("value", the_scales[i][0]).text(the_scales[i][1]));
+ }
+});
+$('#genofile_reaper').change(function() {
+ geno_location = $(this).children("option:selected").val().split(":")[0]
+ $('#scale_reaper').empty()
+ the_scales = js_data.scales_in_geno[geno_location]
+ for (var i = 0; i < the_scales.length; i++){
+ $('#scale_reaper').append($("<option></option>").attr("value", the_scales[i][0]).text(the_scales[i][1]));
+ }
+});
diff --git a/gn2/wqflask/static/new/javascript/stats.js b/gn2/wqflask/static/new/javascript/stats.js
new file mode 100644
index 00000000..6c443ab3
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/stats.js
@@ -0,0 +1,176 @@
+// Generated by CoffeeScript 1.8.0
+var Stats, bxd_only;
+
+Stats = (function() {
+ function Stats(the_values) {
+ this.the_values = the_values;
+ }
+
+ Stats.prototype.add_value = function(value) {
+ return this.the_values.push(value);
+ };
+
+ Stats.prototype.n_of_samples = function() {
+ return this.the_values.length;
+ };
+
+ Stats.prototype.sum = function() {
+ var total, value, _i, _len, _ref;
+ total = 0;
+ _ref = this.the_values;
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ value = _ref[_i];
+ total += value;
+ }
+ return total;
+ };
+
+ Stats.prototype.mean = function() {
+ return this.sum() / this.n_of_samples();
+ };
+
+ Stats.prototype.median = function() {
+ var is_odd, median_position, the_values_sorted;
+ is_odd = this.the_values.length % 2;
+ median_position = Math.floor(this.the_values.length / 2);
+ the_values_sorted = this.the_values.sort(function(a, b) {
+ return a - b;
+ });
+ if (is_odd) {
+ return the_values_sorted[median_position];
+ } else {
+ return (the_values_sorted[median_position] + the_values_sorted[median_position - 1]) / 2;
+ }
+ };
+
+ Stats.prototype.std_dev = function() {
+ var step_a, step_b, sum, value, _i, _len, _ref;
+ sum = 0;
+ _ref = this.the_values;
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ value = _ref[_i];
+ step_a = Math.pow(value - this.mean(), 2);
+ sum += step_a;
+ }
+ step_b = sum / this.the_values.length;
+ return Math.sqrt(step_b);
+ };
+
+ Stats.prototype.std_error = function() {
+ return this.std_dev() / Math.sqrt(this.n_of_samples());
+ };
+
+ Stats.prototype.min = function() {
+ return Math.min.apply(Math, this.the_values);
+ };
+
+ Stats.prototype.max = function() {
+ return Math.max.apply(Math, this.the_values);
+ };
+
+ Stats.prototype.range = function() {
+ if (js_data.dataset_type == "ProbeSet"){
+ if (js_data.data_scale == "linear_positive"){
+ return Math.log2(this.max()) - Math.log2(this.min());
+ } else {
+ return this.max() - this.min()
+ }
+ } else {
+ return this.max() - this.min()
+ }
+ };
+
+ Stats.prototype.range_fold = function() {
+ if (js_data.dataset_type == "ProbeSet"){
+ return Math.pow(2, this.range());
+ } else {
+ return this.range()
+ }
+ };
+
+ Stats.prototype.interquartile = function() {
+ var iq, length, q1, q3;
+ length = this.the_values.length;
+ if (js_data.dataset_type == "ProbeSet" && js_data.data_scale == "linear_positive") {
+ q1 = Math.log2(this.the_values[Math.floor(length * .25)]);
+ q3 = Math.log2(this.the_values[Math.floor(length * .75)]);
+ } else {
+ q1 = this.the_values[Math.floor(length * .25)];
+ q3 = this.the_values[Math.floor(length * .75)];
+ }
+ iq = q3 - q1;
+ if (js_data.dataset_type == "ProbeSet") {
+ return Math.pow(2, iq);
+ } else {
+ return iq;
+ }
+ };
+
+ Stats.prototype.skewness = function() {
+ var len = this.the_values.length,
+ delta = 0,
+ delta_n = 0,
+ term1 = 0,
+ N = 0,
+ mean = 0,
+ M2 = 0,
+ M3 = 0,
+ g;
+
+ for ( var i = 0; i < len; i++ ) {
+ N += 1;
+
+ delta = this.the_values[ i ] - mean;
+ delta_n = delta / N;
+
+ term1 = delta * delta_n * (N-1);
+
+ M3 += term1*delta_n*(N-2) - 3*delta_n*M2;
+ M2 += term1;
+ mean += delta_n;
+ }
+ // Calculate the population skewness:
+ g = Math.sqrt( N )*M3 / Math.pow( M2, 3/2 );
+
+ // Return the corrected sample skewness:
+ return Math.sqrt( N*(N-1))*g / (N-2);
+ };
+
+ Stats.prototype.kurtosis = function() {
+ var len = this.the_values.length,
+ delta = 0,
+ delta_n = 0,
+ delta_n2 = 0,
+ term1 = 0,
+ N = 0,
+ mean = 0,
+ M2 = 0,
+ M3 = 0,
+ M4 = 0,
+ g;
+
+ for ( var i = 0; i < len; i++ ) {
+ N += 1;
+
+ delta = this.the_values[ i ] - mean;
+ delta_n = delta / N;
+ delta_n2 = delta_n * delta_n;
+
+ term1 = delta * delta_n * (N-1);
+
+ M4 += term1*delta_n2*(N*N - 3*N + 3) + 6*delta_n2*M2 - 4*delta_n*M3;
+ M3 += term1*delta_n*(N-2) - 3*delta_n*M2;
+ M2 += term1;
+ mean += delta_n;
+ }
+ // Calculate the population excess kurtosis:
+ g = N*M4 / (M2*M2) - 3;
+ //Return the corrected sample excess kurtosis:
+ return (N-1) / ( (N-2)*(N-3) ) * ( (N+1)*g + 6 );
+ };
+
+ return Stats;
+
+})();
+
+window.Stats = Stats;
diff --git a/gn2/wqflask/static/new/javascript/table_functions.js b/gn2/wqflask/static/new/javascript/table_functions.js
new file mode 100644
index 00000000..62888cd9
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/table_functions.js
@@ -0,0 +1,90 @@
+recheckRows = function(theTable, checkedRows){
+ // This is meant to recheck checkboxes after columns are resized
+ checkCells = theTable.column(0).nodes().to$();
+ for (let i = 0; i < checkCells.length; i++) {
+ if (checkedRows.includes(i)){
+ checkCells[i].childNodes[0].checked = true;
+ }
+ }
+
+ checkRows = traitTable.rows().nodes();
+ for (let i =0; i < checkRows.length; i++) {
+ if (checkedRows.includes(i)){
+ checkRows[i].classList.add("selected")
+ }
+ }
+}
+
+getCheckedRows = function(tableId){
+ let checkedRows = []
+ $("#" + tableId + " input.checkbox").each(function(index){
+ if ($(this).prop("checked") == true){
+ checkedRows.push(index);
+ }
+ });
+
+ return checkedRows
+}
+
+function setUserColumnsDefWidths(tableId, columnDefs) {
+ var userColumnDef;
+
+ // Get the settings for this table from localStorage
+ var userColumnDefs = JSON.parse(localStorage.getItem(tableId)) || [];
+
+ if (userColumnDefs.length === 0 ) return;
+
+ columnDefs.forEach( function(columnDef) {
+ // Check if there is a width specified for this column
+ userColumnDef = userColumnDefs.find( function(column) {
+ return column.targets === columnDef.targets;
+ });
+
+ // If there is, set the width of this columnDef in px
+ if ( userColumnDef ) {
+
+ columnDef.sWidth = userColumnDef.width + 'px';
+ columnDef.width = userColumnDef.width + 'px';
+
+ $('.toggle-vis').each(function(){
+ if ($(this).attr('data-column') == columnDef.targets){
+ if ($(this).hasClass("active")){
+ columnDef.bVisible = false
+ } else {
+ columnDef.bVisible = true
+ }
+ }
+ })
+ }
+ });
+
+ return columnDefs
+}
+
+function saveColumnSettings(tableId, traitTable) {
+ var userColumnDefs = JSON.parse(localStorage.getItem(tableId)) || [];
+ var width, header, existingSetting;
+
+ traitTable.columns().every( function ( targets ) {
+ // Check if there is a setting for this column in localStorage
+ existingSetting = userColumnDefs.findIndex( function(column) { return column.targets === targets;});
+
+ // Get the width of this column
+ header = this.header();
+ width = $(header).width();
+
+ if ( existingSetting !== -1 ) {
+ // Update the width
+ userColumnDefs[existingSetting].width = width;
+ } else {
+ // Add the width for this column
+ userColumnDefs.push({
+ targets: targets,
+ width: width,
+ });
+ }
+ });
+
+ // Save (or update) the settings in localStorage
+ localStorage.setItem(tableId, JSON.stringify(userColumnDefs));
+}
diff --git a/gn2/wqflask/static/new/javascript/thank_you.js b/gn2/wqflask/static/new/javascript/thank_you.js
new file mode 100644
index 00000000..deb68211
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/thank_you.js
@@ -0,0 +1,6 @@
+// Generated by CoffeeScript 1.8.0
+$(function() {
+ console.log("Starting transform");
+ $('#login_out').text('Sign out').attr('href', '/logout').removeClass('modalize');
+ return console.log("Transformed to sign out I hope");
+});
diff --git a/gn2/wqflask/static/new/javascript/typeahead_rn6.json b/gn2/wqflask/static/new/javascript/typeahead_rn6.json
new file mode 100644
index 00000000..1889d8a2
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/typeahead_rn6.json
@@ -0,0 +1 @@
+var rat_genes = ["A2ml1","A3galt2","A1cf","AA926063","A2m","A4gnt","A4galt","A1bg","Aadacl4","Aadac","Aacs","Aadat","Aaas","Aadacl2","Aadacl3","Aagab","Aak1","Aaed1","Aanat","Aamdc","Aard","Aasdh","Aar2","Aasdhppt","Aass","Aars","Aarsd1","Aars2","Abca1","Aatk","Abca14","Abca13","Abca15","Aatf","Aamp","Abca12","Abca16","Abca3","Abat","Abca17","Abca5","Abca8","Abca2","Abca9","Abca4","Abca8a","Abcb1a","Abcb11","Abcb10","Abca6","Abca7","Abcb1b","Abcb5","Abcb4","Abcb7","Abcb8","Abcb6","Abcc1","Abcb9","Abcc3","Abcc10","Abcc12","Abcc4","Abcc6","Abcc2","Abcc5","Abcd3","Abcd4","Abcc9","Abcd1","Abcf1","Abce1","Abcf3","Abcg2","Abcg1","Abcg3l1","Abcf2","Abcg4","Abcg5","Abcg3l3","Abcg3","Abcg3l4","Abcg3l2","Abcd2","Abhd11os","Abhd10","Abcg8","Abcc8","Abhd12","Abhd12b","Abhd1","Abhd13","Abhd14a","Abhd15","Abhd11","Abhd16b","Abhd17a","Abhd17b","Abhd16a","Abhd14b","Abhd2","Abhd3","Abhd4","Abhd17c","Abhd5","Abhd8","Abhd6","Abi2","Abi3","Abhd18","Ablim1","Abl2","Abl1","Abi1","Ablim3","Ablim2","Abo2","Abo3","Abra","Abr","Abi3bp","Abracl","Abraxas1","Abt1","Abtb1","Ac1576","Acaa1b","Abraxas2","Abo","Acacb","Abtb2","Acad11","Acad8","Acad9","Acaa2","Acadl","Acadm","Acadsb","Acads","Acadvl","Acaca","Acap1","Acap3","Acat1","Acat2","Acad10","Acaa1a","Acap2","Acat2l1","Acbd4","Acbd5","Acbd7","Acbd6","Accs","Acbd3","Acd","Acan","Acer1","Acer2","Accsl","Ace2","Ackr1","Ache","Ackr2","Ackr3","Acin1","Ackr4","Acnat1","Acmsd","Acly","Acnat2","Acer3","Ace3","Ace","Acot1","Aco1","Acot13","Aco2","Acot12","Acot4","Acot2","Acot6","Acot5","Acot11","Acot8","Acot9","Acod1","Acot3","Acox2","Acot7","Acox1","Acox3","Acp2","Acp1","Acp4","Acp6","Acp5","Acp7","Acrv1","Acrbp","Acsbg1","Acr","Acpp","Acsbg2","Acoxl","Acsf2","Acsf3","Acsl3","Acsl5","Acsl1","Acsl4","Acsl6","Acsm1","Acsm4","Acss1","Acsm2","Acp1-ps1","Acsm5","Acss2","Acsm3","Acss3","Actg1","Acta1","Actc1","Actg2","Actbl2","Actb","Acta2","Actl7a","Actl6a","Actl6b","Actl7b","Actl9","Actl9b","Actl11","Actn3","Actn2","Actl10","Actn1","Actr10","Actn4","Actr1a","Actr1b","Actr3b","Actr2","Actr5","Actr6","Actr3","Actr8","Actrt1","Actrt2","Actrt3","Acvr1b","Acvr1c","Acvr2a","Acvr2b","Acvrl1","Acy3","Acy1","Acyp1","Acyp2-ps1","Acyp2","Adal","Ada","Adad1","Adad2","Adam11","Adam10","Acvr1","Adam12","Adam18","Adam15","Adam19","Adam17","Adam1a","Adam20","Adam2","Adam25","Adam26a","Adam23","Adam24","Adam22","Adam32","Adam34l","Adam33","Adam34","Adam3a","Adam21","Adam4l1","Adam4","Adam6","Adam5","Adam28","Adam30","Adam7","Adamdec1","Adam9","Adam8","Adamts12","Adamts1","Adamts10","Adamts15","Adamts13","Adamts14","Adamts16","Adamts17","Adamts18","Adamts19","Adamts2","Adamts20","Adamts3","Adamts4","Adamts8","Adamts6","Adamts5","Adamts7","Adamts9","Adamtsl1","Adamtsl2","Adamtsl3","Adamtsl5","Adamtsl4","Adap2","Adap1","Adar","Adat1","Adarb2","Adat2","Adarb1","Adck1","Adck2","Adck5","Adcy1","Adcy2","Adcy10","Adcy3","Adcy4","Adcy5","Adcy6","Adcy7","Adcy9","Adcy8","Adat3","Adcyap1r1","Adcyap1","Add1","Add2","Adgra1","Adgb","Add3","Adgra2","Adgra3","Adgrb1","Adgrb2","Adgrd1","Adgrb3","Adgre4","Adgre1","Adgrf1","Adgre5","Adgrf2","Adgrf3","Adgrf4","Adgrg1","Adgrg3","Adgrf5","Adgrg2","Adgrg4","Adgrg7","Adgrg5","Adgrg6","Adgrl1","Adgrl4","Adgrl2","Adgrv1","Adgrl3","Adh4","Adh1","Adh6","Adh6a","Adh7","Adhfe1","Adi1","Adh5","Adipor1","Adipor2","Adm2","Adig","Adk","Adnp","Adm","Ado","Adipoq","Adnp2","Adora2b","Adora3","Adpgk","Adprh","Adprhl2","Adora1","Adprhl1","Adora2a","Adprm","Adra1b","Adra1d","Adra2a","Adra2c","Adra2b","Adra1a","Adrb1","Adrm1","Adtrp","Adsl","Adss","Adssl1","Adrb3","Adrb2","Aebp1","Aebp2","Aen","Afap1l1","Afap1","Afap1l2","Afdn","Aff1","Aff2","Afg1l","Aff3","Aff4","Afg3l1","Aff1-as1","Afg3l2","Afmid","Aftph","Afm","Afp","Aga","Agap1","Agap2","Agap3","Agbl1","Agbl3","Agbl2","Agbl4","Agbl5","Agfg1-ps1","Agfg1","Agfg2","Aggf1","Agk","Agl","Agmat","Aes","Agmo","Ago1","Ago3","Ago2","Ager","Ago4","Agpat2","Agpat1","Agpat3","Agpat4","Agpat5","Agr2","Agps","Agr3","Agrp","Agtpbp1","Agrn","Agtrap","Agtr1b","Agt","Agtr2","Agxt","Agxt2","Ahctf1","Ahcyl1","Ahcy","Ahdc1","Ahcyl2","Ahnak2","Ahnak","Agtr1a","Ahi1","Ahrr","Ahsa2","Ahsa1","Ahsp","Ahr","Aicda","Aif1l","Aida","Aifm2","Ahsg","Aifm1","Aifm3","Aig1","Aim2","Aimp1","Aipl1","Aip","Aimp2","Aire","Ajap1","Ajm1","Ajuba","Ak3","Ak1","Ak2","Aif1","Ak5","Ak4","Ak6","Ak9","Ak8","Ak7","Akap10","Akap1","Akap11","Akap14","Akap17a","Akap12","Akap13","Akap17b","Akap2","Akap3","Akain1","Akap4","Akap5","Akap7","Akap8","Akap6","Akap8l","Akirin1","Akip1","Akap9","Akirin2","Akna","Aknad1","Akr1a1","Akp3","Akr1b1-ps1","Akr1b1-ps2","Akr1b1-ps3","Akr1b7","Akr1b10","Akr1b1","Akr1b8","Akr1c1","Akr1c12","Akr1c12l1","Akr1c13","Akr1c19","Akr1c14","Akr1c2","Akr1cl","Akr1d1","Akr1c3","Akr1e2","Akr7a2","Akr7a3","Akt1s1","Aktip","Akt3","Akt2","Alas1","Alad","Alas2","Alcam","Aldh16a1","Aldh1a1","Aldh1a2","Aldh1a3","Akt1","Aldh1a7","Alb","Aldh1b1","Aldh1l1","Aldh1l2","Aldh18a1","Aldh3b2","Aldh3b1","Aldh3a1","Aldh5a1","Aldh8a1","Aldh7a1","Aldh6a1","Aldh3a2","Aldh9a1","Aldh2","Aldoart2","Alg1","Aldoc","Aldob","Aldoa","Alg10","Alg11","Alg12","Alg14","Alg2","Alg13","Alg3","Alg5","Alg8","Alg6","Alg9","Alk","Alkal1","Alkbh1","Alkbh2","Alkal2","Aldh4a1","Alkbh3","Alkbh4","Alkbh5","Alkbh6","Alkbh7","Alkbh8","Allc","Alms1","Alox12b","Alox12e","Alox12","Alox15b","Alox15","Aloxe3","Alox5ap","Alox5","Alpi","Alpk1","Alpk2","Alpk3","Alppl2","Alpp","Alpl","Als2","Als2cr12","Als2cl","Alx3","Alx4","Alyref","Amacr","Ambn","Ambp","Ambra1","Amd1-ps1","Amd1-ps2","Amd1","Amd1-ps3","Amdhd1","Amer1","Amdhd2","Amer2","Amer3","Amelx","Alx1","Amfr","Amh","Amhr2","Amigo3","Amigo1","Amigo2","Ammecr1","Ammecr1l","Amn1","Amotl1","Amot","Amotl2","Amn","Ampd1","Ampd3","Ampd2","Amtn","Amph","Amt","Amy2-ps1","Amy2-ps2","Amy1a","Amy2a3","Amz1","Amz2","Anapc10","Anapc11","Anapc13","Anapc1","Anapc15","Anapc2","Anapc16","Anapc4","Anapc7","Anapc5","Andpro","Ang2","Ang","Angel1","Angel2","Angpt4","Angptl1","Angptl2","Angptl3","Angptl4","Angpt2","Angptl6","Angptl7","Ank1","Ank2","Ankar","Ankdd1a","Ankdd1b","Angptl8","Angpt1","Ank3","Ankfn1","Ankef1","Ankfy1","Ankh","Ankib1","Ankhd1","Ankk1","Ankle1","Ankmy1","Ankle2","Ankmy2","Ankra2","Ankrd10","Ankrd11","Ankrd1","Ankrd13a","Ankrd12","Ankrd13b","Ankrd13d","Ankrd13c","Ankrd16","Ankrd22","Ankrd2","Ankrd23","Ankrd24","Ankrd17","Ankrd26","Ankrd27","Ankrd28","Ankrd30a","Ankrd31","Ankrd33b","Ankrd34a","Ankrd29","Ankrd34c","Ankrd35","Ankrd36","Ankrd37","Ankrd39","Ankrd40","Ankrd42","Ankrd44","Ankrd45","Ankrd33","Ankrd46","Ankrd34b","Ankrd49","Ankrd50","Ankrd53","Ankrd52","Ankrd54","Ankrd6","Ankrd60","Ankrd55","Ankrd63","Ankrd7","Ankrd66","Ankrd9","Ankrd65","Anks1a","Anks3","Anks4b","Anks1b","Ankrd61","Ankub1","Ankzf1","Anlnl1","Anln","Ano10","Ano1","Ano3","Ano2","Ano4","Anks6","Ano6","Ano8","Ano7","Ano5","Ano9","Anp32a","Anp32e","Anp32b","Anos1","Antxr1","Antxrl","Antxr2","Anxa10","Anxa11","Anxa2-ps1","Anxa13","Anxa1","Anpep","Anxa3","Anxa2","Anxa4","Anxa6","Anxa8","Anxa5","Anxa7","Aoc2-ps1","Anxa9","Aoah","Aoc1","Aox2","Aoc3","Aox1","Ap1ar","Aox3","Ap1b1","Ap1g1","Aox4","Ap1g2","Ap1m2","Ap1m1","Ap1s1","Ap1s2","Ap1s3","Ap2a1","Ap2a2","Ap2s1","Ap2b1","Ap3b1","Ap3b2","Ap3d1","Ap3m1","Ap3m2","Ap3s1","Ap3s2","Ap4b1","Ap4e1","Ap4m1","Ap5b1","Ap4s1","Ap2m1","Ap5m1","Ap5s1","Ap5z1","Apba3","Apba1","Apba2","Apaf1","Apbb1ip","Apbb3","Apbb2","Apbb1","Apcdd1","Apbh","Apc2","Apcdd1l","Apeg3","Apcs","Apeh","Apc","Apex2l1","Apex2","Aph1a","Apex1","Aph1b","Api5","Apip","Aplf","Aplnr","Apln","Aplp1","Apmap","Aplp2","Apoa2","Apoa4","Apoa5","Apobec1","Apoa1","Apobec2","Apobec3b","Apobec4","Apobr","Apob","Apoc1","Apoc4","Apoc2","Apoc3","Apod","Apof","Apol11a","Apol2","Apoh","Apol3","Apol9a","Apold1","Apom","Apon","Apoo","Apool","Apopt1","Apoe","Appl1","Appbp2","Appl2","Aptr","Aprt","Aptx","App","Aqp11","Aqp12a","Aqp1","Aqp3","Aqp5","Aqp2","Aqp6","Aqp7","Aqp8","Aqr","Aqp9","Aqp4","Araf","Arap2","Arap1","Arcn1","Arap3","Areg","Ar","Arc","Arf2","Arel1","Arf5","Arf1","Arf4","Arf3","Arf6","Arfgap1","Arfgap2","Arfgap3","Arfgef1","Arfgef2","Arfgef3","Arfip1","Arfip2","Arfrp1","Arg2","Arglu1","Arhgap11a","Arg1","Arhgap1","Arhgap10","Arhgap12","Arhgap20","Arhgap18","Arhgap19","Arhgap17","Arhgap22","Arhgap21","Arhgap23","Arhgap25","Arhgap24","Arhgap27","Arhgap15","Arhgap28","Arhgap26","Arhgap30","Arhgap29","Arhgap31","Arhgap32","Arhgap36","Arhgap39","Arhgap40","Arhgap35","Arhgap4","Arhgap33","Arhgap42","Arhgap44","Arhgap6","Arhgap45","Arhgap5","Arhgap8","Arhgap9","Arhgdib","Arhgdia","Arhgdig","Arhgef10l","Arhgef10","Arhgef1","Arhgef12","Arhgef11","Arhgef15","Arhgef16","Arhgef17","Arhgef18","Arhgef19","Arhgef2","Arhgef25","Arhgef26","Arhgef28","Arhgef3","Arhgef33","Arhgef38","Arhgef37","Arhgef4","Arhgef39","Arhgef5","Arhgef40","Arhgef6","Arhgef9","Arhgef7","Arid1a","Arid2","Arid3b","Arid3a","Arid4a","Arid1b","Arid4b","Arid5b","Arid5a","Arih1","Arih2","Arid3c","Arl10","Arl1","Arl11","Arl13a","Arl14","Arl13b","Arl14ep","Arl14epl","Arl16","Arl15","Arih2os","Arl2","Arl2bp","Arl4a","Arl4c","Arl3","Arl4d","Arl5a","Arl5c","Arl5b","Arl6","Arl2-ps1","Arl6ip1","Arl6ip5","Arl6ip4","Arl6ip6","Arl8a","Arl8b","Arl9","Armc12","Armc10","Armc1","Armc2","Armc3","Armc4","Armc5","Armc6","Armc7","Armc9","Armc8","Armcx1","Armcx2","Armcx4","Armcx3","Armcx6","Armt1","Arnt2","Arnt","Arpc1a","Arntl2","Arntl","Arpc1b","Armcx5","Arpc2","Arpc3","Arpc5","Arpc4","Arpc5l-ps1","Arpc5l","Arpin","Arpp19","Arrb2-ps","Arrdc2","Arr3","Arrdc1","Arpp21","Arrb1","Arrdc3","Arrb2","Arrdc5","Arrdc4","Arsa","Arse","Arsb","Arsi","Arsg","Arsj","Arsk","Art1","Art4","Art3","Art5","Artn","Arv1","Arvcf","Arxes2","Arx","As3mt","Asah1","Asah2","Asap2","Asap1","Asap3","Art2b","Asb10","Asb1","Asb11","Asb12","Asb14","Asb13","Asb15","Asb16","Asb17","Asb18","Asb4","Asb2","Asb3","Asb6","Asb5","Asb7","Asb8","Asb9","Ascc2","Ascc3","Ascc1","Ascl3","Ascl2","Ascl4","Ascl5","Ascl1","Asf1b","Asf1a","Asgr1","Ash2l","Asgr2","Ash1l","Asic4","Asic1","Asic3","Asic2","Asic5","Asip","Asmt","Asna1","Asmtl","Asl","Aspdh","Asnsd1","Asns","Aspa","Aspg","Asphd1","Asphd2","Asprv1","Aspnl1","Aspm","Aspn","Aspscr1","Asph","Asrgl1","Aste1","Astl","Astn1","Ass1","Asxl1","Astn2","Asxl2","Asxl3","Asz1","Atad2","Atad1","Atad2b","Atad5","Atad3a","Atat1","Atcay","Ate1","Atf1","Atf2","Atf5","Atf3","Atf4","Atf6","Atf6b","Atf7","Atf7ip","Atf7ip2","Atg10","Atg101","Atg12","Atg13","Atg14","Atg16l2","Atg16l1","Atg2a","Atg2b","Atg4a","Atg3","Atg4b","Atg4c","Atg4d","Atg5","Atg9a","Atg7","Atg9b","Atl3","Atl1","Atic","Atl2","Atmin","Atoh1","Atn1","Atoh7","Atoh8","Atm","Atp10a","Atox1","Atp10d","Atp10b","Atp11a","Atp11b","Atp11c","Atp12a","Atp13a1","Atp13a2","Atp13a3","Atp13a5","Atp13a4","Atp1a4","Atp1a3","Atp1a2","Atp1a1","Atp1b2","Atp1b4","Atp1b1","Atp1b3","Atp23","Atp2a1","Atp2a3","Atp2b1","Atp2b3","Atp2a2","Atp2b2","Atp2b4","Atp2c1","Atp2c2","Atp4a","Atp4b","Atp5a1","Atp5c1","Atp5d","Atp5b","Atp5e","Atp5f1","Atp5h-ps1","Atp5g1","Atp5hl1","Atp5g2","Atp5g3","Atp5h","Atp5i","Atp5j","Atp5l","Atp5j2","Atp5s","Atp5o","Atp6ap1","Atp6ap1l","Atp6ap2","Atp6v0b","Atp6v0a1","Atp6v0a4","Atp6v0c","Atp6v0a2","Atp6v0d2","Atp6v0d1","Atp6v0e1","Atp6v0e2","Atp6v1b1","Atp6v1a","Atp6v1c1","Atp6v1b2","Atp6v1d","Atp6v1c2","Atp6v1e2","Atp6v1e1","Atp6v1f","Atp6v1g1","Atp6v1g2","Atp6v1g3","Atp6v1h","Atp7b","Atp8a1","Atp8a2","Atp8b1","Atp7a","Atp8b2","Atp8b3","Atp8b4","Atp9a","Atp8b5p","Atp9b","Atpaf1","Atpaf2","Atraid","Atpif1","Atr","Atrn","Atrnl1","Atxn1l","Atxn10","Atrx","Atxn1","Atxn3","Atxn2","Atxn2l","Atxn7","Atxn7l3","Atxn7l2","Atxn7l1","Atrip","Aup1","Aunip","Auh","Aurkaip1","Aurka","Aurkc","Auts2l1","Aurkb","Auts2l","Atxn7l3b","Auts2","Avgr1","Aven","Avil","Avl9","Avpi1","Awat1","Avpr1b","Axdnd1","Avpr1a","Avpr2","Awat2","Avp","Axin1","Axin2","Azi2","Axl","Azgp1","Azin1","Azin2","B3galnt1","B3galnt2","B3galt2","B3galt1","B3galt4","B3galt5","B3galt6","B2m","B3gat1","B3gat2","B3gat3","B3glct","B3gnt4","B3gnt5","B3gnt2","B3gnt3","B3gnt6","B3gnt8","B3gnt9","B3gnt7","B4galnt2","B3gntl1","B4galnt3","B4galnt1","B4galnt4","B4galt2","B4galt3","B4galt4","B4galt5","B4galt1","B4galt7","B4galt6","B4gat1","B9d2","Baalc","B9d1","Babam1","Baat","Babam2","Bace2","Bace1","Bach1","Bach2","Bag2","Bag3","Bag1","Bag4","Bag5","Bag5l1","Bahcc1","Bag6","Bahd1","Baiap2l1","Bad","Baiap3","Baiap2l2","Bambi","Banf1","Bak1","Banf2","Banp","Bank1","Bap1","Bard1","Barhl1","Barx1","Barhl2","Barx2","Baiap2","Batf","Basp1","Batf2","Batf3","Baz2a","Baz1a","Baz1b","Bbc3","Bbof1","Baz2b","Bbox1","Bbs10","Bbs12","Bbs1","Bbs2","Bax","Bbs4","Bbs5","Bbip1","Bbs7","Bbs9","Bc1","Bbx","Bcam","Bcap29","Bcar3","Bcap31","Bcas2","Bcar1","Bcan","Bcas1","Bcas3","Bccip","Bcdin3d","Bcat2","Bcat1","Bckdhb","Bckdha","Bche","Bckdk","Bcl10","Bcl11b","Bcl2a1","Bcl11a","Bcl2l1-ps1","Bcl2l10","Bcl2l13","Bcl2l15","Bcl2l12","Bcl2l14","Bcl2l1","Bcl2l11","Bcl3","Bcl2l2","Bcl6","Bcl6b","Bcl7a","Bcl7b","Bcl7c","Bcl9","Bcl9l","Bclaf3","Bco1","Bclaf1","Bco2","Bcor","Bcorl1","Bcr","Bcs1l","Bdh2","Bdh1","Bdkrb2","Bean1","Bdkrb1","Bdp1","Becn2","Bend2","Bend3","Begain","Bend4","Becn1","Bend5","Bcl2","Bend6","Bend7","Best2","Best1","Best4","Best3","Bet1","Bex1","Bex2","Bet1l","Bex4-ps1","Bex4","Bfar","Bfsp2","Bfsp1","Bgn","Bhlha9","Bglap","Bhlhb9","Bhlha15","Bhlhe22","Bdnf","Bex3","Bhlhe23","Bhlhe40","Bhlhe41","Bhmt","Bhmt2","Bicd1","Bicc1","Bicd2","Bicdl1","Bicdl2","Bicra","Bhmg1","Bicral","Bid","Bik","Bin2","Bin2a","Bin3","Bin1","Birc3","Birc2","Birc6","Birc7","Birc5","Bivm","Blcap","Bles03","Blk","Blmh","Blm","Blnk","Bloc1s1","Bloc1s2","Bloc1s3","Bloc1s4","Bloc1s5","Blvrb","Bloc1s6","Blzf1","Blvra","Bmf","Bmi1","Bmp10","Bmp1","Bmp2k","Bmp15","Bmp3","Bmp5","Bmp2","Bmp8a","Bmp6","Bmp8b","Bmp7","Bmper","Bmp4","Bmpr1a","Bmt2","Bmpr1b","Bms1","Bmx","Bnc1","Bmpr2","Bmyc","Bnc2","Bnip1","Bnip2","Bnip3-ps1","Bnip3l-ps1","Bnip3","Bnipl","Bod1","Bod1l1","Boc","Bola1","Bok","Bola2","Bola2-ps1","Bola2-ps2","Bola3","Boll","Bop1","Borcs6","Borcs5","Bora","Bnip3l","Borcs7","Borcs8","Bphl","Bpgm","Bpi","Bpifa1","Bpifa3","Bpifa5","Bpifa6","Bpifb2","Bpifb1","Bpifb3","Bpifb4","Bpifa2f","Bpifb5","Bpifb6","Bpnt1-ps1","Bpifc","Bpifa2","Bpnt1","Bptf","Brap","Braf","Brcc3-ps1","Brat1","Brcc3","Brca2","Brd1","Brca1","Brd3","Brd2","Brd4","Brd7","Brd9","Brdt","Brd8","Brf1","Brf2","Bri3","Bri3bp","Bricd5","Brinp1","Brinp2","Brinp3","Brk1","Brms1","Brix1","Brms1l","Brox","Brpf1","Brs3","Brpf3","Brsk2","Brsk1","Brwd3","Brwd1","Bscl2","Bsdc1","Brip1","Bsph1","Bsnd","Bsph2","Bsn","Bsg","Bst1","Bst2","Bspry","Bsx","Btbd1","Btaf1","Btbd10","Btbd11","Btbd18","Btbd16","Btbd17","Btbd19","Btbd2","Btbd3","Btbd6","Btbd7","Btbd8","Btc","Btbd9","Btd","Btf3","Btf3l4","Btg1","Btg3","Btg4","Btk","Btla","Btn1a1","Btn2a2","Btn3a2","Btnl10","Btnl2","Btnl5","Btnl3","Btg2","Btnl6-ps1","Btnl8","Btnl7","Btnl9","Bud13","Bub1","Bub3","Bub1b","Btrc","Bves","Bud23","Bud31","Bysl","Bzw2","Bzw1","C10H17orf102","C17H10orf113","C18H10orf95","C17h6orf52","C19H16orf47","C1d","C10H5orf58","C12H7orf61","C1d-ps1","C1galt1c1","C1H10orf76","C10H10orf95","C1galt1","C1H19orf84","C1H9orf66","C1qa","C1qb","C1ql1","C1ql2","C1qc","C1qbp","C1ql3","C1ql4","C1qtnf1","C1qtnf2","C1qtnf12","C1qtnf4","C1qtnf3","C1qtnf5","C1qtnf6","C1qtnf7","C1qtnf9","C1rl","C1r","C1s","C2cd2","C2","C2cd2l","C2cd3","C2cd4a","C2cd4b","C2cd4c","C2cd4d","C2H5orf64","C2cd6","C2cd5","C3ar1","C4bpb","C4bpa","C4a","C4b","C3","C5ar2","C5","C7H12orf80","C5ar1","C6","C7","C8a","C8b","C8g","Ca5b","C9","Ca5a","Caap1","Cab39l","Cab39","Cabcoco1","Cables2","Cabin1","Cables1","Cabp2","Cabp1","Cabp4","Cabp5","Cabp7","Cabs1","Cabyr","Cacfd1","Cachd1","Cacna1b","Cacna1e","Cacna1a","Cacna1f","Cacna1g","Cacna1c","Cacna1d","Cacna1h","Cacna1i","Cacna2d2","Cacna2d4","Cacna1s","Cacna2d3","Cacnb1","Cacna2d1","Cacnb2","Cacnb3","Cacng1","Cacnb4","Cacng5","Cacng2","Cacng3","Cacng4","Cacng6","Cacng7","Cactin","Cacng8","Cacul1","Cacybp","Cadm1","Cad","Cadm2","Cadm3","Cadm4","Cahm","Cadps","Cage1","Cadps2","Calb2","Calb1","Calcb","Calcoco2","Calcoco1","Calcr","Calhm1","Calca","Calcrl","Cald1","Calhm2","Calhm3","Calhm4","Calm-ps1","Calm-ps2","Calhm5","Calhm6","Calml3","Calml5","Calml4","Calm3","Calm2","Caln1","Calm1","Calr3","Calr4","Calr","Caly","Calu","Camk1","Camk1d","Camk1g","Camk2n1","Camk2n2","Camk2g","Camk2b","Camk2a","Camkk1","Camk2d","Camk4","Camkmt","Camkk2","Camp","Camkv","Camlg","Camsap1","Camsap2","Camsap3","Camta2","Camta1","Cand1","Cand2","Cant1","Cap2","Cap1","Canx","Capg","Capn10","Capn12","Capn11","Capn1","Capn13","Capn15","Capn2","Capn5","Capn7","Capn3","Capn8","Capn9","Capns1","Capns1-ps1","Capns2","Caprin2","Caprin1","Capsl","Caps2","Capza2","Capza1","Capza3","Capzb","Car1","Car10","Car11","Capn6","Car13","Car13-ps1","Car12","Car15","Car14","Car7","Car6","Car3","Car2","Car8","Car4","Card10","Car9","Card14","Card19","Card11","Card6","Card9","Carf","Carhsp1","Carmn","Carm1","Carnmt1","Carns1","Carmil2","Carmil1","Carmil3","Cars","Cars2","Casd1","Casc3","Casc1","Casc4","Cartpt","Cask","Casp14","Casp16","Caskin2","Caskin1","Casp12","Casp1","Casp2","Casp4","Casp7","Casp8ap2","Casp6","Casp8","Casq1","Casq2","Casp9","Cass4","Casp3","Castor2","Castor1","Casr","Cast","Catsper1","Catip","Casz1","Catsper3","Catsper2","Catsper4","Catspere","Catsperd","Catsperg","Catsperz","Cat","Cav2","Cavin1","Cavin2","Cavin3","Catsperb","Cavin4","CB741658","Cbarp","Cbfa2t2","Cbfa2t3","Cbfb","Cblb","Cav1","Cblc","Cbll1","Cbln1","Cb707485","Cav3","Cbl","Cbln2","Cbln4","Cbln3","Cbr3","Cbr4","Cbr1","Cbwd1","Cbs","Cbx1","Cbx2","Cbx3","Cbx4","Cbx5","Cbx6","Cby3","Cbx8","Cbx7","Cby1","Cc2d1a","Cc2d1b","Cc2d2b","Ccbe1","Ccar1","Cc2d2a","Ccdc102a","Ccar2","Ccdc103","Ccdc105","Ccdc106","Ccdc110","Ccdc107","Ccdc112","Ccdc113","Ccdc114","Ccdc115","Ccdc116","Ccdc117","Ccdc121","Ccdc12","Ccdc120","Ccdc122","Ccdc124","Ccdc125","Ccdc126","Ccdc127","Ccdc13","Ccdc129","Ccdc130","Ccdc134","Ccdc136","Ccdc137","Ccdc138","Ccdc144b","Ccdc14","Ccdc142","Ccdc141","Ccdc146","Ccdc148","Ccdc149","Ccdc15","Ccdc150","Ccdc151","Ccdc152","Ccdc153","Ccdc154","Ccdc157","Ccdc155","Ccdc162","Ccdc160","Ccdc158","Ccdc159","Ccdc166","Ccdc163","Ccdc167","Ccdc169","Ccdc17","Ccdc170","Ccdc171","Ccdc174","Ccdc172","Ccdc173","Ccdc168","Ccdc175","Ccdc179","Ccdc177","Ccdc18","Ccdc178","Ccdc181","Ccdc182","Ccdc180","Ccdc183","Ccdc185","Ccdc184","Ccdc187","Ccdc186","Ccdc188","Ccdc189","Ccdc190","Ccdc196","Ccdc22","Ccdc24","Ccdc191","Ccdc25","Ccdc27","Ccdc28a","Ccdc28b","Ccdc3","Ccdc30","Ccdc33","Ccdc32","Ccdc34","Ccdc36","Ccdc38","Ccdc198","Ccdc39","Ccdc40","Ccdc42","Ccdc43","Ccdc47","Ccdc50","Ccdc54","Ccdc51","Ccdc57","Ccdc58","Ccdc59","Ccdc6","Ccdc61","Ccdc60","Ccdc62","Ccdc65","Ccdc63","Ccdc68","Ccdc69","Ccdc70","Ccdc7","Ccdc66","Ccdc71","Ccdc71l","Ccdc74a","Ccdc73","Ccdc77","Ccdc78","Ccdc8","Ccdc80","Ccdc81","Ccdc82","Ccdc83","Ccdc84","Ccdc85b","Ccdc85a","Ccdc85c","Ccdc87","Ccdc86","Ccdc88a","Ccdc88c","Ccdc88b","Ccdc89","Ccdc9","Ccdc90b","Ccdc91","Ccdc92","Ccdc92b","Ccdc96","Ccdc94","Ccdc93","Ccdc9b","Ccdc97","Ccer2","Ccer1","Cchcr1","Ccin","Cck","Ccl1","Ccl12","Cckbr","Cckar","Ccl17","Ccl11","Ccl19","Ccl21","Ccl22","Ccl25","Ccl24","Ccl26","Ccl27","Ccl28","Ccl4","Ccl6","Ccl7","Ccl9","Ccl20","Ccl3","Ccl5","Ccm2","Ccm2l","Ccna1","Ccnb1ip1","Ccnb2","Ccna2","Ccnb3","Ccnb1","Ccnc","Ccnd2","Ccnd3","Ccndbp1","Ccne2","Ccne1","Ccnf","Ccnf-ps1","Ccl2","Ccng2","Ccng1","Ccnh","Ccni","Ccnj","Ccnk","Ccnjl","Ccnl1","Ccnl2","Ccno","Ccnyl1","Ccny","Ccnt2","Ccnd1","Ccp110","Ccp6l1","Ccnt1","Ccpg1","Ccpg1os","Ccr10","Ccr1l1","Ccr1","Ccr4","Ccr3","Ccr2","Ccr7","Ccr6","Ccr8","Ccr9","Ccrl2","Ccs","Ccr5","Ccsap","Cct2-ps1","Ccser2","Ccser1","Cct2","Cct3-ps2","Cct3-ps1","Cct3-ps3","Cct3","Cct3-ps4","Cct5-ps2","Cct4","Cct6a-ps1","Cct5","Cct6a-ps11","Cct6a-ps12","Cct6a-ps10","Cct6a","Cct6a-ps14","Cct6a-ps15","Cct6a-ps2","Cct6a-ps3","Cct6a-ps5","Cct6a-ps4","Cct6a-ps6","Cct6a-ps7","Cct6a-ps8","Cct6a-ps9","Cct7-ps1","Cct7-ps2","Cct7-ps3","Cct6b","Cct7","Cct8-ps1","Cct8-ps2","Cct8","Cct8l1","Ccz1b","Cd109","Cd101","Cd160","Cd151","Cd163","Cd164l2","Cd164","Cd14","Cd180","Cd177","Cd19","Cd1d1","Cd2","Cd200r1","Cd207","Cd200r1l","Cd209a","Cd200","Cd209c","Cd209d","Cd209e","Cd209f","Cd22","Cd226","Cd24","Cd247","Cd244","Cd248","Cd27","Cd274","Cd276","Cd2bp2","Cd28","Cd300a","Cd2ap","Cd300c","Cd300e","Cd300c2","Cd300lb","Cd300ld","Cd300le","Cd300lg","Cd300lf","Cd302","Cd320","Cd33","Cd34","Cd37","Cd3e-ps1","Cd38","Cd3d","Cd3eap","Cd3e","Cd3g","Cd36","Cd4","Cd48","Cd47","Cd44","Cd5","Cd46","Cd52","Cd53","Cd5l","Cd40lg","Cd55","Cd59","Cd6","Cd40","Cd63","Cd68","Cd7","Cd70","Cd72","Cd79al","Cd69","Cd74","Cd79b","Cd80","Cd83","Cd84","Cd81","Cd82","Cd79a","Cd8a","Cd8b","Cd86","Cd99","Cd93","Cd96","Cd9","Cd99l2","Cda","Cdadc1","Cdan1","Cdc123","Cdc14a","Cdc14b","Cdc16","Cdc20b","Cdc20","Cdc23","Cdc26","Cdc27","Cdc34","Cdc37l1","Cdc37","Cdc40","Cdc42bpa","Cdc25b","Cdc42","Cdc42bpb","Cdc42bpg","Cdc42ep1","Cdc42ep2","Cdc42ep4","Cdc42ep3","Cdc42ep5","Cdc42se1","Cdc42se2","Cdc45","Cdc6","Cdc7","Cdc5l","Cdc73","Cdca2","Cdca3","Cdca4","Cdca7","Cdca5","Cdca7l","Cdca8","Cdcp1","Cdc25c","Cdcp2","Cdh10","Cdh11","Cdh14","Cdh15","Cdh12","Cdh1","Cdh16","Cdh13","Cdh17","Cdh19","Cdh18","Cdh20","Cdh22","Cdh23","Cdh2","Cdh24","Cdh26","Cdh3","Cdh6","Cdh4","Cdh7","Cdh5","Cdc25a","Cdh8","Cdh9","Cdhr3","Cdhr1","Cdhr4","Cdhr2","Cdip1","Cdhr5","Cdipt","Cdk10","Cdk13","Cdk11b","Cdk15","Cdk12","Cdk14","Cdk16","Cdk17","Cdk18","Cdk19","Cdk2ap1","Cdk20","Cdk2ap1-ps1","Cdk2","Cdk2ap1-ps2","Cdk2ap1-ps3","Cdk2ap1-ps5","Cdk2ap1-ps4","Cdk2ap1-ps6","Cdk2ap1-ps7","Cdk2ap1-ps8","Cdk2ap2","Cdk5r2","Cdk5r1","Cdk5rap1","Cdk4","Cdk5","Cdk5rap3","Cdk6","Cdk8","Cdk7","Cdk9","Cdkal1","Cdkl1","Cdkl4","Cdkl2","Cdkl3","Cdk5rap2","Cdkn1c","Cdkn2aip","Cdkn1a","Cdkn1b","Cdkn2aipnl","Cdk1","Cdkn2a","Cdkn2d","Cdkn2c","Cdkn3","Cdnf","Cdkn2b","Cdkl5","Cdo1","Cdon","Cdpf1","Cdrt4","Cdr2l","Cdr2","Cds2","Cds1","Cdsn","Cdt1","Cdx1","Cdr1","Cdx2","Cdx4","Cdv3","Cdyl","Cdyl2","Ceacam11","Ceacam12","Ceacam16","Ceacam18","Ceacam19","Ceacam1","Ceacam20","Ceacam3","Ceacam6","Ceacam4","Ceacam9","Cebpd","Cebpe","Cebpg","Cebpa","Cebpb","Cebpz","Cecr2","Cel","Cela1","Cela2a","Cela3b","Celf3","Celf1","Celf4","Celf2","Celf5","Celf6","Celsr1","Celsr2","Cend1","Cenpb","Cemip","Cenpa","Celsr3","Cenpc","Cenpe","Cenph","Cenpf","Cenpk","Cenpj","Cenpi","Cenpm","Cenpl","Cenpo","Cenpp","Cenps","Cenpq","Cenpn","Cenpv","Cenpu","Cenpt","Cenpx","Cenpw","Cep112","Cep104","Cep120","Cep128","Cep126","Cep131","Cep135","Cep152","Cep170b","Cep170","Cep162","Cep164","Cep19","Cep192","Cep250","Cep295nl","Cep44","Cep350","Cep290","Cep295","Cep41","Cep55","Cep57","Cep68","Cep57l1","Cep72","Cep63","Cep70","Cep76","Cep78","Cep83","Cep83os","Cep85l","Cep89","Cep95","Cep85","Cep97","Cept1","Cer1","Cercam","Cerk","Cers1","Cerkl","Cers2","Cers4","Cers3","Cers5","Cers6","Ces1a","Ces1d","Ces2","Ces2a","Ces1c","Ces1e","Ces2c","Ces2e","Ces1f","Ces2i","Ces3a","Ces2g","Ces2j","Ces4a","Ces2h","Ces5a","Cesl1","Cetn1","Cetn4","Cetn2","Cfap100","Cetn3","Cfap157","Cfap126","Cfap161","Cfap20","Cfap206","Cfap221","Cfap43","Cfap36","Cfap45","Cfap44","Cfap46","Cfap47","Cfap53","Cfap54","Cfap52","Cfap57","Cfap58","Cfap61","Cfap65","Cfap73","Cfap58l1","Cfap70","Cfap74","Cfap77","Cfap97","Cfap99","Cfc1","Cfap69","Cfdp1","Cfd","Cfhr2","Cfhr1","Cfb","Cfh","Cfi","Cfl2","Cfp","Cflar","Cga","Cfl1","Cgas","Cggbp1","Cgm4","Cgn","Cgnl1","Cftr","Cgref1","Cgrrf1","Ch25h","Chac1","Chac2","Chad","Chaf1a","Chadl","Champ1","Chaf1b","Chchd1","Chchd10","Chat","Chchd2","Chchd3","Chchd4","Chchd5","Chchd6","Chchd7","Chd1","Chd1l","Chd2","Chd3","Chd4","Chd5","Chd6","Chd8","Chd9","Chdh","Cherp","Chek1","Chfr","Chek2","Chga","Chgb","Chi3l1","Chi3l4","Chi3l3","Chd7","Chic1","Chic2","Chid1","Chit1","Chkb","Chl1","Chka","Chml","Chm","Chmp1a","Chmp1b","Chmp3","Chmp2b","Chmp2a","Chmp4bl1","Chmp4b","Chmp4c","Chmp5","Chmp6","Chmp7","Chn3","Chn1","Chn2","Chia","Chodl","Chordc1","Chp2","Chpf","Chp1","Chpf2","Chpt1","Chrac1","Chrdl2","Chrdl1","Chrd","Chrm2","Chrm4","Chrm1","Chrm3","Chrm5","Chrna1","Chrna10","Chrna2","Chrna3","Chrna5","Chrna6","Chrna4","Chrna9","Chrnb1","Chrnb3","Chrna7","Chrnd","Chrnb2","Chrnb4","Chrng","Chst1","Chrne","Chst10","Chst11","Chst12","Chst13","Chst14","Chst2","Chst15","Chst3","Chst5","Chst4","Chst8","Chst7","Chst9","Chsy1","Chsy3","Chsy3l","Chtf18","Chtop","Chtopl1","Churc1","Chtf8","Chuk","Ciapin1","Ciao1","Ciart","Cib3","Cib2","Cib1","Cib4","Cidea","Cideb","Cic","Cidec","Cilp","Cilp2","Cinp","Cip2a","Cipc","Ciita","Cir1","Cisd2","Cisd1","Cirbp","Cistr","Cisd3","Cish","Cited1","Cited4","Cit","Ckap2l","Ckap2","Ciz1","Cited2","Ckap4","Cklf","Ckap5","Ckmt2","Cks1l","Cks1b","Ckm","Ckb","Ckmt1","Cks2","Clba1","Clasrp","Clasp2","Clca2","Clasp1","Clca1","Clca4","Clca4l","Clca5","Clcf1","Clcc1","Clcn1","Clcn2","Clcn3","Clcn4","Clcn6","Clcn5","Clcn7","Clcnka","Clcnkb","Cldn1","Cldn10","Cldn11","Cldn14","Cldn12","Cldn15","Cldn16","Cldn17","Cldn19","Cldn18","Cldn2","Cldn20","Cldn22","Cldn25","Cldn24","Cldn23","Cldn34a","Cldn3","Cldn34c4","Cldn34d","Cldn34b","Cldn34e","Cldn4","Cldn8","Cldn6","Cldn7","Cldn5","Cldn9","Cldnd1","Cldnd2","Clec10a","Clec11a","Clec12a","Clec12b","Clec14a","Clec16a","Clec18a","Clec19a","Clec1b","Clec1a","Clec2d","Clec2d2","Clec2dl1","Clec2h","Clec2e","Clec2l","Clec2g","Clec3a","Clec3b","Clec4a1","Clec20a","Clec4a2","Clec4a","Clec4a3","Clec4b2","Clec4d","Clec4e","Clec4g","Clec4f","Clec5a","Clec4m","Clec6a-ps1","Clec9a","Clhc1","Clec7a","Clgn","Clic2","Clic3","Clic4","Clic1","Clic6","Clic5","Clint1","Clip2","Clip1","Clip3","Clk1","Clip4","Clk3","Clk2","Clk4","Clmn","Clmp","Cln5","Cln3","Cln8","Clnk","Clns1a","Clp1","Clock","Clpb","Clpp","Clps","Clpsl2","Clptm1","Clrn2","Clptm1l","Clrn1","Clpx","Clrn3","Clspn","Cln6","Clstn1","Clstn3","Clstn2","Cltb","Clta","Cluap1","Cltc","Cluh","Clul1","Clvs2","Clvs1","Clybl","Clu","Cma1","Cmahp","Cmas","Cmbl","Cmc1","Cmc2","Cmklr1","Cmip","Cmpk2","Cmpk1","Cmtm1","Cmtm2a","Cmss1","Cmtm3","Cmtm4","Cmtm5","Cmtm7","Cmtm6","Cmtr2","Cmtm8","Cmtr1","Cmya5","Cnbd2","Cnbd1","Cnep1r1","Cnbp","Cndp2","Cndp1","Cnfn","Cnga1","Cnga2","Cnga3","Cnih1","Cnga4","Cnih2","Cngb3","Cngb1","Cnih3","Cnih4","Cnksr1","Cnmd","Cnksr3","Cnksr2","Cnn2","Cnn1","Cnn3","Cnnm1","Cnnm2","Cnnm3","Cnnm4","Cnot10","Cnot11","Cnot1","Cnot3","Cnot2","Cnot4","Cnot6","Cnot6l","Cnot7","Cnot8","Cnot9","Cnpy1","Cnpy3","Cnppd1","Cnpy2","Cnp","Cnpy4","Cnst","Cnrip1","Cntd1","Cntfr","Cnr2","Cntln","Cntf","Cnr1","Cntn2","Cntn1","Cntn3","Cntn5","Cntn6","Cntn4","Cntnap1","Cntnap3","Cntnap4","Cntnap5a","Cntnap2","Cntnap5c","Cntrl","Cntnap5b","Coa3","Cntrob","Coa4","Coa5","Coa6","Coa7","Coasy","Cobl","Cobll1","Coch","Cog1","Cog3","Cog2","Cog4","Cog6","Cog5","Cog7","Cog8","Coil","Col10a1","Col11a1","Col13a1","Col11a2","Col15a1","Col14a1","Col12a1","Col16a1","Col17a1","Col18a1","Col19a1","Col20a1","Col22a1","Col24a1","Col23a1","Col1a2","Col25a1","Col26a1","Col28a1","Col27a1","Col1a1","Col3a1","Col4a1","Col2a1","Col4a2","Col4a3bp","Col4a3","Col4a4","Col4a5","Col4a6","Col5a2","Col5a1","Col5a3","Col6a1","Col6a2","Col6a4","Col6a5","Col6a6","Col8a1","Col8a2","Col7a1","Col9a1","Col9a2","Colca2","Colec10","Col9a3","Colec11","Colgalt1","Colec12","Col6a3","Colgalt2","Commd1","Colq","Commd2","Commd10","Commd4","Commd3","Commd5","Commd7","Commd8","Commd6","Commd9","Comtd1","Comp","Copb2","Comt","Copa","Copb1","Cope","Coprs","Copg2","Copg1","Cops3","Cops4","Cops2","Cops5","Cops6","Cops7a","Cops7b","Cops8","Copz2","Coq10a","Cops9","Copz1","Coq10b","Coq4","Coq2","Coq3","Coq5","Coq6","Coq8b","Coq7","Coq8a","Coq9","Corin","Coro1a","Coro1c","Coro1b","Coro2a","Coro2b","Cort","Coro7","Coro6","Cotl1","Cox11","Cox10","Cox14","Cox15","Cox17","Cox19","Cox18","Cox20","Cox4i2","Cox5a","Cox4i1","Cox6a1","Cox6a2","Cox5b","Cox6b1-ps1","Cox6b1","Cox6b2","Cox6c-ps1","Cox6c","Cox7a1","Cox7a2","Cox7a2l","Cox7a2l2","Cox7b2","Cox7b","Cox16","Cox8a","Cox8b","Cox8c","Cpa1","Cpa2","Cpa3","Cpa4","Cpa5","Cpa6","Cpb1","Cpamd8","Cpb2","Cpd","Cox7c","Cp","Cpe","Cpeb1","Cpeb2","Cpg1","Cped1","Cpeb3","Cpeb4","Cphx","Cplx1","Cplx3","Cplx2","Cplx4","Cpn2","Cpm","Cpne1","Cpn1","Cpne3","Cpne2","Cpne4","Cpne6","Cpne5","Cpne7","Cpne8","Cpne9","Cpo","Cpped1","Cpox","Cpq","Cpsf1","Cpsf2","Cpsf3","Cpsf4","Cps1","Cpsf4l","Cpsf6","Cpsf7","Cpt1c","Cpt2","Cptp","Cpt1a","Cpvl","Cpt1b","Cpxcr1","Cpxm1","Cpxm2","Cpz","Crabp1","Cr1l","Cracr2a","Cr2","Crabp2","Cracr2b","Cradd","Cramp1","Crb2","Crb3","Crb1","Crat","Crbn","Crct1","Crcp","Creb3","Creb3l2","Creb3l1","Creb3l4","Creb3l3","Creb5","Crebl2","Crebzf","Creg2","Creg1","Crebrf","Crebbp","Creld1","Creb1","Creld2","Crhbp","Crim1","Crem","Crip1","Crh","Crip2","Crhr2","Crip3","Cripak","Cript","Crisp1","Crisp2","Crhr1","Crisp3","Crispld1","Crispld2","Crk","Crkl","Crlf2","Crlf1","Crlf3","Crmp1","Crls1","Crnde","Crnkl1-ps1","Crnkl1","Crnn","Crocc","Crot","Crocc2","Crtac1","Crtam","Crtap","Crtapl1","Crtc1","Crxos1","Crtc2","Crtc3","Crx","Cry1","Cry2","Cryaa","Cryba2","Cryba4","Cryba1","Crybb1","Cryab","Crybb2","Crp","Crybb3","Crybg1","Crybg3","Crybg2","Cryga","Crygb","Crygc","Crygd","Crygf","Cryge","Crygn","Crygs","Cryl1","Crym","Cryz","Cryzl1","Csap1","Cs","Csad","Csdc2","Cse1l","Csde1","Csf2ra","Csf1r","Csf2rb","Csf2","Csf1","Csf3r","Csgalnact1","Csf3","Csgalnact2","Csk","Csmd1","Csn1s2a","Csn1s2b","Csmd2","Csn1s1","Csmd3","Csn2","Csn3","Csnk1g3","Csnk1e","Csnk1g1","Csnk1a1","Csnk1g2","Csnk1d","Csnk2a1","Csnka2ip","Csnk2a2","Csprs","Cspg5","Cspp1","Cspg4","Csnk2b","Csrnp1","Csrnp2","Csrnp3","Cst11","Csrp1","Cst12","Csrp2","Csrp3","Cst13","Cst5","Cst6","Cst8","Cst9l","Cst7","Csta","Cst3","Cstb","Cstl1","Cstf3","Cstf2t","Cstf2","Cstf1","Ct45a9","Ct55","Ctag2","Ctbs","Ctbp2","Ctc1","Ctbp1","Ctcf","Ctcfl","Ctdnep1","Ct47b1","Ctdsp2","Ctdp1","Ctdsp1","Ctdspl","Ctdspl2","Ctf2","Ctf1","Cthrc1","Ctif","Ctla2a","Cth","Ctnna1","Ctla4","Ctgf","Ctnnal1","Ctnna2","Ctnnbip1","Ctnna3","Ctnnbl1","Ctnnd2","Ctps1","Ctnnd1","Ctps2","Ctr9","Ctnnb1","Ctrb1","Ctrc","Cts8","Cts8l1","Ctrl","Cts7","Ctns","Ctsa","Ctsf","Ctse","Ctsg","Ctsc","Ctsd","Ctsh","Ctsb","Ctsj","Ctso","Ctsll3","Ctsm","Ctsk","Ctsq","Ctsr","Ctsql2","Ctsl","Ctsw","Ctss","Ctsz","Cttnbp2","Cttnbp2nl","Ctu1","Cttn","Ctu2","Ctxn3","Ctxn1","Cuedc1","Cuedc2","Ctxn2","Cubn","Cul2","Cul1","Cul4a","Cul3","Cul4b","Cul5","Cul7","Cutc","Cuta","Cul9","Cux2","Cwc15","Cuzd1","Cux1","Cwf19l1","Cwc25","Cwc22","Cwc27","Cwf19l2","Cwh43","Cx3cl1","Cxadrl1","Cxadr","Cx3cr1","Cxcl11","Cxcl1","Cxcl10","Cxcl13","Cxcl14","Cxcl16","Cxcl17","Cxcl12","Cxcl3","Cxcl2","Cxcl9","Cxcl6","Cxcr3","Cxcr6","Cxcr5","CXHXorf65","Cxcr4","Cxx1a","Cxcr1","Cxxc1","Cyb561","Cxxc5","Cyb561d1","Cxxc4","Cyb561a3","Cxcr2","Cyb5d1","Cyb561d2","Cyb5d2","Cyb5b","Cyb5r1","Cyb5a","Cyb5r2","Cyb5r3","Cyb5rl","Cybrd1","Cyc1-ps1","Cyb5r4","Cyc1","Cyba","Cybb","Cyct","Cycs","Cyfip2","Cygb","Cylc2","Cylc1","Cyhr1","Cyld-ps1","Cym","Cyld","Cyp11b1","Cyfip1","Cyp11b3","Cyp11b2","Cyp20a1","Cyp1a2","Cyp1b1","Cyp21a1","Cyp19a1","Cyp1a1","Cyp21a1-ps","Cyp26a1","Cyp24a1","Cyp26b1","Cyp26c1","Cyp27a1","Cyp27b1","Cyp2ab1","Cyp2a2","Cyp2ac1","Cyp2a1","Cyp2a3","Cyp2b13","Cyp2b12","Cyp2b1","Cyp2b15","Cyp2b21","Cyp2b2","Cyp2b31","Cyp17a1","Cyp2b3","Cyp2c11","Cyp2c12","Cyp2c22","Cyp2c13","Cyp2c23","Cyp2c24","Cyp2c77-ps","Cyp2c79","Cyp2c80","Cyp11a1","Cyp2c7","Cyp2c6v1","Cyp2d2","Cyp2d1","Cyp2d3","Cyp2d5","Cyp2g1","Cyp2f4","Cyp2d4","Cyp2j13","Cyp2e1","Cyp2j10","Cyp2j16","Cyp2j5-ps","Cyp2j3","Cyp2r1","Cyp2j4","Cyp2s1","Cyp2t1","Cyp2u1","Cyp2w1","Cyp39a1","Cyp3a62","Cyp3a18","Cyp3a2","Cyp3a71-ps","Cyp3a23/3a1","Cyp3a73","Cyp3a85-ps","Cyp46a1","Cyp4a34-ps","Cyp3a9","Cyp4a3","Cyp4a2","Cyp4b1","Cyp4a8","Cyp4a1","Cyp4f18","Cyp4f17","Cyp4f1","Cyp4f37","Cyp4f40","Cyp4f39","Cyp4f4","Cyp4f5","Cyp4x1","Cyp4f6","Cyp4v3","Cyp51a1-ps1","Cyp51","Cyp7a1","Cyp7b1","Cyp8b1","Cys1","Cysltr2","Cysrt1","Cyr61","Cystm1","Cyss","Cyth2","Cyth1","Cyth3","Cyth4","Cytip","Cytl1","Cyyr1","Da2-19","D2hgdh","Daam2","Daam1","Dab1","Cysltr1","Dab2","Dab2ip","Dach2","Dach1","Dact1","Dact2","Dact3","Dagla","Dalrd3","Dad1","Daglb","Dand5","Dag1","Dap","Dao","Dap3","Dapk2","Dapk1","Dapl1","Dapk3","Dapp1","Dars2","Daw1","Dars","Dazap2","Dazap1","Daxx","Dazl","Dbf4b","Dbf4","Dbil5","Dbh","Dbndd1","Dbndd2","Dbi","Dbn1","Dbnl","Dbp","Dancr","Dbr1","Dbt","Dbx1","Dbx2","Dcaf10","Dcaf1","Dcaf12","Dcaf11","Dcaf12l2","Dcaf12l1","Dcaf15","Dcaf13","Dcaf17","Dcaf4","Dcaf5","Dcaf8l1","Dcaf7","Dcaf8","Dcaf6","Dcakd","Dcbld1","Dcbld2","Dcdc1","Dcdc2b","Dcdc2","Dcdc5","Dchs2","Dcc","Dcdc2c","Dchs1","Dck","Dclre1b","Dclk3","Dclre1a","Dclre1c","Dclk2","Dcm5","Dclk1","Dcn","Dcp1b","Dcp2","Dcst1","Dcp1a","Dcstamp","Dcps","Dcst2","Dct","Dctn3l1","Dctn3","Dctd","Dctn5","Dctn2","Dctn4","Dctn1","Dctn6","Dctpp1","Dcun1d2","Dcun1d1","Dcun1d3","Dcun1d4","Dcun1d5","Dda1","Dcxr","Dcx","Ddah1","Ddah2","Ddb2","Ddb1","Ddhd1","Ddi1","Ddc","Ddhd2","Ddi2","Ddias","Ddit4","Ddit4l2","Ddit4l","Ddit3","Ddn","Ddo","Ddost","Ddrgk1","Ddt","Ddr2","Ddx1","Ddr1","Ddx10","Ddx11","Ddx17","Ddx18","Ddx20","Ddx19b","Ddx19a","Ddx23","Ddx24","Ddx21","Ddx25","Ddx3","Ddx27","Ddx28","Ddx31","Ddx39a","Ddx3y","Ddx39b","Ddx3x","Ddx4","Ddx41","Ddx42","Ddx43","Ddx46","Ddx47","Ddx49","Ddx51","Ddx50","Ddx5","Ddx54","Ddx52","Ddx55","Ddx56","Ddx58","Ddx59","Ddx60","Dear","Ddx6","Deaf1","Decr1","Dedd","Dedd2","Decr2","Def6","Defa10","Def8","Defa11","Defa24","Defa6","Defa7","Defa5","Defa9","Defa8","Defal1","Defb1","Defb10","Defb13","Defb12","Defb11","Defb16-ps","Defb14","Defb15","Defb17","Defb18","Defb19","Defb2","Defb20","Defb21","Defb23","Defb22","Defb24","Defb25","Defb26","Defb28","Defb27","Defb3","Defb29","Defb30","Defb36","Defb33","Defb37","Defb38","Defb39","Defb41","Defb40","Defb4","Defb43","Defb42","Defb44","Defb49","Defb5","Defb50","Defb51","Defb52","Defb9","Degs1","Degs2","Dek","Dennd1c","Dennd1b","Dennd1a","Dennd2a","Dennd2c","Dennd2d","Dennd3","Dennd4b","Dennd4c","Dennd4a","Dennd5a","Dennd5b","Dennd6a","Dennd6b","Denr","Depdc1","Depdc1b","Depdc7","Deptor","Depdc5","Dera","Derl1","Derl3","Det1","Desi1","Desi2","Des","Derl2","Deup1","Dexi","Dffa","Dffb","Dgat2l6","Dgat2","Dgat1","Dgcr2","Dgcr6","Dgcr8","Dgka","Dgke","Dgkb","Dgkd","Dgkg","Dgkh","Dgkk","Dgki","Dgkq","Dglucy","Dguok","Dgkz","Dhcr24","Dhdds","Dhdh","Dhcr7","Dhfr","Dhrs1","Dhh","Dhps","Dhodh","Dhrs11","Dhrs13","Dhrs2","Dhrs3","Dhrs7","Dhrs7c","Dhrs4","Dhrs7b","Dhrs7l1","Dhrs9","Dhrsx","Dhtkd1","Dhx15","Dhx29","Dhx16","Dhx32","Dhx33","Dhx34","Dhx30","Dhx35","Dhx37","Dhx57","Dhx36","Dhx38","Dhx58","Dhx40","Dhx8","Diablo","Dhx9","Diaph2","Diaph3","Diaph1","Dido1","Dicer1","Diexf","Dio3os","Dimt1","Dio1","Dio3","Dio2","Dip2a","Dip2b","Dip2c","Diras1","Diras2","Diras3","Dirc2","Dis3","Dis3l","Dis3l2","Disp1","Disc1","Disp2","Disp3","Dixdc1","Dkc1","Dkk2","Dkk1","Dkk4","Dkkl1","Dkk3","Dlat","Dleu7","Dlec1","Dld","Dlc1","Dlg3","Dlg1","Dlg2","Dlg5","Dlgap3","Dlgap2","Dlgap1","Dlgap4","Dlg4","Dlgap5","Dlk1","Dlk2","Dll3","Dll1","Dll4","Dlx1","Dlx3","Dlx2","Dlx4","Dlst","Dlx6","Dlx5","Dmac1","Dmac2","Dmbx1","Dmc1","Dmap1","Dmbt1","Dmkn","Dmgdh","Dmp1","Dmrt2","Dmrt1","Dmpk","Dmrt3","Dmrta1","Dmd","Dmrta2","Dmrtc1b","Dmrtb1","Dmrtc1a","Dmrtc1c1","Dmrtc2","Dna2","Dmtf1","Dmwd","Dmtn","Dmxl1","Dnaaf2","Dmxl2","Dnaaf1","Dnaaf3","Dnaaf5","Dnah10","Dnaaf4","Dnah14","Dnah1","Dnah11","Dnah12","Dnah3","Dnah17","Dnah5","Dnah6","Dnah2","Dnah8","Dnah7","Dnai1","Dnah9","Dnai2","Dnaja1","Dnaja2","Dnaja3","Dnaja4","Dnajb1","Dnajb11","Dnajb12","Dnajb13","Dnajb14","Dnajb3","Dnajb4","Dnajb2","Dnajb5","Dnajb7","Dnajb8","Dnajb6","Dnajb9","Dnajc1","Dnajc11","Dnajc10","Dnajc12","Dnajc15","Dnajc14","Dnajc13","Dnajc16","Dnajc17","Dnajc18","Dnajc19","Dnajc2","Dnajc22","Dnajc21","Dnajc24","Dnajc25","Dnajc28","Dnajc27","Dnajc30","Dnajc3","Dnajc4","Dnajc5b","Dnajc5","Dnajc5g","Dnajc7","Dnajc6","Dnajc9","Dnajc8","Dnal4","Dnal1","Dnali1","Dnase1","Dnase1l2","Dnase1l1","Dnase2","Dnase1l3","Dnd1","Dnase2b","Dner","Dnhd1","Dnlz","Dnmbp","Dnm1","Dnm3","Dnm2","Dnm1l","Dnmt3b-ps1","Dnmt3b","Dnmt3b-ps2","Dnpep","Dnmt3l","Dnmt1","Dnmt3a","Dnph1","Dnttip1","Dntt","Doc2a","Doc2g","Doc2b","Dock1","Dock10","Dock2-ps1","Dock2","Dnttip2","Dock11","Dock4","Dock3","Dock5","Dock6","Dohh","Dock7","Dock8","Dok1","Dok2","Dock9","Dok3","Dok4","Dok5","Dok6","Dok7","Dolk","Dolpp1","Donson","Dopey1","Dopey2","Doxl1","Dot1l","Dpagt1","Doxl2","Dpcd","Dpcr1","Dpep1","Dpep2","Dpep3","Dpf1","Dph1","Dph2","Dpf2","Dpf3","Dph3","Dph5","Dph6","Dph7","Dpm2","Dpm1","Dpm3-ps1","Dpm3","Dpp3l","Dpp3","Dpp7","Dpp9","Dpp10","Dpp8","Dppa1","Dpp4","Dpp6","Dppa1-ps1","Dppa3-ps2","Dppa3-ps1","Dppa3l1","Dppa3","Dppa4","Dppa5","Dpy19l1","Dpt","Dpy19l2","Dpy19l4","Dpy19l3","Dpy30","Dpys","Dpysl3","Dpysl2","Dpysl5","Dpysl4","Dqx1","Dr1","Dram1","Dram2","Draxin","Drap1","Drc3","Drc1","Drc7","Dpyd","Drg2","Drg1","Drgx","Drd3","Drd5","Drd4","Drd1","Drd2","Dsc1","Dsc3","Drosha","Dsc2","Drp2","Dscam","Dscaml1","Dscc1","Dscr3","Dsel","Dse","Dsg1","Dsg2","Dsg3","Dsg4","Dsn1","Dstnl1","Dsp","Dstn","Dspp","Dstyk","Dtd1","Dtd2","Dst","Dthd1","Dtl","Dtna","Dtnb","Dtnbp1","Dtwd1","Dtwd2","Dtx2-ps1","Dtx1","Dtx2","Dtx3","Dtx3l","Dtx4","Dtymk","Duoxa1","Duox1","Duox2","Duoxa2","Dupd1","Dus1l","Dus2","Dus4l","Dus3l","Dusp10","Dusp11","Dusp12","Dusp1","Dusp13","Dusp14l1","Dusp15","Dusp14","Dusp16","Dusp18","Dusp19","Dusp2","Dusp21","Dusp23","Dusp22","Dusp27","Dusp28","Dusp26","Dusp3","Dusp4","Dusp7","Dusp5","Dusp8","Dusp9","Dusp6","Dut-ps","Dut","Duxbl1","Dvl2","Dvl3","Dydc1","Dxo","Dydc2","Dvl1","Dym","Dynap","Dync1li1","Dync1li2","Dync1i1","Dync1i2","Dync1h1","Dync2li1","Dynll1","Dync2h1","Dynlrb1","Dynlrb2","Dynll2","Dynlt3","Dynlt1","Dyrk1b","Dyrk1a","Dyrk2","Dyrk3","Dyrk4","Dytn","Dzank1","Dysf","Dzip1-ps1","Dzip1","Dzip1l","E230034O05Rik","Dzip3","E2f2","E2f3","E2f1","E2f4","E2f5","E2f7","E2f8","E4f1","Eaf1","Eaf2","Eapp","Ear1","Ears2","Ears2l1","Ebag9","Ebf2","Ebf4","E2f6","Ebf1","Ebf3","Ebi3","Ebna1bp2","Ebpl","Ebp","Ece2","Ecd","Ecel1","Ech1","Echdc1","Ece1","Echdc2","Echdc3","Echs1","Eci1","Ecm1","Eci3","Eci2","Ecm2","Ecscr","Ecsit","Ect2l","Ect2","Edar","Eda","Eda2r","Edaradd","Edc3","Edc4","Eddm3b","Edem1","Edem3","Edem2","Edf1","Edil3","Edn3","Edn2","Edrf1","Eea1","Eed","Ednra","Eef1a2","Ednrb","Eef1akmt3","Eef1akmt2","Eef1a1","Eef1akmt1","Eef1b2","Edn1","Eef1e1","Eef1d","Eef1g","Eef2kmt","Eef2k","Eefsec","Eepd1","Eef2","Ef1","Efcab1","Efcab10","Efcab11","Efcab12","Efcab14","Efcab13","Efcab3","Efcab2","Efcab5","Efcab7","Efcab8","Efcab6","Efcab9","Efcc1","Efemp2","Efemp1","Efhb","Efhc1","Efhc2","Efhd1","Efhd2","Efl1","Efna2","Efna1","Efna3","Efna4","Efna5","Efnb2","Efnb1","Efnb3","Efr3a","Efr3b","Efs","Egfem1","Eftud2","Egfl6","Egfl7","Egf","Egfl8","Egflam","Egln2","Egln1","Egln3","Egr3","Egr2","Egr4","Ehbp1","Ehbp1l1","Ehd1","Egfr","Ehd2","Ehd3","Egr1","Ehf","Ehd4","Ehhadh","Ehmt1","Eid2","Ei24","Eid1","Eid2b","Eid3","Ehmt2","Eif1","Eif1ad","Eif1a","Eif1b","Eif1ax","Eif2a","Eif2ak1","Eif2b1","Eif2ak3","Eif2b2","Eif2ak4","Eif2b3","Eif2b4","Eif2ak2","Eif2b5","Eif2d-ps1","Eif2d","Eif2s2","Eif2s3y","Eif2s3","Eif2s1","Eif3a","Eif3b","Eif3c","Eif3d","Eif3e","Eif3f","Eif3el1","Eif3g","Eif3h","Eif3i-ps1","Eif3i","Eif3j","Eif3l","Eif3m","Eif3k","Eif4a1","Eif4b","Eif4a3","Eif4e1b","Eif4a2","Eif4e3","Eif4e","Eif4e2","Eif4ebp2","Eif4enif1","Eif4ebp1","Eif4g2-ps1","Eif4ebp3","Eif4g2-ps2","Eif4g1","Eif4g2","Eif4h","Eif4g3","Eif5a2","Eif5","Eif5b-ps1","Eif5a","Eif5b","Eif6","Eif6-ps1","Elac1","Eipr1","Elac2","Elane","Elavl1","Elavl3","Elavl4","Elavl2","Elf1","Elf3","Elf2","Elf4","Elfn2","Elf5","Elfn1","Elk1","Elk3","Elk4","Ell","Ell2","Ell3","Elmo1","Elmo2","Elmo3","Elmod2","Elmod1","Elmod3","Elmsan1","Eloa","Elob","Elof1","Eln","Elovl1","Elovl2","Eloc","Elovl3","Elovl4","Elovl5","Elovl7","Elovl6","Elp3","Elp2","Elp1","Elp4","Elp5","Elp6","Emb","Emc2","Emc1","Emc10","Emc3","Emc4","Emc6","Emc8","Emc7","Emc9","Emcn","Eme1","Emd","Eme2","Emg1","Emid1","Emilin3","Emilin1","Emilin2","Eml1","Eml2","Eml3","Eml4","Eml5","Emp1","Emp2","Emp3","Eml6","Emx1","Emsy","Emx2","En1","En2","Enam","Enah","Enc1","Endod1","Endog","Endou","Endov","Engase","Enkur","Enkd1","Eno1-ps1","Eng","Eno1","Eno4","Eno3","Eno2","Enoph1","Enox1","Enox2","Enpep","Enpp4","Enpp5","Enpp2","Enpp3","Enpp1","Enpp6","Enthd1","Enpp7","Ensa","Enho","Entpd2","Entpd1","Entpd3","Entpd4","Entpd6","Entpd5","Entpd7","Entpd8","Eny2","Eomes","Eogt","Epb41l1","Ep300","Ep400","Epas1","Epb41l4a","Epb41l2","Epb41","Epb41l3","Epc2l1","Epb41l5","Epc2","Epc1","Epb42","Epb41l4b","Epcam","Epdr1","Epgn","Epg5","Epha10","Epha1","Epha2","Epha3","Epha4","Epha5","Epha6","Epha8","Epha7","Ephb1","Ephb3","Ephb2","Ephb4","Ephb6","Ephx3","Ephx4","Ephx2","Epm2aip1","Epm2a","Epn1","Epn3","Epn2","Epop","Eppin","Eppk1","Epor","Epo","Eps15","Eprs","Ephx1","Eps15l1","Eps8","Eps8l1","Eps8l3","Eps8l2","Epx","Epsti1","Epyc","Eqtn","Eral1","Eras","Erap1","Erbin","Erc1","Erbb3","Erbb4","Erbb2","Erc2","Ercc4l1","Ercc4","Ercc3","Ercc5","Ercc6l","Ercc6l2","Ercc8","Ereg","Ercc2","Erf","Erfe","Ercc1","Erg28","Ergic1","Ercc6","Ergic2","Erg","Ergic3","Erh","Eri1","Eri2","Erich1","Erich3","Erich2","Eri3","Erich4","Erich5","Erich6b","Erich6","Erlec1","Erlin1","Erlin2","Ermap","Ermard","Ermn","Ermp1","Ern2","Ern1","Ero1b","Ero1a","Erp27","Erp44","Erp29","Ervfrd-1","Errfi1","Esco2-ps1","Esam","Esco2-ps2","Esco2","Esco1","Esd","Esm1","Espnl","Esf1","Espl1","Espn","Esrp1","Esrp2","Esrrb","Esrra","Ess2","Esx1","Esrrg","Esyt1","Esyt2","Esyt3","Etaa1","Esr2","Esr1","Etaa1l1","Etf1","Etfb","Etfa","Etfbkmt","Etfrf1","Ethe1","Etfdh","Etnk1","Etl4","Etnk2","Etnppl","Etv2","Ets2","Ets1","Etv1","Etv3","Etv3l","Etv5","Etv4","Eva1a","Eva1b","Etv6","Eva1c","Evc","Evc2","Evi2a","Evi5l","Evi5","Evl","Evpl","Evx1","Evx2","Evi2b","Ewsr1","Exd1","Exd2","Exoc1l","Exo1","Exo5","Exoc1","Exoc3l2","Exoc2","Exoc3","Exoc3l1","Exoc3l4","Exoc5","Exoc4","Exoc6","Exog","Exoc8","Exoc7","Exoc6b","Exosc1","Exosc2","Exosc10","Exosc3","Exosc6","Exosc5","Exosc7","Exosc4","Exosc8","Exph5","Exosc9","Ext2","Extl1","Ext1","Extl3","Extl2","Eya1","Eya2","Eya3","Eya4","Ezh1","F10","Ezr","Ezh2","F11","F11r","F12","F13b","F13a1","F2rl2","F2rl3","F2r","F2rl1","F2","F5","F8a1","F3","F7","Fa2h","F8","F9","Faah","Faap20","Faap100","Faap24","Fabp12","Fabp3","Fabp1","Fabp2","Fabp5","Fabp4","Fabp7","Fabp9","Fabp6","Fads1","Fads2","Fadd","Fads2l1","Fads6","Fads3","Faf1","Faf2","Fahd1","Fah","Fahd2a","Fam102a","Faim","Faim2","Fam102b","Fam103a1","Fam105a","Fam104a","Fam107a","Fam104b","Fam107b","Fam109a","Fam109b","Fam110a","Fam110d","Fam110b","Fam110c","Fam111a","Fam114a1l1","Fam114a1","Fam114a2","Fam115c","Fam115e","Fam117a","Fam117b","Fam118a","Fam118b","Fam120b","Fam120a","FAM120C","Fam122a","Fam122b","Fam122c","Fam124b","Fam124a","Fam126a","Fam126b","Fam129a","Fam129b","Fam131a","Fam129c","Fam133a","Fam131b","Fam131c","Fam133b","Fam135b","Fam135a","Fam136a","Fam13a","Fam13c","Fam149a","Fam13b","Fam149b1","Fam151b","Fam151a","Fam156b","Fam155b","Fam155a","Fam160a1","Fam160a2","Fam160b1","Fam160b2","Fam161b","Fam161a","Fam162a","Fam163a","Fam163b","Fam166b","Fam166a","Fam167a","Fam167b","Fam169a","Fam168a","Fam168b","Fam169b","Fam170a","Fam170b","Fam171a1","Fam173a","Fam171a2","Fam171b","Fam173b","Fam174a","Fam172a","Fam174b","Fam177a1","Fam177b","Fam180b","Fam180a","Fam178b","Fam181a","Fam181b","Fam183b","Fam184a","Fam184b","Fam185a","Fam186b","Fam187b","FAM187A","Fam188a","Fam188b","Fam188b2","Fam189a1","Fam189a2","Fam18b-ps1","Fam189b","Fam192a","Fam193b","Fam193a","Fam196b","Fam198a","Fam199x","Fam198b","Fam19a1","Fam19a3","Fam19a2","Fam19a4","Fam19a5","Fam204a","Fam205a","Fam205c","Fam206a","Fam196a","Fam207a","Fam208a","Fam209a","Fam208b","Fam20a","Fam20b","Fam210a","Fam212a","Fam20c","Fam210b","Fam212b","Fam213a","Fam213b","Fam216b","Fam214a","Fam217a","Fam214b","Fam216a","Fam217b","Fam219a","Fam219b","Fam220a","Fam222a","Fam221a","Fam221b","Fam222b","Fam227a","Fam227b","Fam228a","Fam229a","Fam234a","Fam229b","Fam228b","Fam234b","Fam237a","Fam241a","Fam241b","Fam24a","Fam25a","Fam32a","Fam3a","Fam35a","Fam3b","Fam3c","Fam3d","Fam43a","Fam43b","Fam45a","Fam46b","Fam46a","Fam46c","Fam47a","Fam47e","Fam46d","Fam48b1","Fam49a","Fam50a","Fam49b","Fam50b","Fam53a","Fam53b","Fam53c","Fam57a","FAM58A-ps1","Fam57b","Fam58b","Fam69a","Fam69c","Fam71a","Fam69b","Fam71b","Fam71d","Fam71e1","Fam71e2","Fam71f1","Fam71f2","Fam76a","Fam72a","Fam76b","Fam78a","Fam78b","Fam81a","Fam83a","Fam81b","Fam83c","Fam83b","Fam83d","Fam83e","Fam83f","Fam83g","Fam83h","Fam84b","Fam89a","Fam84a","Fam89b","Fam8a1","Fam90a1-ps1","Fam90a1","Fam92a","Fam92b","Fam91a1","Fam96b","Fam98a","Fam96a","Fam98b","Fam9b","Fam98c","Fam9c","Fan1","Fancb","Fanca","Fancd2os","Fancc","Fance","Fancd2","Fancf","Fancg","Fanci","Fancm","Fancl","Fank1","Fap","Far2","Far1","Farp1","Farsa","Fars2","Farp2","Farsb","Fastk","Fasn","Fastkd1","Fastkd2","Fastkd5","Fastkd3","Fas","Fat1","Fat2","Fat4","Fat3","Faxc","Fau","Faxdc2","Fblim1","Fbl","Fbll1","Faslg","Fbf1","Fbln2","Fbln1","Fbln7","Fbln5","Fbp2","Fbn2","Fbrs","Fbp1","Fbrsl1","Fbxl12","Fbn1","Fbxl14","Fbxl13","Fbxl15","Fbxl16","Fbxl17","Fbxl18","Fbxl19","Fbxl2","Fbxl20","Fbxl21","Fbxl22","Fbxl3","Fbxl5","Fbxl4","Fbxl6","Fbxl7","Fbxl8","Fbxo10","Fbxo11","Fbxo15","Fbxo16","Fbxo17","Fbxo18","Fbxo2","Fbxo22","Fbxo21","Fbxo25","Fbxo24","Fbxo27","Fbxo28","Fbxo3","Fbxo30","Fbxo31","Fbxo33","Fbxo32","Fbxo34","Fbxo36","Fbxo38","Fbxo4","Fbxo39","Fbxo40","Fbxo43","Fbxo41","Fbxo42","Fbxo44","Fbxo45","Fbxo47","Fbxo46","Fbxo48","Fbxo5","Fbxo6","Fbxo7","Fbxo8","Fbxw10","Fbxo9","Fbxw12","Fbxw17","Fbxw11","Fbxw2","Fbxw4","Fbxw5","Fbxw8","Fcamr","Fbxw9","Fbxw7","Fcar","Fcer1a","Fcgbp","Fcer1g","Fcf1","Fcgbpl1","Fcer2","Fcgr1a","Fcgr2a","Fcho1","Fcho2","Fcgr2b","Fcgrt","Fcgr3a","Fchsd1","Fchsd2","Fcmr","Fcnb","Fcna","Fcrl5","Fcrl2","Fcrl1","Fcrl6","Fcrla","Fcrlb","Fdcsp","Fdxacb1","Fdx1l","Fdx1","Fdft1","Fdps","Fdxr","Fem1a","Fendrr","Fem1b","Fem1c","Fech","Fen1","Fer1l4","Ferd3l","Fer","Fermt1","Fer1l6","Fer1l5","Fermt3","Fermt2","Fes","Fev","Fetub","Fezf1","Fezf2","Fez1","Fez2","Ffar1","Ffar2","Ffar3","Ffar4","Fgd2","Fgd3","Fgd1","Fgb","Fga","Fgd4","Fgd5","Fgd6","Fgf11","Fgf12","Fgf10","Fgf1","Fgf13","Fgf14","Fgf16","Fgf17","Fgf18","Fgf19","Fgf20","Fgf22","Fgf21","Fgf3","Fgf23","Fgf4","Fgf5","Fgf6","Fgf7","Fgf2","Fgfr1-ps1","Fgfbp1","Fgfbp3","Fgf8","Fgf9","Fgfr1op2","Fgfr1op","Fgfr1","Fgfrl1","Fgfr3","Fgfr4","Fgg","Fgl1","Fgfr2","Fggy","Fgl2","Fh","Fgr","Fhdc1","Fhad1","Fhit","Fhl1","Fhl3","Fhl4","Fhl2","Fhl5","Fibcd1","Fhod1","Fhod3","Fibcd1l1","Fibin","Fibp","Ficd","Figla","Fign","Fig4","Fignl2","Fignl1","Filip1","Filip1l","Fip1l1","Fitm1","Fitm2","Fjx1","Fiz1","Fis1","Fkbp10","Fkbp11","Fkbp14","Fkbp15","Fkbp3","Fkbp1b","Fkbp2","Fkbp1a","Fkbp4","Fkbp6","Fkbp5","Fkbp7","Fkbp9","Fkbp8","Fkbpl","Fkrp","Flad1","Flg","Flg2","Fktn","Flcn","Flii","Fli1","Flnc","Flna","Flrt1","Flnb","Flot1","Flrt3","Flrt2","Flot2","Flvcr1","Flt3lg","Flywch2","Flywch1","Flvcr2","Flt3","Flt4","Fmc1","Flt1","Fmn2","Fmn1","Fmnl2","Fmnl1","Fmnl3","Fmo1","Fmo13","Fmo2","Fmo3","Fmo4","Fmo6","Fmo5","Fmo9","Fmod","Fmr1nb","Fn3k","Fn3krp","Fmr1","Fnbp1","Fnbp4","Fnbp1l","Fnd3c2","Fndc1","Fndc10","Fndc11","Fn1","Fndc3b","Fndc3c1","Fndc3a","Fndc5","Fndc7","Fndc8","Fndc9","Fnip1","Fnip2","Fnta","Fntb","Folr2","Fopnl","Focad","Folh1","Folr1","Fosl1","Foxb1","Fosl2","Fosb","Foxb2","Fos","Foxd1","Foxc2","Foxc1","Foxd2","Foxa3","Foxd3","Foxa2","Foxa1","Foxd4","Foxe1","Foxe3","Foxf2","Foxf1","Foxi1","Foxh1","Foxg1","Foxi2","Foxi3","Foxj1","Foxj2","Foxk1","Foxj3","Foxl1","Foxk2","Foxl2","Foxm1","Foxn1","Foxn2","Foxn4","Foxn3","Foxo6","Foxo4","Foxo1","Foxo3","Foxp4","Foxp3","Foxq1","Foxr1","Foxred1","Foxr2","Foxred2","Foxs1","Fpgs","Fpgt","Fpr-rs3","Fpr-rs4","Fpr-rs6","Fpr1","Fpr2l","Fpr3","Fpr2","Fra10ac1","Foxp2","Foxp1","Frat1","Frat2","Fras1","Frg1l1","Frem2","Frem3","Frem1","Frg1","Frg2","Frmd1","Frk","Frmd4a","Frmd3","Frmd6","Frmd4b","Frmd5","Frmd7","Frmd8","Frmpd3","Frmpd2","Frmpd1","Frrs1l","Frrs1","Frmpd4","Frs3","Frs2","Fsbp","Fry","Frzb","Fscb","Fryl","Fscn1","Fscn2","Fscn3","Fsd1","Fsd1l","Fsd2","Fsip2","Fshb","Fsip1","Fsip2-ps1","Fshr","Fst","Fstl1","Fstl3","Fstl4","Fthl17c","Fstl5","Ftcd","Fthl17e","Ftl1l1","Ftmt","Fto","Ftsj1","Ftl1","Ftsj3","Fth1","Ftx","Fubp1","Fubp3","Fuca2","Fuk","Fundc1","Fundc2","Fuom","Fuca1","Fut1","Fus","Fut10","Fut11","Fut7","Fut4","Fut2","Fut9","Fut8","Fxc1-ps1","Fuz","Fv1","Fxr1","Fxn","Furin","Fxr2","Fxyd3","Fxyd4","Fxyd1","Fxyd5","Fxyd2","Fxyd7","Fxyd6","Fyb2","Fyco1","Fyb1","Fzd10","Fyttd1","Fzd1","Fzd2","Fyn","Fzd3","Fzd5","Fzd6","Fzd7","Fzd4","Fzd8","Fzd9","Fzr1","G0s2","G2e3","G4","G3bp1","G3bp2","G6pc2","G6pc","G7e-ps1","G6pc3","G8","Gab1","Gaa","Gab2","G6pd","Gabarap","Gabarapl1","Gabarapl2","Gabpa","Gabpb1","Gabpb1l","Gabbr2","Gabpb2","Gabbr1","Gabra2","Gabra1","Gabra4","Gabra3","Gabra6","Gabra5","Gabrb1","Gabrb2","Gabrb3","Gabrd","Gabre","Gabrg1","Gabrg3","Gabrg2","Gabrp","Gabrq","Gabrr1","Gabrr3","Gabrr2","Gad2","Gadd45b","Gadd45a","Gad1","Gadd45g","Gadl1","Gadd45gip1","Gak","Gal3st2","Gal3st3","Gal3st1","Gal3st4","Gal","Galc","Gale","Galk1","Galm","Galk2","Galns","Galnt1","Galnt10","Galnt11","Galnt12","Galnt15","Galnt14","Galnt16","Galnt13","Galnt17","Galnt18","Galnt3","Galnt2","Galnt4","Galnt5","Galnt6","Galnt7","Galnt9","Galntl5","Galp","Galntl6","Galr1","Galr3","Galr2","Gan","Gamt","Galt","Ganab","Ganc","Gapdh-ps1","Gapdh-ps2","Gapt","Gap43","Gapvd1","Gapdhs","Gar1","Garem1","Garem2","Gas1","Garnl3","Gapdh","Gars","Gart","Gas2","Gas2l1","Gas2l2","Gas5","Gas2l3","Gas8","Gast","Gas7","Gas6","Gata1","Gata2","Gata3","Gata5","Gatad1","Gatad2a","Gata6","Gata4","Gatad2b","Gatb","Gatc","Gatd1","Gba2","Gatm","Gba3","Gbe1","Gba","Gbgt1","Gbp1","Gbf1","Gbp3","Gbp2","Gbp4","Gbx1","Gbp6","Gbp5","Gbx2","Gca","Gcat","Gcc1","Gc","Gcc2","Gcdh","Gcfc2","Gcg","Gchfr","Gch1","Gcgr","Gckr","Gclm","Gclc","Gck","Gcm1","Gcm2","Gcn1l1","Gcnt1","Gcnt3","Gcnt2","Gcnt4","Gcnt6","Gcnt7","Gcsam","Gcsh","Gdap1l1","Gda","Gdap1","Gdap2","Gde1","Gdf1","Gdf10","Gdf11","Gdf15","Gdf2","Gdf3","Gdf5","Gdf6","Gdf7","Gdf9","Gdpd1","Gdi1","Gdpd3","Gdpd2","Gdi2","Gdpd4","Gdpd5","Gdpgp1","Gem","Gdnf","Gemin6","Gemin4","Gemin2","Gemin5","Gemin7","Gemin7l1","Gemin8","Gen1","Get4","Gfer","Gfi1","Gfi1b","Gfap","Gfm2","Gfm1","Gfod1","Gfod2","Gfpt1","Gfpt2","Gfra1","Gfy","Gfral","Gfra3","Gfra2","Gfra4","Gga1","Gga2","Ggact","Gga3","Ggn","Ggct","Ggh","Ggcx","Ggnbp1","Ggnbp2","Ggps1","Ggt6","Ggt5","Ggt7","Ggt1","Ggta1","Ggta1l1","Ghdc","Ghitm","Gh1","Ghrhr","Ghr","Ghrh","Ghsr","Gid4","Gid8","Ghrl","Gif","Gimap4","Gigyf1","Gigyf2","Gimap1","Gimap6","Gimap5","Gimap7","Gimd1","Gimap9","Gimap8","Gin1","Ginm1","Gins1","Gins2","Gins3","Gins4","Giot1","Gip","Gipc2","Gipc3","Gipc1","Gipr","Git1","Git2","Gja10","Gja3","Gja4","Gja6","Gja5","Gja8","Gjb1","Gjb4","Gjb5","Gjb2","Gjb6","Gjc1","Gjc2","Gjc3","Gja1","Gjd3","Gjd2","Gje1","Gjb3","Gjd4","Gk2","Gk5","Gk","Gkn1","Gkap1","Gkn3","Gkn2","Gla","Glb1l","Glb1l2","Glb1l3","Glcci1","Glce","Gldn","Gldc","Gle1-ps1","Gle1","Glg1","Gli1","Glb1","Gli2","Gli4","Glipr1","Glipr1l1","Gli3","Glipr1l2","Glis1","Glipr2","Glis3","Glis2","Glmp","Glmn","Glo1","Glod4","Glod5","Glp2r","Glp1r","Glra1","Glra2","Glra4","Glra3","Glrb","Glrx2","Glrx","Glrx5","Glt1d1","Glt6d1","Glrx3","Gls2","Gls","Glt8d1","Glt8d2","Gltp","Gltpd2","Glyatl1","Glyat","Glul","Glud1","Glyatl2","Glyctk","Glycam1","Glyatl3","Gm2a","Glyr1","Gm5471","Gmcl1l","Gmcl1","Gmds","Gmeb1","Gmeb2","Gmfg","Gmfb","Gmip","Gml","Gmnc","Gmppb","Gmnn","Gmppa","Gmpr","Gmpr2","Gna12","Gmps","Gna11","Gna14","Gna13","Gna15","Gnai1","Gnai3","Gnal","Gnai2","Gnao1","Gnat1","Gnaq","Gnat3","Gnat2","Gnaz","Gnas","Gnb1l","Gnb1","Gnb3","Gnb2","Gnb4","Gnb5","Gne","Gng11","Gng10","Gng13","Gng14","Gng12","Gng2","Gng3","Gng4","Gng7","Gng5","Gngt1","Gngt2","Gng8","Gnl1","Gnl3","Gnl2","Gnl3l","Gnpda1","Gnmt","Gnpda2","Gnpat","Gnpnat1","Gnptab","Gnptg","Golga1","Gns","Gnrhr","Gnrh1","Golga2","Golga3","Golga5","Golga4","Golga7b","Golga7","Golgb1","Golm1","Golim4","Golph3","Golph3l","Golt1a","Golt1b","Gon7","Gon4l","Gopc","Gorab","Gorasp2","Gorasp1","Gosr1","Gosr2","Got1l1","Got1","Gp1ba","Gp1bb","Got2","Gp2","Gp6","Gp5","Gp9","Gpalpp1","Gpa33","Gpaa1","Gpank1","Gpat2","Gpat3","Gpam","Gpat4","Gpatch11","Gpatch1","Gpatch2","Gpatch3","Gpatch2l","Gpatch4","Gpbar1","Gpatch8","Gpbp1l2","Gpbp1l1","Gpbp1","Gpc2","Gpc1","Gpc4","Gpc3","Gpc5","Gpcpd1","Gpd1l","Gpc6","Gpd1","Gpd2","Gpha2","Gphb5","Gper1","Gpihbp1","Gpkow","Gpi","Gphn","Gpld1","Gpn1","Gpm6b","Gpm6a","Gpn2","Gpn3","Gpr1","Gpr112l","Gpr101","Gpnmb","Gpr107","Gpr108","Gpr119","Gpr12","Gpr137","Gpr135","Gpr132","Gpr137b","Gpr141","Gpr137c","Gpr139","Gpr142","Gpr146","Gpr143","Gpr149","Gpr15","Gpr151","Gpr152","Gpr150","Gpr153","Gpr157","Gpr156","Gpr155","Gpr158","Gpr160","Gpr161","Gpr162","Gpr165","Gpr17","Gpr171","Gpr173","Gpr174","Gpr176","Gpr18","Gpr179","Gpr180","Gpr20","Gpr183","Gpr19","Gpr182","Gpr21","Gpr25","Gpr22","Gpr26","Gpr32","Gpr31","Gpr27","Gpr3","Gpr33","Gpr34","Gpr35","Gpr37l1","Gpr37","Gpr4","Gpr39","Gpr45","Gpr52","Gpr50","Gpr55","Gpr6","Gpr61","Gpr62","Gpr63","Gpr65","Gpr68","Gpr75","Gpr82","Gpr83","Gpr84","Gpr87","Gpr85","Gpr88","Gprasp1","Gpr89b","Gprasp2","Gprc5a","Gprc5b","Gprc5d","Gprc5c","Gprin1","Gprc6a","Gprin2","Gprin3","Gps2","Gps1","Gpsm2","Gpsm3","Gpsm1","Gpt","Gpt2","Gpx2-ps1","Gpx2-ps2","Gpx2","Gpx4-ps1","Gpx4-ps2","Gpx3","Gpx4-ps3","Gpx4","Gpx1","Gpx5","Gpx7","Gpx6","Gpx8","Gramd1a","Gramd1c","Gramd2","Gramd1b","Gramd3","Grap","Gramd4","Grap2","Grasp","Grb10","Grb14","Grb7","Greb1l","Greb1","Grcc10","Grb2","Grhl1","Grem1","Grem2","Grhl2","Grhl3","Grhpr","Grid1","Gria3","Gria4","Grid2ip","Grifin","Gria1","Grid2","Gria2","Grik3","Grik4","Grik1","Grik5","Grik2","Grin3a","Grin2c","Grin2d","Grin3b","Grina","Grin2a","Grin2b","Grin1","Grip2","Gripap1","Grk1","Grip1","Grk4","Grk3","Grk2","Grlf1-ps1","Grk5","Grk6","Grm2","Grm4","Grm3","Grm1","Grm6","Grm5","Grm7","Grm8","Grn","Grpel1","Grp","Grpel2","Grpr","Grsf1","Grwd1","Grxcr1","Grxcr2","Grtp1","Gsc","Gsap","Gsc2","Gsdmc","Gsdma","Gsdmd","Gsdme","Gsg1","Gsg1l2","Gse1","Gsg1l","Gskip","Gsk3a","Gspt2","Gspt1","Gsn","Gss","Gsr","Gsta2","Gsta5","Gsta1","Gsta3","Gsta4","Gstcd","Gsk3b","Gstk1","Gstm3","Gstm3l","Gstm4","Gstm5","Gstm6","Gstm2","Gstm6l","Gstm7","Gstp-ps1","Gsto1","Gsto2","Gstm1","Gstt3","Gstt2","Gstt4","Gsx1","Gstt1","Gstz1","Gstp1","Gsx2","Gtdc1","Gtf2a1","Gtf2a1l","Gtf2a2","Gtf2e1","Gtf2b","Gtf2e2","Gtf2f1","Gtf2f2","Gtf2h1","Gtf2h2","Gtf2h3","Gtf2h4","Gtf2h5","Gtf2i","Gtf2ird2","Gtf3a","Gtf3c1","Gtf2ird1","Gtf3c2","Gtf3c4","Gtf3c3","Gtf3c5","Gtf3c6","Gtpbp1","Gtpbp10","Gtpbp2","Gtpbp3","Gtpbp6","Gtpbp8","Gtpbp4","Gtse1","Gtsf1","Gtsf1l","Guca1a","Guca1b","Guca2a","Gucd1","Guca2b","Gucy1a2","Gucy1a3","Gucy2d","Gucy1b2","Gucy2c","Gucy1b3","Gucy2e","Gucy2f","Gucy2g","Guk1","Guf1","Gulo","Gulp1","Gvin1","Gusb","Gvinp1","Gxylt1","Gxylt2","Gykl1","Gyg1","Gypa","Gypc","Gys1","Gys2","Gzf1","Gzma","Gzmbl1","Gzmbl3","Gzmbl2","Gzmb","Gzmf","Gzmc","Gzmk","Gzmm","Gzmn","H1fnt","H1foo","H1f0","H19","H2afb3","H1fx","H2afj","H2afv","H2afy","H2afy2","H2afx","H2afz","H3f3c","H3f3a","H3f3b","H6pd","Habp4","Habp2","Haao","Hacd1","Hacd2","Hacd3","Hacd4","Hace1","Hacl1","Hadh","Hadhb","Hadha","Hagh","Haghl","Hal","Hand1","Hand2","Hao1","Hamp","Hao2","Hap1","Hapln1","Hapln2","Hapln3","Harbi1","Hapln4","Hars","Hars2","Has1","Has2","Has3","Haspin","Hat1","Haus2","Haus1","Haus3","Haus4","Haus5","Haus8-ps1","Haus7","Haus8","Hax1","Havcr2","Havcr1","Hba-a2","Hba-a3","Hba-a1","Hbb-b1","Hbe2","Hbe1","Hbegf","Hbq1","Hbg1","Hbq1b","Hbp1","Hbz","Hbs1l","Hbb","Hcar1","Hcar2","Hccs","Hcfc1r1","Hcfc1","Hcfc2","Hcls1","Hck","Hcn3","Hcn2","Hcn1","Hcn4","Hcst","Hcrtr2","Hcrtr1","Hcrt","Hdac11","Hdac10","Hdac1l","Hdac1","Hdac2","Hdac3","Hdac4","Hdac5","Hdac7","Hdac6","Hdac8","Hddc2","Hddc3","Hdc","Hdac9","Hdgfl1","Hdgf","Hdgfl3","Hdgfl2","Hdhd3","Hdhd2","Hdhd5","Hdx","Heatr1l1","Hdlbp","Heatr3","Heatr4","Heatr5a","Heatr5b","Heatr6","Heatr9","Hebp2","Hebp1","Heatr1","Heca","Hectd3","Hectd2","Hecw2","Hectd1","Hecw1","Hectd4","Helb","Heg1","Hells","Helq","Helz2","Helt","Helz","Hemgn","Hemk1","Henmt1","Hepacam","Hepacam2","Hephl1","Heph","Herc3","Herc1","Herc6","Herc2","Herc4","Herpud2","Herpud1","Hes2","Hes3","Hes5","Hes1","Hes6","Hes7","Hesx1","Hexa","Hexim1","Hexdc","Hexb","Hey1","Hexim2","Hey2","Heyl","Hfe2","Hgd","Hfm1","Hfe","Hgh1","Hgfac","Hgs","Hgsnat","Hhat","Hhex","Hhatl","Hgf","Hhipl1","Hhip","Hhipl2","Hhla2","Hiatl3","Hic1","Hibadh","Hibch","Hid1","Hic2","Higd1c","Hif1an","Higd1a","Higd1b","Hif3a","Higd2a","Hiat1-ps1","Higd2al1","Hilpda","Hils1","Hikeshi","Hint1","Hinfp","Hint1-ps1","Hint2","Hint3","Hipk2","Hip1r","Hipk1","Hip1","Hipk4","Hipk3","Hira","Hirip3","Hist1h1a","Hist1h1b","Hist1h1d","Hist1h1c","Hist1h1e","Hist1h1t","Hist1h2ac","Hist1h2af","Hist1h2aa","Hist1h2ah","Hist1h2ai","Hist1h2ail1","Hif1a","Hist1h2ak","hist1h2ail2","Hist1h2an","Hist1h2ba","Hist1h2bcl1","Hist1h2bd","Hist1h2ao","Hist1h2bg","Hist1h2bh","Hist1h2bk","Hist1h2bl","Hist1h2bo","Hist1h2bq","Hist1h3b","Hist1h3a","Hist1h4a","Hist2h2aa2","Hist1h4m","Hist1h4b","Hist2h2aa3","Hist2h2bb","Hist2h2ab","Hist2h2ac","Hist2h2be","Hist2h3c2","Hist2h4a","Hist2h4","Hist3h2ba","Hist3h2a","Hist3h2bb","Hist3h3","Hist4h4","Hivep1","Hivep3","Hjurp","Hivep2","Hk1","Hk2","Hk3","Hkdc1","Hlcs","Hlf","Hltf","Hlx","Hm13","Hmbox1","Hmbs","Hmces","Hmcn1","Hmcn2","Hmg1l1","Hmg20a","Hmg20b","Hmga1","Hmga2","Hmgb1","Hmgb1-ps1","Hmgb1-ps2","Hmgb1-ps3","Hmgb1-ps4","Hmgb2","Hmgb2l1","Hmgb3","Hmgb4","Hmgcl","Hmgcll1","Hmgcr","Hmgcs1","Hmgcs2","Hmgn1","Hmgn2","Hmgn3","Hmgn4","Hmgn5","Hmgn5b","Hmgxb3","Hmgxb4","Hmmr","Hmox1","Hmox2","Hmox2-ps1","Hmx1","Hmx2","Hmx3","Hnf1a","Hnf1b","Hnf4a","Hnf4g","Hnmt","Hnrnpa0","Hnrnpa1","Hnrnpa1-ps1","Hnrnpa2b1","Hnrnpa3","Hnrnpa3-ps1","Hnrnpab","Hnrnpc","Hnrnpd","Hnrnpdl","Hnrnpf","Hnrnph1","Hnrnph2","Hnrnph3","Hnrnpk","Hnrnpl","Hnrnpll","Hnrnpm","Hnrnpr","Hnrnpu","Hnrnpul1","Hnrnpul2","Hoga1","Homer1","Homer2","Homer3","Homez","Hook1","Hook2","Hook3","Hopx","Hormad1","Hormad2","Hotairm1","Hoxa1","Hoxa10","Hoxa11","Hoxa11-as","Hoxa13","Hoxa2","Hoxa3","Hoxa4","Hoxa5","Hoxa6","Hoxa7","Hoxa9","Hoxaas3","Hoxb1","Hoxb13","Hoxb2","Hoxb3","Hoxb4","Hoxb5","Hoxb5os","Hoxb6","Hoxb7","Hoxb8","Hoxb9","Hoxc10","Hoxc11","Hoxc12","Hoxc13","Hoxc4","Hoxc5","Hoxc6","Hoxc8","Hoxc9","Hoxd1","Hoxd10","Hoxd11","Hoxd12","Hoxd13","Hoxd3","Hoxd4","Hoxd8","Hoxd9","Hp","Hp1bp3","Hpca","Hpcal1","Hpcal4","Hpd","Hpdl","Hpf1","Hpgd","Hpgds","Hpn","Hprt1","Hps1","Hps3","Hps4","Hps5","Hps6","Hpse","Hpse2","Hpx","Hr","Hras","Hrasls","Hrasls5","Hrc","Hrct1","Hrg","Hrh1","Hrh2","Hrh3","Hrh4","Hrk","Hrnr","Hs1bp3","Hs2st1","Hs3st1","Hs3st2","Hs3st3a1","Hs3st3b1","Hs3st4","Hs3st5","Hs3st6","Hs6st1","Hs6st2","Hs6st3","Hsbp1","Hsbp1l1","Hsc70-ps1","Hsc70-ps2","Hscb","Hsd11b1","Hsd11b2","Hsd17b1","Hsd17b10","Hsd17b11","Hsd17b12","Hsd17b13","Hsd17b14","Hsd17b2","Hsd17b3","Hsd17b4","Hsd17b6","Hsd17b7","Hsd17b8","Hsd3b1","Hsd3b2","Hsd3b3","Hsd3b5","Hsd3b7","Hsdl1","Hsdl2","Hsf1","Hsf2","Hsf2bp","Hsf4","Hsf5","Hsfy2","Hsh2d","Hsp90aa1","Hsp90ab1","Hsp90b1","Hspa12a","Hspa12b","Hspa13","Hspa14","Hspa1a","Hspa1b","Hspa1l","Hspa2","Hspa4","Hspa4l","Hspa5","Hspa8","Hspa8-ps1","Hspa9","Hspb1","Hspb11","Hspb2","Hspb3","Hspb6","Hspb7","Hspb8","Hspb9","Hspbap1","Hspbp1","Hspd1","Hspd1-ps1","Hspd1-ps10","Hspd1-ps11","Hspd1-ps12","Hspd1-ps13","Hspd1-ps14","Hspd1-ps15","Hspd1-ps16","Hspd1-ps17","Hspd1-ps18","Hspd1-ps19","Hspd1-ps2","Hspd1-ps20","Hspd1-ps21","Hspd1-ps22","Hspd1-ps23","Hspd1-ps25","Hspd1-ps26","Hspd1-ps27","Hspd1-ps28","Hspd1-ps29","Hspd1-ps3","Hspd1-ps31","Hspd1-ps32","Hspd1-ps4","Hspd1-ps5","Hspd1-ps6","Hspd1-ps7","Hspd1-ps8","Hspd1-ps9","Hspe1","Hspg2","Hsph1","Htatip2","Htatsf1","Htr1a","Htr1b","Htr1d","Htr1f","Htr2a","Htr2b","Htr2c","Htr3a","Htr3b","Htr4","Htr5a","Htr5b","Htr6","Htr7","Htra1","Htra2","Htra3","Htra4","Htt","Hunk","Hus1","Hus1b","Huwe1","Hvcn1","Hyal1","Hyal2","Hyal3","Hyal4","Hyal5","Hyal6","Hydin","Hyi","Hykk","Hyls1","Hyou1","Hypk","Hypm","Iah1","Iapp","Iars","Iars2","Iba57","Ibsp","Ibtk","Ica1","Ica1l","Icam1","Icam2","Icam4","Icam5","Ice1","Ice2","Ick","Icmt","Icos","Icoslg","Id1","Id2","Id3","Id4","Ide","Idh1","Idh2","Idh3a","Idh3B","Idh3g","Idi1","Idi2","Idnk","Ido1","Ido2","Ids","Idua","Ier2","Ier3","Ier3ip1","Ier5","Ier5l","Iffo1","Iffo2","Ifi203-ps1","Ifi27","Ifi27l2b","Ifi30","Ifi35","Ifi44","Ifi44l","Ifi47","Ifih1","Ifit1","Ifit1bl","Ifit2","Ifit3","Ifitm1","Ifitm10","Ifitm2","Ifitm3","Ifitm5","Ifitm6","Ifitm7","Ifna1","Ifna11","Ifna16l1","Ifna2","Ifna4","Ifna5","Ifnar1","Ifnar2","Ifnb1","Ifne","Ifng","Ifngr1","Ifngr2","Ifnk","Ifnl1","Ifnl3","Ifnlr1","Ifrd1","Ifrd2","Ift122","Ift140","Ift172","Ift20","Ift22","Ift27","Ift43","Ift46","Ift52","Ift57","Ift74","Ift80","Ift81","Ift88","Igbp1","Igbp1b","Igdcc3","Igdcc4","Igf1","Igf1r","Igf2","Igf2bp1","Igf2bp2","Igf2bp3","Igf2r","Igfals","Igfbp1","Igfbp2","Igfbp3","Igfbp4","Igfbp5","Igfbp6","Igfbp7","Igfbpl1","Igfl3","Igflr1","Igfn1","IgG-2a","Igh-6","Ighe","Ighg1","Ighmbp2","Ighv","Igip","Igkc","Igkv28","Igl","Igll1","Iglon5","Igsf1","Igsf10","Igsf11","Igsf21","Igsf22","Igsf23","Igsf3","Igsf5","Igsf6","Igsf7","Igsf8","Igsf9","Igsf9b","Igtp","Ihh","Ik","Ikbip","Ikbkb","Ikbke","Ikbkg","Ikzf1","Ikzf2","Ikzf3","Ikzf4","Ikzf5","Il10","Il10ra","Il10rb","Il11","Il11ra1","Il12a","Il12b","Il12rb1","Il12rb2","Il13","Il13ra1","Il13ra2","Il15","Il15ra","Il16","Il17a","Il17b","Il17c","Il17d","Il17f","Il17ra","Il17rb","Il17rc","Il17rd","Il17re","Il18","Il18bp","Il18r1","Il18rap","Il19","Il1a","Il1b","Il1f10","Il1r1","Il1r2","Il1rap","Il1rapl1","Il1rapl2","Il1rl1","Il1rl2","Il1rn","Il2","Il20","Il20ra","Il20rb","Il21","Il21r","Il22","Il22ra1","Il22ra2","Il23a","Il23r","Il24","Il25","Il27","Il27ra","Il2ra","Il2rb","Il2rg","Il3","Il31","Il31ra","Il33","Il34","Il36a","Il36b","Il36g","Il36rn","Il3ra","Il4","Il4i1","Il4r","Il5","Il5ra","Il6","Il6r","Il6st","Il7","Il7r","Il9","Il9r","Ildr1","Ildr2","Ilf2","Ilf3","Ilk","Ilkap","Ilvbl","Immp1l","Immp2l","Immt","Imp3","Imp4","Impa1","Impa2","Impact","Impad1","Impdh1","Impdh2","Impg1","Impg2","Ina","Inafm1","Inafm2","Inca1","Incenp","Inf2","Ing1","Ing2","Ing3","Ing4","Ing5","Inha","Inhba","Inhbb","Inhbc","Inhbe","Inip","Inmt","Ino80","Ino80b","Ino80c","Ino80d","Ino80e","Inpp1","Inpp4a","Inpp4b","Inpp5a","Inpp5b","Inpp5d","Inpp5e","Inpp5f","Inpp5j","Inpp5k","Inppl1","Ins1","Ins2","Insc","Insig1","Insig2","Insl3","Insl5","Insl6","Insm1","Insm2","Insr","Insrr","Ints1","Ints10","Ints11","Ints12","Ints13","Ints14","Ints2","Ints3","Ints4","Ints5","Ints6","Ints6l","Ints7","Ints8","Ints9","Intu","Invs","Ip6k1","Ip6k2","Ip6k3","Ipcef1","Ipmk","Ipo11","Ipo13","Ipo4","Ipo5","Ipo7","Ipo9","Ipp","Ippk","Iqank1","Iqca1","Iqca1l","Iqcb1","Iqcc","Iqcd","Iqce","Iqcf1","Iqcf3","Iqcf5","Iqcf6","Iqcg","Iqch","Iqck","Iqgap1","Iqgap2","Iqgap3","Iqsec1","Iqsec2","Iqsec3","Iqub","Irak1","Irak1bp1","Irak2","Irak3","Irak4","Ireb2","Irf1","Irf2","Irf2bp1","Irf2bp2","Irf2bpl","Irf3","Irf4","Irf5","Irf6","Irf7","Irf8","Irf9","Irgc","Irgm","Irgm2","Irgq","Irs1","Irs2","Irs3","Irs4","Irx1","Irx2","Irx3","Irx4","Irx5","Irx6","Isca1","Isca1-ps1","Isca2","Isca2-ps1","Iscu","Isg15","Isg20","Isg20l2","Isl1","Isl2","Islr","Islr2","Ism1","Ism2","Isoc1","Isoc2b","Ispd","Ist1","Isx","Isy1","Isyna1","Itch","Itfg1","Itfg2","Itga1","Itga10","Itga11","Itga2","Itga2b","Itga3","Itga4","Itga5","Itga6","Itga7","Itga8","Itga9","Itgad","Itgae","Itgal","Itgam","Itgav","Itgax","Itgb1","Itgb1bp1","Itgb1bp2","Itgb2","Itgb3","Itgb3bp","Itgb4","Itgb5","Itgb6","Itgb7","Itgb8","Itgbl1","Itih1","Itih2","Itih3","Itih4","Itih6","Itm2a","Itk","Itln1","Itm2c","Itm2b","Itpka","Itpkc","Itpk1","Itpa","Itpkb","Itpr2","Itpripl2","Itpripl1","Itpr1","Ivd","Itsn2","Itsn1","Itpr3","Ivl","Ivns1abp","Iws1","Iyd","Izumo2","Izumo1r","Izumo3","Izumo1","Izumo4","Jade2","Jade1","Jade3","Jagn1","Jag2","Jag1","Jak1","Jakmip2","Jakmip1","Jak3","Jam2","Jakmip3","Jam3","Jaml","Jak2","Jazf1","Jarid2","Jcad","Jchain","Jdp2","Jhy","Jkamp","Jmjd4","Jmjd1c","Jmjd6","Jmjd8","Jmy","Josd1","Josd2","Jph1","Jmjd7","Jph3","Jph2","Jph4","Jpt1","Jpx","Jpt2","Jrk","Jrkl","Jsrp1","Jtb","Junb","Ka11","Jund","Jup","Kank2","Kank1","Jun","Kank4","Kank3","Kalrn","Kansl1","Kansl1l","Kantr","Kansl2","Kansl3","Kap","Kat14","Kars","Kat2b","Kat2a","Kat6b","Kat7","Kat5","Kat6a","Kat8","Katna1","Katnal1","Katnal2","Katnbl1","Katnb1","Kazald1","Kazn","Kb15","Kb23","Kbtbd12","Kbtbd11","Kbtbd13","Kbtbd2","Kbtbd3","Kbtbd4","Kbtbd6","Kbtbd7","Kbtbd8","Kcmf1","Kcna10","Kcna1","Kcna3","Kcna2","Kcna4","Kcna5","Kcna6","Kcna7","Kcnab1","Kcnab2","Kcnab3","Kcnb2","Kcnc1","Kcnb1","Kcnc3","Kcnc2","Kcnd1","Kcnc4","Kcnd2","Kcne2","Kcne3","Kcne4","Kcne1","Kcnd3","Kcnf1","Kcne5","Kcng1","Kcng3","Kcng4","Kcng2","Kcnh4","Kcnh3","Kcnh2","Kcnh1","Kcnh5","Kcnh6","Kcnh7","Kcnh8","Kcnip1","Kcnip3","Kcnip2","Kcnip4","Kcnj10","Kcnj1","Kcnj13","Kcnj12","Kcnj14","Kcnj16","Kcnj15","Kcnj11","Kcnj2","Kcnj4","Kcnj3","Kcnj5","Kcnj9","Kcnk1","Kcnj8","Kcnj6","Kcnk12","Kcnk10","Kcnk13","Kcnk15","Kcnk16","Kcnk18","Kcnk3","Kcnk4","Kcnk2","Kcnk7","Kcnk5","Kcnk6","Kcnk9","Kcnmb3","Kcnmb1","Kcnmb2","Kcnmb4","Kcnn1","Kcnn2","Kcnma1","Kcnn3","Kcnq4","Kcnrg","Kcnn4","Kcnq3","Kcnq2","Kcnq5","Kcnq1","Kcns1","Kcns2","Kcns3","Kcnv1","Kcnv2","Kcnt1","Kcnt2","Kcnu1","Kcp","Kctd10","Kctd11","Kctd1","Kctd12","Kctd14","Kctd13","Kctd15","Kctd16","Kctd2","Kctd19","Kctd17","Kctd20","Kctd18","Kctd21","Kctd4","Kctd3","Kctd5","Kctd7","Kctd6","Kctd8","Kctd9","Kdelc1","Kdelr1","Kdelc2","Kdf1","Kdelr3","Kdelr2","Kdm1b","Kdm1a","Kdm2a","Kdm2b","Kdm3a","Kdm3b","Kdm4a","Kdm4b","Kdm4dl2","Kdm4e","Kdm4d","Kdm4c","Kdm5a","Kdm7a","Kdm5c","Kdm5d","Kdm5b","Kdm6a","Kdm8","Kdm6b","Kdsr","Kel","Khdc1","Kera","Khdc1b","Khdc3","Keap1","Khdc4","Khps1a","Khdrbs2","Khnyn","Khdrbs3","Khk","Kdr","Khdrbs1","Kiaa1671","Khsrp","Kiaa0408L","Kif11","Kif12","Kif13a","Kidins220","Kif13b","Kif14","Kif15","Kif16b","Kif17","Kif18a","Kif18b","Kif19","Kif1a","Kif1bp","Kif1c","Kif20a","Kif1b","Kif20b","Kif21b","Kif21a","Kif22","Kif23","Kif24","Kif26a","Kif26b","Kif27","Kif28p","Kif2a","Kif2b","Kif3b","Kif2c","Kif3c","Kif4b","Kif4a","Kif3a","Kif5b","Kif5a","Kif6","Kif7","Kif5c","Kif9","Kifap3","Kifc1","Kin","Kir3dl1","Kifc2","Kirrel2","Kifc3","Kirrel1","Kirrel3","Kiss1","Kiz","Kiss1r","Klb","Kitlg","Kl","Klc1","Klc2","Kit","Klc3","Klf1","Klc4","Klf10","Klf11","Klf13","Klf12","Klf14","Klf17","Klf15","Klf16","Klf2","Klf5-ps1","Klf3","Klf4","Klf5","Klf5-ps2","Klf7","Klf6","Klf8","Klf9","Klhdc1","Klhdc2","Klhdc10","Klhdc3","Klhdc4","Klhdc7a","Klhdc7b","Klhdc8b","Klhdc8a","Klhdc9","Klhl1","Klhl11","Klhl10","Klhl12","Klhl14","Klhl13","Klhl15","Klhl17","Klhl18","Klhl2","Klhl20","Klhl21","Klhl22","Klhl23","Klhl24","Klhl25","Klhl28","Klhl26","Klhl29","Klhl3","Klhl31","Klhl33","Klhl32","Klhl30","Klhl34","Klhl35","Klhl36","Klhl4","Klhl40","Klhl38","Klhl42","Klhl41","Klhl5","Klhl6","Klhl7","Klhl9","Klhl8","Klk11","Klk12","Klk10","Klk13","Klk1","Klk14","Klk15","Klk1c10","Klk1c4","Klk1b3","Klk1c3","Klk1c12","Klk1c2","Klk1c6","Klk1c8","Klk5","Klk5l","Klk4","Klk1c9","Klk6","Klk7","Klk9","Klk8","Klra2","Klra1","Klkb1","Klra22","Klra5","Klrb1","Klrb1a","Klrb1b","Klrc2","Klrc1","Klrb1c","Klrc3","Klrd1","Klln","Klre1","Klrg1","Klrh1","Klri1","Klrg2","Klri2","Kmo","Kmt2a","Kmt2c","Kmt2e","Kmt2b","Kmt5b","Kmt5a","Kmt2d","Kndc1","Kncn","Kmt5c","Klrk1","Kng2l1","Kng1","Knl1","Knop1","Kng2","Knstrn","Kntc1","Kpna1","Kpna3","Kpna4","Kpna2","Kpna5","Kpna6","Kpna7","Kprp","Kpnb1","Kptn","Kremen1","Krba1","Kremen2","Kras","Krcc1","Krr1","Kri1","Krit1","Krt1","Krt10","Krt12","Krt15","Krt16","Krt18","Krt13","Krt17","Krt2","Krt19","Krt14","Krt20","Krt222","Krt23","Krt24","Krt27","Krt28","Krt26","Krt25","Krt31","Krt32","Krt33a","Krt33b","Krt35","Krt34","Krt39","Krt36","Krt42","Krt40","Krt4","Krt71","Krt72","Krt5","Krt7","Krt73","Krt76","Krt75","Krt77","Krt79","Krt80","Krt78","Krt81","Krt8","Krt82","Krt83","Krt84","Krt85","Krtap1-1","Krt9","Krt86","Krtap1-3","Krtap1-5","Krtap11-1","Krtap12-2","Krtap13-1","Krtap13-2","Krtap15-1","Krtap14","Krtap14l","Krtap16-1","Krtap16-5","Krtap17-1","Krtap19-5","Krtap20l3","Krtap2-1","Krtap2-4l","Krtap2-4","Krtap24-1","Krtap26-1","Krtap22-2","Krtap27-1","Krtap3-1","Krtap3-3","Krtap4-7","Krtap31-1","Krtap5-1","Krtap3-2","Krtap4-3","Krtap7-1","Krtap8-1","Krtap29-1","Krtcap2","Krtdap","Krtap9-1","Krtcap3","Ksr1","Kti12","Kxd1","Ksr2","Kyat3","Ky","Kyat1","Ktn1","Kynu","L1td1","L2hgdh","L3hypdh","L3mbtl2","L3mbtl4","L1cam","L3mbtl1","L3mbtl3","Lacc1","Lactb","Lactb2","Lad1-ps1","Lad1","Lair1","Lage3","Lag3","Lalba","Lama2","Lama3","Lama1","Lama4","Lamb3","Lamb1","Lamb2","Lama5","Lamc1","Lamc3","Lamc2","Lamp1","Lamp3","Lamp2","Lamp5","Lamtor1","Lamtor2","Lamtor4","Lamtor3","Lamtor5","Lancl3","Lao1","Lancl1","Lancl2","Lap3","Laptm4a","Laptm4b","Laptm5","Large2","Larp1","Large1","Larp1b","Larp4","Larp6","Larp4b","Larp7","Las1l","Lars","Lasp1","Lars2","Lat","Lats1","Lat2","Lats2","Lax1","Lbh","Layn","Lbp","Lbr","Lbx2","Lbx1","Lce1c","Lca5l","Lca5","Lce1d","Lcat","Lce1f","Lce1m","Lce1l","Lce3d","Lce3e","Lce6a","Lclat1","Lcmt1","Lcmt2","Lcn1","Lcn10","Lck","Lcn11","Lcn12","Lcn15l1","Lcn3","Lcn4","Lcn6","Lcn5","Lcn8","Lcn2","Lcn9","Lcor","Lcorl","Lctl","Lcp2","Lcp1","Lct","Ldah","Ldb1","Ldb2","Ldhal6b","Ldhd","Ldhb","Ldhc","Ldha","Ldlrad1","Ldlr","Ldlrad2","Leap2","Ldb3","Ldlrad3","Ldoc1","Ldlrad4","Ldlrap1","Lect2","Lelp1","Lemd1","Lefty1","Lekr1","Lefty2","Lemd2","Lef1","Lemd3","Lenep","Leng1","Leng8","Leo1","Leprotl1","Leprot","Letm2","Letm1","Leng9","Letmd1","Lepr","Lexm","Lfng","Lgals2","Lgals12","Lgals1","Lep","Lgals3bp","Lgals4","Lgals5","Lgals7","Lgals3","Lgals8","Lgalsl","Lgals9","Lgi1","Lgi2","Lgi3","Lgi4","Lgmn","Lgr4","Lgr6","Lgr5","Lgsn","Lhb","Lhfpl1","Lhfpl3","Lhfpl2","Lhfpl5","Lhfpl4","Lhcgr","Lhfpl6","Lhx1","Lhpp","Lhx2","Lhx4","Lhx5","Lhx3","Lhx6","Lhx8","Lhx9","Lias","Lif","Lifr","Lig1","Lig3","Lig4","Lilra5","Lilrb1","Lilrb2","Lilrb3","Lilrb4","Lilrb3a","Lilra3","Lilrc2","Lilrb3l","Lim2","Lima1","Lime1","Limd1","Limd2","Limch1","Limk1","Limk2","Lims1","Lin28c","Lin28b","Lims2","Lin28a","Lin37","Lin52","Lin54","Lin7b","Linc00176","Lin7a","Lin7c","Lin9","Linc00514","Linc01158","Linc-rbe","Lingo3","Lingo2","Lingo1","Lingo4","Lins1","Lipa","Lipe","Lipf","Liph","Lipi","Lipg","Lipk","Lipc","Lipm","Lipogenin","Lipn","Lipt1","Lipo1","Lipt2","Lix1","Litaf","Lix1l","Lkaaear1","Llgl1","Llph","Llgl2","Lman1","Lman1l","Lman2","Lman2l","Lmbr1","Lmbrd2","Lmbr1l","Lmbrd1","Lmcd1","Lmln","Lmf1","Lmf2","Lmnb2","Lmntd2","Lmnb1","Lmo1","Lmna","Lmo2","Lmntd1","Lmo3","Lmod1","Lmod2","Lmod3","Lmo4","Lmtk3","Lmtk2","Lmx1a","Lmo7","Lnc-hc","Lnc001","Lnc004","Lnc012","Lnc056","Lnc016","Lmx1b","Lnc081","Lnc134","Lnc215","Lnp1","Lnpk","Lnx2","Lonrf1","Lonp1","Lonrf2","Lonp2","Lor","Lonrf3","Loxhd1","Lox","Loxl1","Loxl2","Loxl3","Loxl4","Lpal2","Lpar2","Lpar1","Lpar4","Lpar3","Lpar5","Lpar6","Lpcat1","Lpcat2","Lpcat2b","Lpcat3","Lpin1","Lpcat4","Lpgat1","Lpin2","Lpin3","Lpo","Lppos","Lpl","Lpxn","Lpp","Lrap","Lrat","Lrba","Lrch1","Lrch2","Lrch3","Lrcol1","Lre3","Lrch4","Lrfn1","Lrfn2","Lrfn3","Lrfn4","Lrg1","Lrfn5","Lrif1","Lrguk","Lrig1","Lrig2","Lrig3","Lrit1","Lrit2","Lrit3","Lrmp","Lrmda","Lrp10","Lrp12","Lrp11","Lrp1","Lrp1b","Lrp2bp","Lrp3","Lrp4","Lrp2","Lrp6","Lrpap1","Lrp8","Lrp5","Lrpprc","Lrr1","Lrrc1","Lrrc10b","Lrrc10","Lrrc14","Lrrc14b","Lrrc15","Lrrc17","Lrrc19","Lrrc18","Lrrc2","Lrrc20","Lrrc23","Lrrc24","Lrrc25","Lrrc26","Lrrc27","Lrrc28","Lrrc29","Lrrc3","Lrrc30","Lrrc31","Lrrc32","Lrrc34","Lrrc37a","Lrrc36","Lrrc38","Lrrc39","Lrrc3c","Lrrc3b","Lrrc4","Lrrc41","Lrrc42","Lrrc40","Lrrc43","Lrrc45","Lrrc46","Lrrc47","Lrrc49","Lrrc4b","Lrrc51","Lrrc52","Lrrc4c","Lrrc55","Lrrc56","Lrrc57","Lrrc58","Lrrc59","Lrrc6","Lrrc61","Lrrc66","Lrrc63","Lrrc69","Lrrc72","Lrrc71","Lrrc7","Lrrc73","Lrrc74b","Lrrc74a","Lrrc75a","Lrrc75b","Lrrc8b","Lrrc8a","Lrrc8d","Lrrc8c","Lrrc9","Lrrc8e","Lrrd1","Lrrcc1","Lrrfip1","Lrriq1","Lrrfip2","Lrriq3","Lrriq4","Lrrk1","Lrrn1","Lrrn2","Lrrk2","Lrrn4","Lrrn3","Lrrn4cl","LRRTM1","Lrrtm2","Lrrtm3","Lrrtm4","Lrtm1","Lrsam1","Lrtm2","Lrtomt","Lrwd1","Lsamp","Lsg1","Lsm1","Lsm10","Lsm11","Lsm12","Lsm14a","Lsm2","Lsm3","Lsm14b","Lsm4","Lsm5","Lsm7","Lsm6","Lsm8","Lsmem2","Lsmem1","Lsp1","Lsr","Lst1","Lss","Lta4h","Ltb","Ltb4r","Lta","Ltb4r2","Ltbp3","Ltbp2","Ltbp1","Ltbp4","Ltbr","Ltc4s","Ltf","Ltk","Ltv1","Ltn1","Luc7l","Luc7l2","Luc7l3","Lurap1","Lurap1l","Lum","Luzp4","Luzp2","Luzp1","Lvrn","Lxn","Ly49i2","Ly49i3","Ly49i4","Ly49i5","Ly49i9","Ly49i7","Ly49s3","Ly49s4","Ly49s5","Ly49s6","Ly49s7","Ly49si1","Ly6al","Ly49si2","Ly49si3","Ly6c","Ly6d","Ly6g5c","Ly6g5b","Ly6e","Ly6g6c","Ly6g6d","Ly6g6f","Ly6g6e","Ly6h","Ly6l","Ly6k","Ly6i","Ly75","Ly86","Ly96","Ly9","Lyar","Lyg1","Lyg2","Lyc2","Lyl1","Lynx1","Lypd1","Lyn","Lypd2","Lypd3","Lypd4","Lypd5","Lypd6","Lypd6b","Lypd8","Lypla1","Lypla2","Lyplal1","Lyrm1","Lyrm2","Lyrm4","Lyrm7","Lyrm9","Lysmd1","Lysmd2","Lysmd3","Lysmd4","Lyst","Lyve1","Lyzl1","Lyz2","Lyzl4","Lyzl6","Lzic","Lztfl1","Lztr1","Lzts1","Lzts2","Lzts3","M1ap","Maats1","M6pr","Mab21l1","Mab21l2","Macc1","Mab21l3","Macrod1","Macrod2","Mad1l1","Macf1","Mad2l1","Mad2l1bp","Mad2l2","Madcam1","Madd","Maea","Mael","Maf","Maf1","Mafa","Maff","Mafb","Mafg","Mafk","Magea10","Magea11","Magea4","Mag","Magea8","Magea9","Magea9-ps1","Mageb1","Mageb18","mageb1l1","Mageb16","Mageb2","Mageb3","Mageb6","Mageb4","Mageb5","Mageb7","Magebl1","Magec2","Maged1","Maged2","Magee1","Magee2","Magel2","Mageh1","Magix","Magi1","Magi2","Magi3","Magmas-ps1","Magoh","Magohb","Magt1","Maip1","Majin","Mak16","Mak","Mal","Mall","Mal2","Malrd1","Malsu1","Malt1","Mamdc2","Maml1","Mamdc4","Maml2","Maml3","Mamstr","Man1a2","Man1b1","Man1a1","Man1c1","Man2a1","Man2a2","Man2b1","Man2b2","Man2c1","Manbal","Manba","Manea","Maneal","Mansc1","Manf","Mansc4","Maoa","Map10","Maob","Map1a","Map1lc3b2","Map1b","Map1lc3a","Map1lc3b","Map1s","Map2k2","Map2k1","Map2","Map2k3","Map2k4","Map2k6","Map2k7","Map2k5","Map3k10","Map3k1","Map3k11","Map3k12","Map3k13","Map3k15","Map3k14","Map3k19","Map3k21","Map3k2","Map3k20","Map3k3","Map3k4","Map3k6","Map3k5","Map3k7","Map3k7cl","Map3k8","Map3k9","Map4","Map4k1","Map4k2","Map4k3","Map6d1","Map4k5","Map6","Map4k4","Map7","Map7d1","Map7d2","Map7d3","Map9","Mapk11","Mapk10","Mapk12","Mapk13","Mapk15","Mapk1ip1","Mapk1","Mapk1ip1l","Mapk4","Mapk6","Mapk14","Mapk7","Mapk8ip1","Mapk8ip2","Mapk8","Mapk3","Mapk8ip3","Mapkap1","Mapk9","Mapkapk2","Mapkapk3","Mapkapk5","Mapkbp1","Mapre1","Mapre2","Mapre3","1-Mar","1-Mar","2-Mar","10-Mar","11-Mar","2-Mar","Mapt","4-Mar","3-Mar","5-Mar","6-Mar","7-Mar","8-Mar","9-Mar","Marcksl1","Marcks","Marco","Marf1","Mark1","Mark2","Mark3","Mark4","Mars","Mars2","Marveld1","Marveld2","Marveld3","Mas1l","Mas1","Masp1","Masp2","MAST1","Mast2","Mast4","Mast3","Mastl","Mat1a","Mat2b","Mat2a","Matk","Matn1","Matn3","Matn2","Matn4","Matr3-ps1","Matr3-ps2","Matr3","Mau2","Mavs","Max","Max-ps1","Maz","Mb21d2","Mb","Mbd1","Mbd2","Mbd3l1","Mbd3l2","Mbd3","mbd3l2l","Mbd4","Mbd5","Mbd6","Mbip","Mblac2","Mblac1","Mbl1","Mbl2","Mbnl2","Mbnl1","Mbnl3","Mboat1","Mboat2","Mboat4","Mboat7","Mboat7l1","Mbtd1","Mbtps1","Mbtps2","Mbp","Mc1r","Mc2r","Mc3r","Mc5r","Mc4r","Mcart1","Mcam","Mcat","Mcc","Mccc2","Mccc1","Mcee","Mcemp1","Mcf2","Mcfd2","Mcf2l","Mchr1","Mcidas","Mcm10","Mcl1","Mcm2","Mcm3","Mcm4","Mcm3ap","Mcm5","Mcm6","Mcm8","Mcm7","Mcm9","Mcmdc1","Mcmbp","Mcmdc2","Mcoln1","Mcoln2","Mcoln3","Mcph1","Mcpt1","Mcpt10","Mcpt1l1","Mcpt1l2","Mcpt1l3","Mcpt1l4","Mcpt2","Mcpt3","Mcpt4l1","Mcpt4","Mcpt8l2","Mcpt8","Mcpt9","Mcrip1","Mcpt8l3","Mcrip2","Mcrs1","Mctp1","Mcts1","Mctp2","Mcts2","Mcub","Mcur1","Mcu","Mdc1","Mdfic","Mdfi","Mdga1","Mdga2","Mdh1","Mdh2","Mdh1b","Mdk","Mdm1","Mdm4","Mdn1","Mdp1","Mdm2","Me2","Me1","Mea1","Meaf6","Me3","Mecom","Mecr","Med10","Med1","Mecp2","Med11","Med12","Med13","Med12l","Med13l","Med14-ps1","Med14","Med15","Med16","Med18","Med17","Med19","Med20","Med21","Med22","Med24","Med23","Med25","Med26","Med27","Med28","Med29","Med30","Med31","Med6","Med4","Med7","Med8","Med9","Medag","Mef2b","Mef2a","Mef2d","Mef2c","Mefv","Megf10","Megf6","Megf9","Megf11","Megf8","Mei1","Meikin","Mei4","Meig1","Meiob","Meioc","Meis1","Meis2","Meis3","Melk","Meltf","Memo1","Meox1","Men1","Meox2","Mep1a","Mep1b","Mepce","Mepe","Mesd","Mesp1","Mertk","Mesp2","Mest","Metap1","Metap1d","Metap2","Met","Metrn","Metrnl","Mettl1","Mettl13","Mettl11b","Mettl15","Mettl16","Mettl14","Mettl17","Mettl18","Mettl21c","Mettl21a","Mettl21cl1","Mettl21ep","Mettl22","Mettl23","Mettl24","Mettl25","Mettl27","Mettl26","Mettl2b","Mettl4","Mettl3","Mettl5","Mettl6","Mettl7a","Mettl9-ps1","Mettl7b","Mettl8","Mettl9","Mex3a","Mex3b","Mex3c","Mex3d","Mfap2","Mfap1a","Mfap3l","Mfap3","Mfap4","Mfap5","Mfhas1","Mff","Mfge8","Mfng","Mfsd1","Mfrp","Mfn1","Mfn2","Mfsd10","Mfsd11","Mfsd12","Mfsd14a","Mfsd13a","Mfsd14b","Mfsd2a","Mfsd2b","Mfsd4a","Mfsd3","Mfsd4b","Mfsd6l","Mfsd5","Mfsd6","Mfsd7","Mfsd8","Mfsd9","Mgam","Mga","Mgarp","Mgat1","Mgat2","Mgat3","Mgat4b","Mgat4a","Mgat4d","Mgat4e","Mgat4c","Mgat5b","MGC105567","Mgat5","MGC105649","MGC108823","MGC109340","MGC112692","MGC114246","MGC114483","MGC114492","MGC114499","MGC116121","MGC93861","MGC116197","MGC116202","MGC94207","MGC94199","MGC95208","MGC94891","MGC95210","Mgea5","Mgme1","Mgll","Mgp","Mgrn1","Mgst1","Mgmt","Mgst2","Mgst3","Mia","Miat","Mia3","Mia2","Mib1","Mib2","Mical1","Mical2","Micalcl","Mical3","Micall1","Micall2","Micb","Micu2","Micu1","Micu3","Mid1ip1","Mid2","Mid1","Midn","Mief1","Mief2","Mien1","Mier2","Mier1","Mier3","Mif4gd","Miga1","Miga2","Miip","Milr1","Mill1","Mif","Mindy1","Mindy2","Minos1","Minpp1","Mink1","Mios","Miox","Mipol1","Mipep","Mip","Mir1","Mir100","Mir101-2","Mir103a1","Mir101a","Mir103a2","Mir105","Mir107","Mir106a","Mir106b","Mir10a","Mir10b","Mir1188","Mir1193","Mir1199","Mir1224","Mir122","Mir124-1","Mir124-2","Mir124-3","Mir1249","Mir1247","Mir125a","Mir125b1","Mir125b2","Mir126a","Mir126b","Mir127","Mir128-2","Mir128-1","Mir129-1","Mir129-2","Mir1297","Mir1306","Mir1298","Mir130b","Mir130a","Mir132","Mir133a1","Mir133b","Mir134","Mir135a","Mir135b","Mir136","Mir137","Mir138-2","Mir138-1","Mir139","Mir140","Mir141","Mir142","Mir144","Mir143","Mir145","Mir146a","Mir146b","Mir148a","Mir147","Mir148b","Mir149","Mir151","Mir150","Mir151b","Mir152","Mir154","Mir153","Mir155","Mir155hg","Mir15b","Mir16","Mir17","Mir181a-1","Mir181a2","Mir181b1","Mir181b2","Mir181c","Mir181d","Mir182","Mir183","Mir184","Mir1843b","Mir185","Mir186","Mir187","Mir188","Mir1896","Mir18a","Mir190b","Mir190","Mir191","Mir1912","Mir192","Mir193","Mir193a","Mir193b","Mir1949","Mir194-2","Mir194-1","Mir195","Mir1956","Mir196a","Mir196b","Mir196c","Mir1b","Mir19a","Mir199a2","Mir19b1","Mir19b2","Mir200a","Mir200b","Mir200c","Mir201","Mir202","Mir203","Mir204","Mir207","Mir206","Mir205","Mir208a","Mir208b","Mir20a","Mir20b","Mir211","Mir212","Mir210","Mir21","Mir215","Mir216a","Mir214","Mir218-2","Mir216b","Mir217","Mir218-1","Mir219-2","Mir219a1","Mir22","Mir221","Mir222","Mir224","Mir223","Mir23a","Mir23b","Mir24-2","Mir25","Mir24-1","Mir26b","Mir27a","Mir26a","Mir27b","Mir28","Mir290","Mir291a","Mir291b","Mir292","Mir294","Mir293","Mir295-1","Mir295-2","Mir2964","Mir296","Mir299","Mir297","Mir298","Mir2985","Mir299b","Mir29a","Mir29b1","Mir301a","Mir29b2","Mir29c","Mir301b","Mir300","Mir3064","Mir3065","Mir3074","Mir3072","Mir3075","Mir3084a","Mir3084c","Mir3099","Mir3085","Mir30a","Mir30b","Mir30c1","Mir30c2","Mir31","Mir30d","Mir30e","Mir3102","Mir32","Mir323","Mir3120","Mir320a","Mir324","Mir325","Mir326","Mir322","Mir327","Mir328b","Mir328","Mir329","Mir330","Mir33","Mir331","Mir336","Mir337","Mir338","Mir339","Mir341","Mir342","Mir343","Mir344-1","Mir344a-2","Mir344b-1","Mir344g","Mir344i","Mir345","Mir346","Mir349","Mir3473","Mir34a","Mir34b","Mir351","Mir350","Mir34c","Mir3541","Mir3542","Mir3543","Mir3544","Mir3545","Mir3546","Mir3547","Mir3548","Mir3550","Mir3551","Mir3552","Mir3553","Mir3554","Mir3556b","Mir3555","Mir3557","Mir3556a","Mir3558","Mir3559","Mir3560","Mir3561","Mir3565","Mir3562","Mir3564","Mir3566","Mir3568","Mir3569","Mir3570","Mir3571","Mir3572","Mir3576","Mir3573","Mir3575","Mir3574","Mir3577","Mir3578","Mir3579","Mir3580","Mir3581","Mir3582","Mir3583","Mir3584","Mir3585","Mir3587","Mir3588","Mir3589","Mir3590","Mir3591","Mir3592","Mir3593","Mir3594","Mir3595","Mir3596a","Mir3596b","Mir3596c","Mir3597-1","Mir3597-2","Mir3597-3","Mir361","Mir362","Mir363","Mir365b","Mir369","Mir370","Mir374b","Mir376a","Mir375","Mir376b","Mir376c","Mir377","Mir378","Mir379","Mir378b","Mir380","Mir381","Mir382","Mir383","Mir384","Mir410","Mir411","Mir409","Mir412","Mir421","Mir423","Mir425","Mir429","Mir433","Mir431","Mir434","Mir448","Mir449a","Mir449c","Mir450a1","Mir455","Mir463","Mir466c","Mir465","Mir451a","Mir466d","Mir471","Mir483","Mir484","Mir485","Mir488","Mir489","Mir487b","Mir490","Mir493","Mir494","Mir495","Mir496","Mir497","Mir499a","Mir501","Mir500","Mir503","Mir504","Mir505","Mir511","Mir539","Mir5132","Mir509","Mir532","Mir540","Mir541","Mir542","Mir544","Mir543","Mir551b","Mir547","Mir568","Mir582","Mir592","Mir598","Mir615","Mir6215","Mir6216","Mir628","Mir6314","Mir6315","Mir6316","Mir6318","Mir6320","Mir6322","Mir632","Mir6321","Mir6323","Mir6324","Mir6325","Mir6326","Mir6327","Mir6328","Mir6329","Mir6330","Mir6332","Mir6331","Mir6333","Mir6334","Mir652","Mir664-1","Mir653","Mir665","Mir666","Mir664-2","Mir667","Mir668","Mir672","Mir671","Mir673","Mir676","Mir674","Mir675","Mir678","Mir702","Mir741","Mir708","Mir711","Mir742","Mir743a","Mir743b","Mir7578","Mir758","Mir759","Mir761","Mir760","Mir762","Mir770","Mir764","Mir7a1","Mir7a2","Mir802","Mir7b","Mir871","Mir872","Mir874","Mir873","Mir875","Mir876","Mir878","Mir879","Mir877","Mir883","Mir880","Mir881","Mir9-1","Mir9-2","Mir9-3","Mir92a1","Mir92b","Mir92a2","Mir935","Mir93","Mir96","Mir98","Mir99a","Mir99b","Mirlet7a-2","Mirlet7a1","Mirlet7bhg","Mirlet7b","Mirlet7c1","Mirlet7c2","Mirlet7e","Mirlet7f-1","Mirlet7f1","Mirlet7d","Mirlet7f2","Mirlet7g","Mirlet7i","Mis12","Misp","Misp3","Mis18a","Mis18bp1","Mitd1","Mitf","Mixl1","Mk1","Mkl2","Mkks","Mki67","Mkl1","Mkln1","Mknk2","Mknk1","Mkrn1","Mkrn2os","Mkrn2","Mkrn3","Mkx","Mks1","Mlana","Mlc1","Mlec","Mlf1","Mlf2","Mlkl","Mlh1","Mlh3","Mllt1","Mlip","Mllt10","Mllt11","Mllt3","Mln","Mllt6","Mlnr","Mlph","Mlst8","Mlxip","Mlx","Mlxipl","Mlycd","Mmaa","Mmab","Mmachc","Mmd","Mmadhc","Mmd2","Mmgt1","Mmgt2","Mmel1","Mme","Mmp10","Mmp11","Mmp12","Mmp15","Mmp1","Mmp16","Mmp14","Mmp13","Mmp1b","Mmp17","Mmp19","Mmp20","Mmp21","Mmp25","Mmp23","Mmp27","Mmp28","Mmp24","Mmp8","Mmrn1","Mmp7","Mms19","Mmrn2","Mmp3","Mn1","Mnda","Mms22l","Mnd1","Mmp2","Mnat1","Mns1","Moap1-ps1","Mnt","Mnx1","Moap1","Mob1b","Mob2","Mob1a","Mob3a","Mob3c","Mob3b","Mob4","Mocos","Mocs1","Mobp","Mocs3","Mogat1","Mocs2","Mog","Mmp9","Mogat2","Mogat3","Mogs","Mok","Mon1a","Mon1b","Morc2b","Morc2","Morc1","Mon2","Morc3","Morc4","Morf4l1","Morn2","Morn1","Morf4l2","Morn3","Morn5","Morn4","Mos","Mospd1","Mospd4","Mospd3","Mospd2","Mov10","Moxd1","Mov10l1","Moxd2","Mpc1l","Mpdu1","Mpc1","Mpc2","Mpeg1","Mpdz","Mphosph6-ps1","Mpg","Mphosph10","Mphosph6","Mphosph9","Mphosph8","Mpi","Mpig6b","Mplkip","Mpnd","Mpp1","Mpl","Mpo","Mpp2","Mpp3","Mpp4","Mpp5","Mpp6","Mppe1","Mpp7","Mpped1","Mpped2","Mptx1","Mpst","Mpv17","Mpv17l","Mprip","Mpv17l2","Mpz","Mpzl1","Mpzl2","Mpzl3","Mrap","Mr1","Mrap2","Mras","Mrc1","Mrc2","Mreg","Mrfap1","Mrgprb13","Mrgbp","Mre11a","Mrgprb3","Mrgprb4","Mrgprc","Mrgprb5","Mrgprd","Mrgpre","Mrgprf","Mrgprx1","Mrgprg","Mrgprx2l","Mrgprx2","Mrgprx3","Mrgprx4","Mrln","Mri1","Mrm2","Mrm1","Mrm3","Mrnip","Mro","Mroh2a","Mroh2b","Mroh5","Mroh1","Mroh4","Mroh6","Mroh7","Mroh9","Mroh8","Mrpl1","Mrpl10","Mrpl12","mrpl11","Mrpl13","Mrpl14","Mrpl15","Mrpl16","Mrpl17","Mrpl18","Mrpl19","Mrpl2","Mrpl20","Mrpl21","Mrpl22","Mrpl23","Mrpl27","mrpl24","Mrpl28","Mrpl3","Mrpl32","Mrpl30","Mrpl33","Mrpl34","Mrpl35","Mrpl36","Mrpl38","Mrpl37","Mrpl39","Mrpl4","Mrpl42","Mrpl41","Mrpl40","Mrpl43","Mrpl44","Mrpl45","Mrpl46","Mrpl47","Mrpl48","Mrpl50","Mrpl49","Mrpl51","Mrpl52","Mrpl53","Mrpl54","Mrpl55","Mrpl57","Mrpl58","Mrps10","mrpl9","Mrps11","Mrps12","Mrps14","Mrps15","Mrps16","Mrps17-ps1","Mrps17","Mrps18a","Mrps18b","Mrps18c","Mrps2","Mrps21l","Mrps21","Mrps22","Mrps23","Mrps25","Mrps26","Mrps24","Mrps27","Mrps30","Mrps28","Mrps31","Mrps33","Mrps34","Mrps36","Mrps35","Mrps6","Mrps7","Mrps5","Mrrf","Mrps9","Mrs2","Mrto4","Mrvi1","Ms4a10","Ms4a1","Ms4a12","Ms4a13-ps1","Ms4a14","Ms4a18","Ms4a15","Ms4a2","Ms4a3","Ms4a4a","Ms4a4c","Ms4a5","Ms4a6b","Ms4a6a","Ms4a6bl","Ms4a6c","Ms4a7","Ms4a6e","Ms4a8","Msantd2","Msantd1","Msantd3","Msantd4","Msc","Msgn1","Msh3","Msh4","Msi1","Msh5","Msh2","Msh6","Msl1","Msi2","Msl2","Msl3l2","Msl3","Mslnl","Msmb","Msmp","Msln","Msmo1","Msr1","Msrb1","Msn","Msrb2","Msrb3","Mss51","Msra","Mst1","Msto1","Msx3","Mst1r","Msx1","Mstn","Msx2","Mt-atp6","Mt-atp8","Mt-co1","Mt-co2","Mt-co3","Mt-nd2","Mt-nd4","Mt-cyb","Mt-nd3","Mt-nd1","mt-Ta","mt-Tc","mt-Td","mt-Te","Mt-nd6","Mt-nd4l","mt-Tf","Mt-nd5","mt-Th","mt-Tg","mt-Ti","mt-Tk","mt-Tl1","mt-Tl2","mt-Tm","mt-Tn","mt-Tp","mt-Tq","mt-Tr","mt-Ts1","mt-Ts2","mt-Tv","mt-Tt","mt-Tw","mt-Ty","Mt1f","Mt1m","Mt1-ps2","Mt1-ps1","Mt1","Mt2A","Mt3","Mt4","Mta1","Mta2","Mta3","Mtap","Mtbp","Mtch1","Mtch2","Mtcl1","Mtcp1","Mterf1","Mterf2","Mtdh","Mterf4","Mterf3","Mtf1","Mtf2","Mtfmt","Mtfp1","Mtfr1-ps1","Mtfr1","Mtfr1l","Mtg1","Mtfr2","Mtg2","Mthfd1","Mthfd1l","Mthfd2","Mthfd2l","Mthfsd","Mtif3","Mtif2","Mthfs","Mtm1","Mtmr1","Mtmr10","Mtmr11","Mtmr12","Mthfr","Mtmr14","Mtmr2","Mtmr3","Mtmr6","Mtmr4","Mtmr9","Mtmr7","Mto1","Mtnr1b","Mtnr1a","Mtpap","Mtrf1","Mtpn","Mtrf1l","Mtr","Mtss1l","Mtrr","Mtss1","Mttp","Mtor","Mturn","Mtx1","Mtus2","Mtus1","Mtx2","Mtx3","Muc15","Muc13","Muc16","Muc19","Muc19l1","Muc1","Muc20","Muc3","Muc2","Muc5b","Muc5ac","Muc4","Mucl1","Muc6","Mul1","Mum1l1","Mum1","Mug2","Mug1","Mus81","Mup4","Mup5","Mustn1","Musk","Mutyh","Mvb12a","Mut","Mvb12b","Mvd","Mvp","Mvk","Mxd1","Mx1","Mx2","Mxd3","Mxd4","Mxra7","Myadml2","Mxi1","Mxra8","Myb","Mybbp1a","Myadm","Mybl1","Mybl2","Mybpc2","Mybpc3","Mybpc1","Mybphl","Mycbp","Mybph","Mycbp2","Mycbpap","Mycl","Myct1","Mycn","Mycs","Myd88","Mydgf","Myef2","Myf5","Myf6","Myg1","Myh1","Myh13","Myc","Myh10","Myh11","Myh2","Myh15","Myh14","Myh3","Myh7b","Myh6","Myh4","Myh8","Myh9l1","Myh7","Myh9","Myl10","Myl1","Myl12a","Myl2","Myl3","Myl12b","Myl4","Myl6b","Myl6","Myl6l","Myl7","Myl9","Mylip","Mylk3","Mylk2","Mylk4","Mylk","Mymk","Mylpf","Mynn","Myo15b","Myo10","Myo15a","Myo18a","Myo16","Myo19","Myo18b","Myo1a","Myo1b","Myo1c","Myo1e","Myo1f","Myo1h","Myo1d","Myo1g","Myo3b","Myo3a","Myo5c","Myo5a","Myo5b","Myo7b","Myo6","Myo7a","Myo9a","Myo9b","Myoc","Myocd","Myod1","Myof","Myom2","Myom1","Myog","Myom3","Myorg","Myoz3","Myoz2","Myot","Myoz1","Mypn","Mypop","Myrf","Myrfl","Myrip","Myt1","Mysm1","Myt1l","Mzb1","Mzt1","Myzap","Mzf1","N4bp1","N4bp2l1","Mzt2b","N4bp2","N5","N4bp2l2","N4bp3","N6amt1","Naa10","Naa11","Naa15","Naa16","Naa20","Naa30","Naa25","Naa35","Naa38","Naa40","Naa50","Naa60","Naaa","Naaladl1","Naalad2","Naaladl2","Nab1","Nab2","Nabp1","Nabp2","Nacad","Naca","Nacc1","Nacc2","Nadk","Nadk2","Nadsyn1","Nae1","Naga","Nagk","Naf1","Naglt1","Nagpa","Naglu","Naif1","Naip5","Nags","Nalcn","Naip6","Nanos1","Nanos2","Nampt","Nanog","Nanos3","Nanp","Nans","Nap1l2","Nap1l1","Nap1l3","Nap1l4","Nap1l5","Napb","Napa","Napepld","Napg","Naprt","Napsa","Narf","Nars","Narfl","Nars2","Nasp","Nat14","Nat10","Nat6","Nat8","Nat3","Nat1","Nat8b","Nat2","Nat8f1","Nat8f2","Nat8f3","Nat8f4","Nat8f5","Nat8l","Nat9","Natd1","Nav1","Naxd","Nav3","Nav2","Naxe","Nbas","Nbea","Nbeal1","Nbl1","Ncald","Nbeal2","Nbn","Nbr1","Ncam2","Ncapd2","Ncan","Ncaph","Ncapg","Ncapd3","Ncam1","Ncapg2","Ncaph2","Ncbp2","Ncbp3","Ncbp1","Nccrp1","Ncdn","Nceh1","Ncf2","Ncf1","Ncf4","Nck1","Nck2","Nckap1","Nckap1l","Nckap5","Nckap5l","Nckipsd","Ncl-ps1","Ncmap","Ncln","Ncl","Ncoa4","Ncoa5","Ncoa2","Ncoa3","Ncoa1","Ncoa7","Ncoa6","Ncr2","Ncr3lg1","Ncr1","Ncr3","Ncor1","Ncor2","Ncstn","Ndc1","Ncs1","Ndc80","Ndfip1","Nde1","Ndel1","Ndfip2","Ndnf","Ndn","Ndor1","Ndp","Ndrg1","Ndrg3","Ndrg2","Ndst3","Ndst2","Ndst1","Ndrg4","Ndst4","Ndufa1","Ndufa10l1","Ndufa13-ps1","Ndufa11","Ndufa10","Ndufa12","Ndufa13","Ndufa2","Ndufa3","Ndufa4l2","Ndufa7l","Ndufa4","Ndufa6","Ndufa5","Ndufa7","Ndufa8","Ndufaf1","Ndufa9","Ndufaf2","Ndufab1","Ndufaf4","Ndufaf5","Ndufaf3","Ndufaf6","Ndufb1","Ndufaf8","Ndufaf7","Ndufb10","Ndufb1l1","Ndufb11","Ndufb2","Ndufb3","Ndufb4l1","Ndufb4-ps1","Ndufb4","Ndufb6","Ndufb5","Ndufb7","Ndufb8","Ndufb9","Ndufc1","Ndufc2","Ndufs2","Ndufs1","Ndufs3","Ndufs4","Ndufs5-ps1","Ndufs5","Ndufs6","Ndufs7","Ndufs8","Ndufv2","Ndufv1","Ndufv3-ps1","Ndufv3","Nebl","Necab1","Neb","Necab2","Necab3","Necap2","Necap1","Nectin1","Nectin3","Nectin2","Nedd1","Nectin4","Nedd8","Nedd4l","Nedd4","Nedd9","Negr1","Nefh","Neil1","Nefm","Neil2","Nefl","Neil3","Nek1","Nek11","Nek2","Nek10","Nek2l1","Nek3","Nek4","Nek5","Nek6","Nek7","Nelfa","Nek8","Nek9","Nelfcd","Nelfb","Nelfe","Nemp1","Nemf","Nemp2","Nenf","Nell1","Nepn","Neo1","Nell2","Nerg-ps11","Nerg-ps1","Nepro","Nerg-ps12","Nerg-ps10","Nerg-ps13","Nerg-ps14","Nerg-ps15","Nerg-ps2","Nerg-ps4","Nerg-ps6","Nerg-ps5","Nerg-ps3","Nerg-ps7","Nerg-ps8","Nerg-ps9","Net1","Neto2","Neto1","Neu1","Neu4","Neu3","Nes","Neu2","Neurl1b","Neurl2","Neurl1","Neurl3","Neurod2","Neurl4","Neurod4","Neurod1","Neurod6","Nexmif","Nexn","Nf1x","Nfam1","Nf2","Nfat5","Nf1","Nfasc","Nfatc2ip","Nfatc1","Nfatc2","Nfatc3","Nfe2","Nfe2l1","Nfe2l3","Nfatc4","Nfia","Nfic","Nfib","Nfil3","Nfkb2","Nfe2l2","Nfkbib","Nfkbia","Nfkbie","Nfkbil1","Nfkbid","Nfkbiz","Nfrkb","Nfkb1","Nfs1","Nfu1","Nfx1","Nfxl1","Nfya","Nfyb","Nfyc","Ngdn","Ngef","Ngb","Ngly1","Ngp","Ngrn","Nhlh2","Nhlh1","Nhej1","Nhlrc1","Nhlrc2","Ngf","Ngfr","Nhlrc3","Nhlrc4","Nhp2","Nhsl2","Nhs","Nhsl1","Nicn1","Nif3l1","Nid1","Nid2","Nifk","Nim1k","Ninj1","Nin","Ninj2","Nipa1","Nip7","Ninl","Nipa2","Nipal1","Nipal4","Nipal2","Nipal3","Nipsnap1","Nipsnap2","Nipsnap3a","Nipsnap3b","Nipbl","Nit1","Nisch","Nit2","Nkain1","Nkain2","Nkain3","Nkain4","Nkap","Nkapl","Nkapd1","Nkd1","Nkg7","Nkd2","Nkiras1","Nkpd1","Nkiras2","Nkr-p1c","Nkrf","Nktr","Nkx1-1","Nkx1-2","Nkx2-3","Nkx2-4","Nkx2-2","Nkx2-6","Nkx2-8","Nkx2-5","Nkx2-1","Nkx3-1","Nkx3-2","Nkx6-2","Nkx6-1","Nkx6-3","Nle1","Nlgn2","Nlk","Nlgn3","Nlgn1","Nln","Nlrc3","Nlrc5","Nlrc4","Nlrp10","Nlrp14","Nlrp12","Nlrp1b","Nlrp2","Nlrp1a","Nlrp4","Nlrp4b","Nlrp3","Nlrp4a","Nlrp4f","Nlrp5","Nlrp6","Nlrx1","Nlrp9","Nmbr","Nmb","Nmd3","Nme2-ps1","Nme1","Nme5","Nme3","Nme2","Nme4","Nme6","Nme7","Nme9","Nme8","Nmi","Nmnat1","Nmnat2","Nmral1","Nmnat3","Nmrk1","Nmrk2","NMS","Nmt1","Nmt2","Nmur1","Nmur2","Nmu","Nnmt","Nnat","Noa1","Nnt","Nob1","Nobox","Noc2l","Noc3l","Noc4l","Noct","Nod1","Nodal","Nol11","Nol10","Nol12","Nod2","Nol3","Nol4","Nol4l","Nol7","Nol6","Nol8","Nol9","Nom1","Nolc1","Nomo1","Nono","Nono-ps1","Nop14","Nop16","Nop10","Nop2","Nop53","Nop56","Nop58","Nop9","Nos1ap","Nosip","Nostrin","Notch2","Nog","Notch1","Nos1","Notch3","Notch4","Noto","Notum","Nos3","Nova2","Nov","Nova1","Nox3","Nox1","Nos2","Nox4","Noxa1","Noxred1","Noxo1","Np4","Npas1","Npas3","Npas2","Npb","Npas4","Npbwr1","Npat","Npc1","Npc1l1","Npdc1","Npc2","Npepl1","Npepo","Npff","Npepps","Npffr1","Npffr2","Nphp3","Nphp1","Npl","Nphp4","Nphs2","Nphs1","Nploc4","Npm2","Npm3","Npnt","Npm1","Nppc","Npr2","Nppb","Npr1","Npr3","Nprl2","Nppa","Nprl3","Nps","Nptx1","Npsr1","Nptxr","Nptx2","Nptn","Npvf","Npw","Npy4r","Npy2r","Npy1r","Nqo2","Nr0b1","Npy5r","Nqo1","Nr0b2","Nr1d1","Nr1d2","Nr1h2","Nr1h3","Nr1h4","Nr1h5","Nr1i2","Nr2c1","Npy","Nr2c2ap","Nr1i3","Nr2e1","Nr2e3","Nr2f1","Nr2c2","Nr2f6","Nr2f2","Nr3c2","Nr4a1","Nr4a2","Nr4a3","Nr5a1","Nr6a1","Nr5a2","Nr3c1","Nradd","Nras-ps1","Nrarp","Nrap","Nrbf2","Nras","Nrbp2","Nrbp1","Nrde2","Nrep","Nrdc","Nrg2","Nrf1","Nrcam","Nrg3","Nrg4","Nrgn","Nrip1","Nrip2","Nrip3","Nrk","Nrm","Nrl","Nrg1","Nrn1","Nrros","Nrp2","Nrsn1","Nrp1","Nrsn2","Nrtn","Nrxn1","Ns5atp4","Nsa2","Nsd1","Nrxn2","Nrxn3","Nsd2","Nrn1l","Nsdhl","Nsd3","Nsg2","Nsg1","Nsl1","Nsfl1c","Nsf","Nsmaf","Nsmce1","Nsmce3","Nsmce4a","Nsmce2","Nsrp1","Nsun2","Nsmf","Nsun3","Nsun7","Nsun5","Nsun4","Nsun6","Nt5c","Nt5c1a","Nt5c1b","Nt5c2","Nt5dc1","Nt5c3b","Nt5dc3","Nt5dc2","Nt5c3a","Nt5m","Nt5e","Ntan1","Nthl1","Ntmt1","Ntm","Ntf4","Ntn3","Ntf3","Ntn1","Ntn4","Ntn5","Ntpcr","Ntng2","Ntng1","Ntsr2","Nts","Nuak1","Ntsr1","Nuak2","Ntrk3","Ntrk1","Nubpl","Nubp2","Nub1","Nubp1","Nucb1","Ntrk2","Nucb2","Nucks1","Nudcd3","Nudcd2","Nudcd1","Nudc","Nudt1","Nudt10","Nudt11","Nudt12","Nudt13","Nudt15","Nudt14","Nudt16","Nudt17","Nudt16l1","Nudt19","Nudt18","Nudt2","Nudt3","Nudt22","Nudt21","Nudt4","Nudt5","Nudt6","Nudt8","Nudt7","Nuf2","Nufip1","Nudt9","Nufip2","Nuggc","Numa1","Numb","Numbl","Nup107","Nup133","Nup160","Nup153","Nup155","Nup188","Nup205","Nup210l","Nup214","Nup37","Nup210","Nup35","Nup43","Nup50","Nup54","Nup85","Nup62cl","Nup62","Nup88","Nup93","Nup58","Nupl2","Nupr1l1","Nupr1","Nup98","Nupr2","Nus1","Nusap1","Nutf2","Nutf2-ps1","Nutm1","Nwd1","Nutm2f","Nvl","Nwd2","Nxf2","Nxf1","Nxf5","Nxf3","Nxnl1","Nxf7","Nxn","Nxnl2","Nxpe2","Nxpe1","Nxpe3","Nxpe4","Nxph2","Nxpe5l1","Nxpe5","Nxph1","Nxph3","Nxph4","Nxt1","Nxt2","Nynrin","Nyap1","Nyap2","Nyx","Oacyl","Oaf","Oas1d","Oas1a","Oard1","Oas1b","Oas1e","Oas1g","Oas1h","Oas1f","Oas1i","Oas2","Oas1k","Oas3","Oasl","Oasl2","Oaz1-ps","Oat","Oaz1","Obox1","Oaz2","Oaz3","Obox2","Obox5","Obp2a","Obp2b","Obp1f","Oc90","Obsl1","Obscn","Obp3","Oca2","Ociad2","Ocel1","Ociad1","Ocstamp","Ocm2","Ocrl","Ocln","Odam","Odf1","Odc1","Odf2","Odf3","Odf2l","Odf3b","Odf3l1","Odf3l2","Odf4","Ofcc1","Odr4","Ogfod1","Ofd1","Ogdhl","Ogfod2","Ogfod3","Ogdh","Ogfrl1","Ogfr","Ogn","Oip5","Oit3","Ogg1","Ola1","Ogt","Olah","Olfm1","Olfm2","Olfm3","Olfm4","Olfml1","Olfml2a","Olfml3","Olfml2b","Olfr1330-ps1","Olfr1055","Olfr873","Olfr94-ps1","Olig1","Olig3","Olig2","Olr1","Olr1000","Olr1005-ps","Olr100-ps","Olr1004-ps","Olr10","Olr1002","Olr1008-ps","Olr1007","Olr1010-ps","Olr1006","Olr1001-ps","Olr1003-ps","Olr1011-ps","Olr1014","Olr1015-ps","Olr1012","Olr1018-ps","Olr1019-ps","Olr102-ps","Olr1020","Olr1009-ps","Olr1017-ps","Olr1013-ps","Olr101","Olr1021-ps","Olr1022","Olr1016","Olr1023-ps","Olr1025-ps","Olr1027-ps","Olr1026-ps","Olr1024","Olr1028-ps","Olr1029","Olr103","Olr1030-ps","Olr1031-ps","Olr1033-ps","Olr1032-ps","Olr1034-ps","Olr1035-ps","Olr1037-ps","Olr1036-ps","Olr1038-ps","Olr1039-ps","Olr1041-ps","Olr1040-ps","Olr104","Olr1042-ps","Olr1043-ps","Olr1044-ps","Olr1048-ps","Olr1045-ps","Olr1047-ps","Olr1046-ps","Olr1049","Olr105","Olr1050-ps","Olr1051","Olr1052","Olr1053-ps","Olr1054-ps","Olr1056-ps","Olr1055","Olr1057","Olr1058","Olr1059","Olr106","Olr1062-ps","Olr1060","Olr1061","Olr1063","Olr1064","Olr1065","Olr1066-ps","Olr1067","Olr1069","Olr1068","Olr107","Olr1071","Olr1070","Olr1072","Olr1074-ps","Olr1073","Olr1075","Olr1076","Olr1077","Olr1078","Olr1079","Olr1080-ps","Olr108","Olr1081","Olr1083","Olr1082","Olr1084","Olr1085","Olr1086","Olr1088","Olr1087","Olr1089-ps","Olr109","Olr1090","Olr1091","Olr1093","Olr1092","Olr1094-ps","Olr1095","Olr1096","Olr1097-ps","Olr1099-ps","Olr1098-ps","Olr110","Olr11","Olr1100-ps","Olr1102","Olr1105","Olr1104","Olr1106","Olr1107","Olr1109-ps","Olr111","Olr1108","Olr1110-ps","Olr1111","Olr1112-ps","Olr1113-ps","Olr1114-ps","Olr1116-ps","Olr1115","Olr1117","Olr1118","Olr112","Olr1120-ps","Olr1119","Olr1121","Olr1122","Olr1124","Olr1125","Olr1126","Olr1127-ps","Olr1128","Olr1129","Olr113","Olr1130","Olr1131-ps","Olr1132","Olr1133-ps","Olr1134-ps","Olr1136-ps","Olr1135","Olr1137","Olr1139","Olr1138","Olr1140-ps","Olr114","Olr1141-ps","Olr1143","Olr1142","Olr1144","Olr1145","Olr1146","Olr1147","Olr1148","Olr1149","Olr115","Olr1150-ps","Olr1152-ps","Olr1151","Olr1153-ps","Olr1154-ps","Olr1156","Olr1155","Olr1157-ps","Olr1158","Olr116-ps","Olr1161-ps","Olr1159","Olr1160","Olr1163","Olr1162","Olr1164","Olr1165","Olr1166","Olr1167-ps","Olr1168-ps","Olr1169","Olr117-ps","Olr1170-ps","Olr1171","Olr1172","Olr1175-ps","Olr1176-ps","Olr1174","Olr1178-ps","Olr1177","Olr1179","Olr118-ps","Olr1181-ps","Olr1182-ps","Olr1184-ps","Olr1183-ps","Olr1185","Olr1187-ps","Olr1186","Olr119","Olr1191","Olr1192","Olr1193","Olr1194","Olr1195","Olr1197","Olr1196","Olr1198","Olr1199","Olr12","Olr120","Olr1200","Olr1201","Olr1203","Olr1202","Olr1205-ps","Olr1204","Olr1206","Olr1207-ps","Olr1208-ps","Olr1209-ps","Olr1210-ps","Olr121","Olr1212-ps","Olr1211-ps","Olr1215-ps","Olr1213","Olr1214","Olr1217","Olr1218","Olr1219","Olr122","Olr1220","Olr1222","Olr1223","Olr1224-ps","Olr1225","Olr1226","Olr1227","Olr1228","Olr1229","Olr1232","Olr1230","Olr1231","Olr1233","Olr1234","Olr1235","Olr1236","Olr1237","Olr1238","Olr124","Olr1239","Olr1240","Olr1241","Olr1242","Olr1243","Olr1244","Olr1245","Olr1246","Olr1247","Olr1248","Olr1249","Olr125","Olr1250","Olr1251","Olr1252","Olr1253","Olr1254","Olr1255-ps","Olr1256","Olr1257","Olr1258","Olr1258-ps","Olr126","Olr1259","Olr1260","Olr1261","Olr1262","Olr1263-ps","Olr1264","Olr1267-ps","Olr1268-ps","Olr1265","Olr1269-ps","Olr1266","Olr1270-ps","Olr127","Olr1272-ps","Olr1273","Olr1275","Olr1276-ps","Olr1271","Olr1274","Olr1277-ps","Olr1278","Olr1279","Olr1281-ps","Olr1282-ps","Olr128","Olr1280","Olr1284-ps","Olr1283","Olr1285","Olr1287-ps","Olr1286","Olr1289-ps","Olr129","Olr1288","Olr1290-ps","Olr1291","Olr1292","Olr1293","Olr1296-ps","Olr1294","Olr1299-ps","Olr1298-ps","Olr1295","Olr1297","Olr13","Olr1300-ps","Olr130","Olr1301","Olr1302","Olr1303","Olr1304","Olr1305","Olr1306","Olr1307","Olr1308","Olr1310-ps","Olr131","Olr1309","Olr1311","Olr1312-ps","Olr1313","Olr1314","Olr1317-ps","Olr1318","Olr1315","Olr1316","Olr132","Olr1319","Olr1324-ps","Olr1320","Olr1325","Olr1328","Olr1326","Olr1323","Olr1321","Olr1327","Olr133-ps","Olr1329","Olr1333-ps","Olr1332","Olr1330","Olr1331","Olr1334","Olr1335","Olr1337","Olr1338","Olr134-ps","Olr1339","Olr1341","Olr1340","Olr1342-ps","Olr1343","Olr1345","Olr1344","Olr1348-ps","Olr1346","Olr1349","Olr1347","Olr135","Olr1350","Olr1351","Olr1352","Olr1357-ps","Olr1354-ps","Olr1353","Olr1355","Olr1356","Olr1358","Olr1359-ps","Olr1360-ps","Olr136","Olr1363-ps","Olr1362","Olr1361","Olr1364","Olr1365","Olr1367-ps","Olr1366","Olr1368","Olr1369","Olr1371-ps","Olr137","Olr1370","Olr1372","Olr1373","Olr1374","Olr1377-ps","Olr1376","Olr1375","Olr1379-ps","Olr1378","Olr138-ps","Olr1380","Olr1381","Olr1383","Olr1384","Olr1382","Olr1385","Olr1386","Olr1387","Olr1388","Olr1389","Olr1390-ps","Olr139","Olr1391","Olr1392","Olr1393","Olr1394","Olr1395","Olr1396","Olr1397","Olr1398","Olr1399","Olr14","Olr1400","Olr140","Olr1402-ps","Olr1401","Olr1403-ps","Olr1404","Olr1405","Olr1406","Olr1407","Olr1408","Olr1409","Olr1411","Olr1410","Olr141","Olr1412-ps","Olr1414","Olr1413","Olr1415","Olr1416","Olr1419-ps","Olr1417","Olr1418","Olr142","Olr1420-ps","Olr1421","Olr1422","Olr1424","Olr1427-ps","Olr1423","Olr1425","Olr1428","Olr1429-ps","Olr1430-ps","Olr143","Olr1433","Olr1431","Olr1434","Olr1432","Olr1435","Olr1436","Olr1438-ps","Olr1437","Olr144","Olr1439","Olr1440","Olr1444-ps","Olr1442","Olr1443","Olr1446-ps","Olr1445","Olr1447-ps","Olr1448","Olr1451","Olr1449","Olr1450","Olr145","Olr1452","Olr1453","Olr1454","Olr1455","Olr1456","Olr1457","Olr146-ps","Olr1458","Olr1459","Olr1460","Olr1461","Olr1462","Olr1464-ps","Olr1467","Olr1466","Olr1463","Olr1468","Olr147-ps","Olr1469","Olr1470","Olr1472","Olr1471","Olr1473-ps","Olr1475","Olr1474","Olr1476-ps","Olr1477-ps","Olr1479","Olr1480-ps","Olr148","Olr1481","Olr1483-ps","Olr1482","Olr1485","Olr1484-ps","Olr1487-ps","Olr1489-ps","Olr1486","Olr1488","Olr1490","Olr149","Olr1491","Olr1492","Olr1495-ps","Olr1493","Olr1497-ps","Olr1496","Olr1498","Olr1499","Olr15-ps","Olr150","Olr1500","Olr1503-ps","Olr1501","Olr1505","Olr1504","Olr1507","Olr1508-ps","Olr1509","Olr151-ps","Olr1510-ps","Olr1511","Olr1512","Olr1513","Olr1514","Olr1515","Olr1516","Olr1518-ps","Olr1517","Olr1519","Olr152","Olr1520","Olr1521","Olr1522","Olr1524-ps","Olr1525","Olr1523","Olr1526-ps","Olr1527-ps","Olr1528","Olr1529","Olr153","Olr1531","Olr1530","Olr1532","Olr1533","Olr1534-ps","Olr1535","Olr1536","Olr1537","Olr1538","Olr1540","Olr1539","Olr1541","Olr154","Olr1542","Olr1543","Olr1544-ps","Olr1545","Olr1546","Olr1548","Olr1547","Olr1549","Olr155","Olr1550-ps","Olr1551","Olr1552-ps","Olr1554-ps","Olr1553","Olr1555","Olr1556-ps","Olr1557","Olr1558","Olr156","Olr1559","Olr1560","Olr1563","Olr1562","Olr1561","Olr1564","Olr1566","Olr1565","Olr1567","Olr157","Olr1570","Olr1568","Olr1569","Olr1571","Olr1572","Olr1573-ps","Olr1575-ps","Olr1574-ps","Olr1577-ps","Olr1578-ps","Olr1576","Olr1580-ps","Olr158","Olr1579","Olr1581","Olr1583","Olr1582","Olr1584","Olr1585","Olr1586-ps","Olr1588","Olr1587","Olr1589","Olr1590","Olr159","Olr1591","Olr1592","Olr1593","Olr1594-ps","Olr1595","Olr1598","Olr1599-ps","Olr1597","Olr1596","Olr16","Olr1600","Olr160","Olr1601","Olr1604-ps","Olr1603-ps","Olr1602","Olr1605","Olr1606","Olr1607","Olr1608","Olr1609","Olr161","Olr1610","Olr1612","Olr1611","Olr1614","Olr1615","Olr1616","Olr1618-ps","Olr1617","Olr1619","Olr1620","Olr162","Olr1621","Olr1623-ps","Olr1622","Olr1624","Olr1629","Olr1626","Olr1625","Olr1627","Olr1630","Olr163","Olr1631","Olr1632","Olr1633","Olr1634-ps","Olr1637","Olr1635","Olr1638","Olr1639","Olr164","Olr1640","Olr1641","Olr1642","Olr1643","Olr1644","Olr1645","Olr1646","Olr1647-ps","Olr1648-ps","Olr1649-ps","Olr1650-ps","Olr165","Olr1651-ps","Olr1652","Olr1656-ps","Olr1653","Olr1655-ps","Olr1654","Olr1659-ps","Olr1657","Olr1658","Olr166-ps","Olr1665-ps","Olr1664","Olr1660","Olr1662","Olr1666","Olr1667","Olr1669-ps","Olr1668","Olr1672-ps","Olr1671","Olr1670","Olr167","Olr1674-ps","Olr1676-ps","Olr1675","Olr1673","Olr1680","Olr1679","Olr168","Olr1678","Olr1681","Olr1682","Olr1684","Olr1683","Olr1685-ps","Olr1686","Olr1687","Olr1688","Olr1689","Olr1690","Olr1692","Olr1691","Olr1693","Olr1694","Olr1695","Olr1697","Olr1696","Olr1698-ps","Olr1699","Olr17","Olr170","Olr1703-ps","Olr1701","Olr1700","Olr1702","Olr1704","Olr1706-ps","Olr1705","Olr1707","Olr1709","Olr1708","Olr171","Olr1710","Olr1711-ps","Olr1712-ps","Olr1713-ps","Olr1714","Olr1717-ps","Olr1715-ps","Olr1716-ps","Olr1719-ps","Olr1718","Olr172","Olr1720","Olr1721-ps","Olr1723-ps","Olr1722","Olr1724","Olr1725-ps","Olr1726","Olr1728-ps","Olr1729","Olr173-ps","Olr1731","Olr1732-ps","Olr1733","Olr1730","Olr1734","Olr1735","Olr1736","Olr1737","Olr1741-ps","Olr1738","Olr174","Olr1739","Olr1740-ps","Olr1742","Olr1743","Olr1744","Olr1747-ps","Olr1746","Olr1749","Olr1748","Olr175","Olr1750","Olr1751","Olr1752-ps","Olr1753-ps","Olr1754-ps","Olr1756-ps","Olr1755-ps","Olr1757-ps","Olr1758-ps","Olr1759-ps","Olr1760-ps","Olr176","Olr1761-ps","Olr1762-ps","Olr1763-ps","Olr1764-ps","Olr1765","Olr1766","Olr1767","Olr1768","Olr1769-ps","Olr1770-ps","Olr177-ps","Olr1771-ps","Olr1772-ps","Olr1773-ps","Olr1774-ps","Olr1775-ps","Olr1776-ps","Olr1777-ps","Olr1778-ps","Olr1779-ps","Olr1780-ps","Olr178","Olr1781-ps","Olr1783-ps","Olr1782-ps","Olr1785-ps","Olr1784-ps","Olr1786-ps","Olr1787-ps","Olr1788-ps","Olr1790-ps","Olr1789-ps","Olr1791-ps","Olr1792-ps","Olr1793-ps","Olr179","Olr1795-ps","Olr1794-ps","Olr1796-ps","Olr1797-ps","Olr1798-ps","Olr1799-ps","Olr18-ps","Olr180","Olr1800-ps","Olr1802-ps","Olr1801-ps","Olr1803-ps","Olr1804-ps","Olr1805-ps","Olr1806-ps","Olr1807-ps","Olr1809-ps","Olr1808-ps","Olr1810-ps","Olr181","Olr1811-ps","Olr1812-ps","Olr1814-ps","Olr1813-ps","Olr1815-ps","Olr1816-ps","Olr1817-ps","Olr1818-ps","Olr1819-ps","Olr182-ps","Olr1820-ps","Olr1821-ps","Olr1822-ps","Olr1823-ps","Olr1824-ps","Olr1825-ps","Olr1826-ps","Olr1827-ps","Olr1828-ps","Olr1829-ps","Olr1830-ps","Olr183","Olr1831-ps","Olr1832-ps","Olr1833-ps","Olr1835-ps","Olr1834-ps","Olr1836-ps","Olr1837-ps","Olr1838-ps","Olr1839-ps","Olr1840-ps","Olr184","Olr1841-ps","Olr1842-ps","Olr1843-ps","Olr1844-ps","Olr1845","Olr1846-ps","Olr1849-ps","Olr1847-ps","Olr1848-ps","Olr1850-ps","Olr185","Olr1851-ps","Olr1852-ps","Olr1853-ps","Olr1855-ps","Olr1854-ps","Olr1856-ps","Olr1857-ps","Olr1858-ps","Olr1859-ps","Olr1860-ps","Olr186","Olr1861-ps","Olr1862-ps","Olr1863-ps","Olr1864-ps","Olr1865-ps","Olr1866-ps","Olr1868","Olr1869","Olr1870","Olr1867","Olr187-ps","Olr1872","Olr1873","Olr1874","Olr1876","Olr1875","Olr1878","Olr1877","Olr188","Olr19","Olr189","Olr190","Olr191-ps","Olr192","Olr193","Olr195-ps","Olr194","Olr196","Olr197","Olr198","Olr2-ps","Olr199","Olr1l","Olr20","Olr200","Olr201","Olr202","Olr203","Olr205","Olr204","Olr206","Olr207-ps","Olr208","Olr21-ps","Olr209","Olr210","Olr212-ps","Olr211","Olr214","Olr213","Olr215","Olr216-ps","Olr217","Olr218","Olr22-ps","Olr220","Olr219","Olr221","Olr222","Olr223","Olr225-ps","Olr224","Olr228-ps","Olr226","Olr227","Olr229","Olr230","Olr23","Olr231","Olr232","Olr236-ps","Olr233","Olr235","Olr234","Olr238-ps","Olr237","Olr239","Olr24","Olr243-ps","Olr241","Olr240","Olr242","Olr245","Olr244","Olr246","Olr247","Olr248-ps","Olr25","Olr250","Olr251","Olr254-ps","Olr252","Olr255","Olr256-ps","Olr257","Olr258-ps","Olr26-ps","Olr259","Olr260","Olr261-ps","Olr262","Olr265-ps","Olr263","Olr264","Olr266-ps","Olr267","Olr268","Olr269-ps","Olr27","Olr270","Olr271","Olr273-ps","Olr272","Olr274-ps","Olr276","Olr278","Olr279","Olr28-ps","Olr280-ps","Olr281","Olr282","Olr283","Olr284-ps","Olr285","Olr286","Olr287","Olr288","Olr29","Olr289","Olr290-ps","Olr293-ps","Olr292","Olr294-ps","Olr294","Olr295","Olr296-ps","Olr297","Olr298","Olr299","Olr3","Olr30","Olr301-ps","Olr300","Olr302","Olr303","Olr304","Olr305","Olr306","Olr307","Olr308","Olr309","Olr31-ps","Olr310","Olr312","Olr311","Olr313","Olr314-ps","Olr315","Olr317-ps","Olr318","Olr319","Olr32","Olr320-ps","Olr321","Olr322","Olr323","Olr324","Olr325","Olr326","Olr327","Olr328-ps","Olr329","Olr33-ps","Olr330","Olr331","Olr332","Olr333-ps","Olr334","Olr335-ps","Olr336","Olr337","Olr338","Olr339","Olr34","Olr340","Olr342-ps","Olr341","Olr343","Olr344","Olr346","Olr347","Olr348","Olr349","Olr35","Olr350-ps","Olr351-ps","Olr352","Olr353-ps","Olr354","Olr355-ps","Olr356-ps","Olr357","Olr359-ps","Olr358","Olr36","Olr360","Olr361","Olr362-ps","Olr366-ps","Olr363","Olr365","Olr367","Olr368-ps","Olr369-ps","Olr370-ps","Olr37","Olr371","Olr372","Olr373","Olr374","Olr375","Olr376","Olr377","Olr378","Olr38-ps","Olr379","Olr380","Olr381-ps","Olr382","Olr383","Olr384","Olr385","Olr386","Olr389-ps","Olr387","Olr391-ps","Olr39","Olr390","Olr393-ps","Olr394-ps","Olr392","Olr395","Olr396","Olr397","Olr398","Olr399","Olr4","Olr40","Olr400","Olr401","Olr402","Olr403","Olr404","Olr405-ps","Olr406","Olr407","Olr408","Olr409","Olr41","Olr410","Olr411","Olr412-ps","Olr413","Olr414","Olr415","Olr416","Olr417","Olr418","Olr42-ps","Olr419","Olr420","Olr421","Olr422","Olr423","Olr424","Olr425","Olr427","Olr429","Olr428","Olr43","Olr433-ps","Olr431-ps","Olr434","Olr435-ps","Olr436","Olr437","Olr437-ps","Olr438-ps","Olr439","Olr44","Olr440","Olr441","Olr442","Olr443","Olr444","Olr445","Olr446","Olr447","Olr449-ps","Olr448","Olr45","Olr452-ps","Olr450","Olr453","Olr454","Olr455","Olr456","Olr457-ps","Olr458","Olr459","Olr46","Olr460-ps","Olr461","Olr462","Olr463","Olr464","Olr465","Olr466","Olr467-ps","Olr468","Olr469","Olr47","Olr470","Olr471","Olr472","Olr473","Olr475","Olr476","Olr477","Olr478-ps","Olr479","Olr48","Olr480","Olr481","Olr482","Olr483","Olr484","Olr485","Olr487-ps","Olr486","Olr488","Olr489-ps","Olr49","Olr490","Olr491","Olr492-ps","Olr493","Olr494-ps","Olr495","Olr496","Olr497-ps","Olr498-ps","Olr5","Olr499","Olr50","Olr501-ps","Olr500","Olr503-ps","Olr502","Olr505","Olr506-ps","Olr507","Olr508","Olr509-ps","Olr510","Olr51","Olr511-ps","Olr512-ps","Olr513","Olr514","Olr515","Olr516","Olr517","Olr518","Olr519","Olr520","Olr521-ps","Olr523-ps","Olr524-ps","Olr522","Olr525-ps","Olr526","Olr527","Olr528","Olr529","Olr53","Olr530","Olr531","Olr532","Olr533","Olr534-ps","Olr536","Olr535","Olr537","Olr538-ps","Olr54-ps","Olr539","Olr540","Olr541","Olr542","Olr543-ps","Olr544","Olr545","Olr547-ps","Olr546","Olr548-ps","Olr549-ps","Olr55-ps","Olr551","Olr550","Olr552","Olr553-ps","Olr554","Olr555","Olr556","Olr558","Olr557","Olr559","Olr56","Olr560","Olr561","Olr562","Olr563","Olr564-ps","Olr565-ps","Olr567","Olr566","Olr568-ps","Olr569","Olr57","Olr570-ps","Olr571-ps","Olr573-ps","Olr572-ps","Olr574-ps","Olr576","Olr575","Olr577","Olr579-ps","Olr578","Olr58-ps","Olr580-ps","Olr581","Olr582","Olr583","Olr584","Olr585-ps","Olr586","Olr587","Olr588","Olr589-ps","Olr590","Olr591-ps","Olr59","Olr593-ps","Olr592","Olr594","Olr596","Olr595","Olr597","Olr598","Olr6","Olr600-ps","Olr60","Olr601","Olr603-ps","Olr602","Olr604","Olr605-ps","Olr606","Olr607","Olr608","Olr609","Olr61","Olr610","Olr611","Olr612-ps","Olr613","Olr614","Olr616-ps","Olr617-ps","Olr619","Olr62","Olr620-ps","Olr621","Olr622-ps","Olr624","Olr623","Olr625","Olr626-ps","Olr627-ps","Olr628-ps","Olr629","Olr63","Olr630","Olr632-ps","Olr631","Olr633","Olr634","Olr635","Olr636","Olr638-ps","Olr637","Olr639","Olr640","Olr641","Olr642-ps","Olr643-ps","Olr644-ps","Olr645-ps","Olr646","Olr647-ps","Olr648","Olr649","Olr650","Olr651","Olr653","Olr652","Olr654","Olr655","Olr657","Olr658","Olr66-ps","Olr659","Olr660","Olr661","Olr662","Olr663","Olr664","Olr665","Olr667-ps","Olr666","Olr668","Olr67","Olr669","Olr670","Olr671","Olr672","Olr673","Olr674","Olr676-ps","Olr675","Olr678","Olr677","Olr679","Olr680-ps","Olr68","Olr681","Olr682-ps","Olr683-ps","Olr684","Olr685-ps","Olr686","Olr687","Olr688-ps","Olr689","Olr69","Olr690","Olr691","Olr692-ps","Olr693","Olr694","Olr695","Olr696","Olr697","Olr698","Olr699-ps","Olr700-ps","Olr7","Olr70","Olr701","Olr703","Olr702","Olr704","Olr705","Olr706-ps","Olr707","Olr708-ps","Olr709","Olr71-ps","Olr710","Olr711","Olr712","Olr713","Olr714","Olr715","Olr716","Olr717","Olr718","Olr719-ps","Olr72","Olr720","Olr721","Olr722","Olr723-ps","Olr724","Olr726","Olr725","Olr727","Olr728","Olr729","Olr73-ps","Olr730-ps","Olr732-ps","Olr731","Olr734","Olr733","Olr735","Olr738-ps","Olr736","Olr737","Olr739-ps","Olr740-ps","Olr74","Olr741","Olr743-ps","Olr742","Olr744","Olr746-ps","Olr745","Olr747","Olr748","Olr749","Olr75","Olr750","Olr752","Olr753","Olr755-ps","Olr754","Olr756","Olr758","Olr757","Olr76-ps","Olr762-ps","Olr760","Olr764-ps","Olr763","Olr765","Olr766","Olr767","Olr768","Olr769","Olr77","Olr770","Olr771","Olr772","Olr773","Olr775","Olr774","Olr776","Olr777","Olr778","Olr779","Olr78","Olr780","Olr781","Olr782","Olr783","Olr784","Olr785","Olr786","Olr787-ps","Olr788","Olr789","Olr79","Olr790","Olr791","Olr792","Olr794-ps","Olr795","Olr798-ps","Olr796","Olr799","Olr80","Olr8","Olr801","Olr802","Olr803","Olr804","Olr805-ps","Olr806","Olr807","Olr808","Olr809","Olr81","Olr810","Olr811","Olr812","Olr813","Olr814-ps","Olr815-ps","Olr816","Olr818","Olr819","Olr82","Olr820","Olr821","Olr822-ps","Olr823","Olr824","Olr825","Olr826","Olr827","Olr829","Olr83","Olr828","Olr830","Olr831","Olr832","Olr834","Olr833","Olr835-ps","Olr836","Olr837","Olr838","Olr839","Olr84","Olr840","Olr843-ps","Olr841","Olr846-ps","Olr845","Olr844","Olr848","Olr847","Olr85","Olr850","Olr851","Olr852","Olr853","Olr854","Olr855","Olr856","Olr857","Olr858","Olr859","Olr86","Olr860","Olr862","Olr865","Olr867","Olr868","Olr866","Olr870-ps","Olr87","Olr869","Olr872-ps","Olr871-ps","Olr873-ps","Olr874-ps","Olr876","Olr875","Olr877","Olr878","Olr879","Olr88","Olr880","Olr881","Olr882-ps","Olr883","Olr884-ps","Olr885-ps","Olr886","Olr888-ps","Olr887-ps","Olr89","Olr889","Olr890-ps","Olr891-ps","Olr893-ps","Olr892","Olr894","Olr895-ps","Olr896","Olr897-ps","Olr899-ps","Olr898","Olr9-ps","Olr90-ps","Olr900-ps","Olr901","Olr902-ps","Olr904-ps","Olr903","Olr905","Olr906","Olr907","Olr908","Olr909-ps","Olr91","Olr912-ps","Olr910","Olr913-ps","Olr914-ps","Olr916","Olr918-ps","Olr919-ps","Olr917","Olr920","Olr92","Olr921","Olr923-ps","Olr922","Olr924-ps","Olr925-ps","Olr926-ps","Olr927","Olr928-ps","Olr929-ps","Olr930-ps","Olr93","Olr931","Olr932","Olr934-ps","Olr933-ps","Olr935-ps","Olr936","Olr937","Olr938-ps","Olr939-ps","Olr94","Olr940-ps","Olr941-ps","Olr942-ps","Olr943","Olr944-ps","Olr945-ps","Olr946-ps","Olr947","Olr948-ps","Olr949-ps","Olr95","Olr951","Olr950","Olr952","Olr953-ps","Olr954","Olr955-ps","Olr958-ps","Olr956","Olr957-ps","Olr959","Olr96","Olr960","Olr961-ps","Olr963-ps","Olr962","Olr964","Olr966-ps","Olr965-ps","Olr967-ps","Olr968-ps","Olr969-ps","Olr97","Olr970-ps","Olr971-ps","Olr972-ps","Olr973-ps","Olr975-ps","Olr974-ps","Olr976-ps","Olr977-ps","Olr978-ps","Olr979-ps","Olr98","Olr980-ps","Olr981-ps","Olr982","Olr983-ps","Olr985-ps","Olr984","Olr986-ps","Olr987","Olr988-ps","Olr989-ps","Olr99-ps","Olr990","Olr991","Olr992-ps","Olr993-ps","Olr994-ps","Olr995","Olr997-ps","Olr996","Olr998-ps","Olr999-ps","Oma1","Omd","Omg","Omp","Onecut1","Onecut2","Onecut3","Ooep","Oog3","Oog1","Oosp1","Oosp2","Opa3","Opalin","Opa1","Opcml","Oplah","Ophn1","Opn1mw","Opn1sw","Opn3","Opn4","Opn5","Oprd1","Oprk1","Oprl1","Oprpn","Optc","Or10ad1","Oprm1","Or51t1","Optn","Or7e24","Orai2","Orai1","Orai3","Oraov1","Orc1","Orc2","Orc3","Orc4","Orc5","Orc6","Orm1","Ormdl1","Ormdl2","Ormdl3","Os9","Osbp","Osbp2","Osbpl11","Osbpl10","Osbpl1a","Osbpl2","Osbpl3","Osbpl5","Osbpl6","Osbpl7","Osbpl8","Osbpl9","Oscar","Oscp1","Oser1","Osgep","Osgepl1","Osgin1","Osm","Osgin2","Osmr","Osr1","Osr2","Ost4","Ostc","Ostf1","Ostn","Ostm1","Otc","Otoa","Otof","Otogl","Otog","Otol1","Otop1","Otop2","Otop3","Otor","Otos","Otp","Otub1","Otub2","Otud1","Otud3","Otud4","Otud5","Otud6a","Otud6b","Otud7a","Otud7b","Otulin","Otx1","Otx2","Ovca2","Ovch2","Ovol2","Ovol1","Ovol3","Oxa1l","Oxct2a","Oxct1","Oxct2b","Oxgr1","Oxld1","Oxnad1","Oxsm","Oxr1","Oxsr1","P22k15","Oxt","Oxtr","P2rx1","P2rx3","P2rx2","P2rx4","P2rx5","P2rx6","P2ry10","P2ry1","P2rx7","P2ry13","P2ry12","P2ry14","P2ry2","P2ry4","P2ry6","P3h3","P3h2","P3h1","P3h4","P4ha1","P4ha2","P4ha3","P4hb","P4htm","p53-ps","Pabpc1-ps1","Pa2g4","Pabpc1","Pabpc1l2a","Pabpc1l","Pabpc2","Pabpc4l","Pabpc4","Pabpc5","Pabpc6","Pabpn1l","Pabpn1","Pacrg","Pacrgl","Pacs1","Pacs2","Pacsin1","Pacsin2","Pacsin3","Padi1","Padi3","Padi2","Padi6","Padi4","Paf1","Pafah1b3","Pafah1b2","Pafah1b1","Pag1","Pafah2","Pagr1","Paip1","Pah","Paics","Paip2","Paip2b","Paip2l1","Pak1ip1","Pak2","Pak1","Pak3","Pak4","Pak6","Pak7","Palb2","Pald1","Palld","Palldl1","Palm","Palm2","Palm3","Palmd","Pam16","Pamr1","Pam","Pan3","Pan2","Pank1","Pank3","Pank2","Pank4","Panx2","Panx1","Panx3","Paox","Papd4","Papd5","Papd7","Papln","Papolb","Papola","Papolg","Pappa1","Papss1","Papss2","Paqr3","Paqr4","Paqr5","Paqr6","Paqr7","Paqr8","Paqr9","Pard3b","Pard3","Pard6a","Pard6b","Pard6g","Parg","Parl","Park7","Parm1","Parn","Pappa2","Parp10","Parp11","Parp12","Parp16","Parp14","Parp1","Parp2","Parp3","Parp4","Parp6","Parp9","Parp8","Pars2","Parpbp","Parva","Parvg","Parvb","Pasd1","Pate-f","Pask","Pate3","Pate1","Pate2","Pate4","Patl2","Patl1","Patj","Patz1","Pax1","Pawr","Pax2","Pax3","Pax5","Pax4","Pax7","Pax9","Paxbp1","Pax8","Pax6","Paxip1","Pbdc1","Paxx","Pbld2","Pbk","Pbp-ps","Pbld1","Pbp2","Pbsn","Pbx1","Pbx3","Pbx2","Pbrm1","Pbxip1","Pbx4","Pcbd2","Pcbd1","Pcbp1","Pc","Pcbp2","Pcbp4","Pcbp3","Pccb","Pcdh1","Pcca","Pcdh10","Pcdh11x","Pcdh12","Pcdh15","Pcdh17","Pcdh18","Pcdh19","Pcdh20","Pcdh8","Pcdh9","Pcdha1","Pcdh7","Pcdha10","Pcdha2","Pcdha13","Pcdha11","Pcdha12","Pcdha3","Pcdha5","Pcdha7","Pcdha6","Pcdha8","Pcdha4","Pcdha9","Pcdhac1","Pcdhb1","Pcdhac2","Pcdhb10","Pcdhb11","Pcdhb14","Pcdhb12","Pcdhb15","Pcdhb16","Pcdhb17","Pcdhb18","Pcdhb2","Pcdhb19","Pcdhb20","Pcdhb21","Pcdhb2l","Pcdhb22","Pcdhb3","Pcdhb4","Pcdhb5","Pcdhb6","Pcdhb7","Pcdhb8","Pcdhb9","Pcdhga1","Pcdhga10","Pcdhga11","Pcdhga12","Pcdhga2","Pcdhga3","Pcdhga4","Pcdhga5","Pcdhga6","Pcdhga8","Pcdhgb2","Pcdhga7","Pcdhgb4","Pcdhga9","Pcdhgb6","Pcdhgb5","Pcdhgb8","Pcdhgb7","Pcdhgc3","Pcdhgc5","Pced1a","Pcgf1","Pcf11","Pced1b","Pcgf2","Pcgf3","Pcid2","Pcgf6","Pcgf5","Pcif1","Pclaf","Pck2","Pck1","Pclo","Pcm1","Pcmt1","Pcmtd1","Pcmtd2","Pcnp","Pcnt","Pcnx1","Pcna","Pcnx2","Pcnx3","Pcnx4","Pcolce","PCOLCE2","Pcp2","Pcp4l1","Pcp4","Pcsk1n","Pcsk1","Pcsk2","Pcsk4","Pcsk5","Pcsk6","Pcsk7","Pctp","Pcsk9","Pcyox1","Pcyox1l","Pcyt1b","Pcyt1a","Pdap1","Pcyt2","Pdc","Pdcd10","Pdcd1lg2","Pdcd1","Pdcd2","Pdcd11","Pdcd2l","Pdcd5","Pdcd6","Pdcd4","Pdcd6ip","Pdcd7","Pdcl2","Pdcl","Pdcl3","Pde10a","Pde12","Pde11a","Pde1a","Pde1b","Pde1c","Pde2a","Pde3b","Pde3a","Pde4a","Pde4b","Pde4c","Pde4dip","Pde5a","Pde6a","Pde4d","Pde6c","Pde6b","Pde6d","Pde6g","Pde6h","Pde7a","Pde7b","Pde8a","Pde8b","Pdf","Pde9a","Pdgfa","Pdgfc","Pdgfd","Pdgfb","Pdgfrl","Pdgfra","Pdha1l1","Pdha1","Pdha2","Pdgfrb","Pdhb","Pdia2","Pdhx","Pdia5","Pdia3","Pdia4","Pdik1l","Pdia6","Pdilt","Pdk1","Pdk3","Pdk2","Pdk4","Pdlim1","Pdlim2","Pdlim3","Pdlim4","Pdlim5","Pdlim7","Pdp1","Pdp2","Pdpk1","Pdpr","Pdrg1","Pdpn","Pds5a","Pdss1","Pds5b","Pdss2","Pdxdc1","Pdxp","Pdxk","Pdx1","Pdyn","Pdzd11","Pdzd3","Pdzd2","Pdzd4","Pdzd7","Pdzd8","Pdzd9","Pdzk1","Pdzk1ip1","Pdzrn4","Pdzrn3","Pea15","Pebp1-ps1","Peak1","Pear1","Pebp4","Pebp1","Pef1","Pecr","Peg10","Peg12","Pecam1","Peg3","Peli1-ps1","Peli1","Peli2","Peli3","Pelo","Pelp1","Pemt","Pepd","Penk","Per1","Perm1","Per3","Perp","Per2","Pes1","Pet100","Pex10","Pex11a","Pex1","Pex11g","Pex11b","Pex12","Pex13","Pex14","Pex16","Pex26","Pex19","Pex2","Pex3","Pex5","Pex6","Pex5l","Pex7","Pf4","Pfdn1","Pfdn4","Pfdn2","Pfas","Pfdn5","Pfdn6","Pfkfb1","Pfkfb3","Pfkfb4","Pfkfb2","Pfkl","Pfkm","Pfn2","Pfkp","Pfn3","Pfn1","Pfpl","Pfn4","Pga5","Pgam1","Pgam2","Pgap1","Pgam5","Pgbd1","Pgap3","Pgap2","Pgbd2","Pgbd5","Pgc","Pgghg","Pgd","Pggt1b","Pgf","Pgk2","Pgls","Pgk1","Pglyrp1","Pglyrp2","Pglyrp3","Pglyrp3b","Pglyrp4","Pgm1","Pgm2","Pgm2l1","Pgm5","Pgm3","Pgpep1","Pgp","Pgpep1l","Pgr15l","Pgy2","Pgs1","Pgrmc2","Pgr","Pgrmc1","Pgy4","Phactr4","Phactr3","Phactr1","Phactr2","Phb-ps1","Phax","Phc1","Phb","Phb2","Phc2","Phc3","Phf10","Phf1","Phex","Phf11","Phf11b","Phf13","Phf12","Phf19","Phf14","Phf2","Phf20","Phf20l1","Phf21b","Phf23","Phf21a","Phf24","Phf3","Phf5a","Phf6","Phf7","Phf8","Phgr1","Phgdh","Phip","Phka1","Phka2","Phkb","Phkg1","Phkg2","Phlda1","Phlda2","Phlda3","Phldb2","Phldb1","Phldb3","Phlpp2","Phospho1","Phlpp1","Phospho2","Phox2a","Phox2b","Phpt1","Phtf1","Phrf1","Phtf2","Phyh","Phyhd1","Phyhip","Phyhipl","Pi15","Phykpl","Pi16","Pi4k2a","Pi4k2b","Pi4kb","Pianp","Pi4ka","Pias1","Pias2","Pias3","Pibf1","Pias4","Picalm","Pid1","Pidd1","Pick1","Piezo1","Pifo","Pif1","Piga","Piezo2","Pigb","Pigbos1","Pigf","Pigc","Pigh","Pigg","Pigk","Pigm","Pigl","Pigo","Pign","Pigp","Pigq","Pigs","Pigr","Pigt","Pigu","Pigv","Pigw","Pigx","Pigy","Pigz","Pih1d2","Pih1d1","Pih1d3","Pik3ap1","Pik3c2a","Pik3c2b","Pik3c2g","Pik3c3","Pik3ca","Pik3cb","Pik3cd","Pik3ip1","Pik3cg","Pik3r2","Pik3r3","Pik3r4","Pik3r5","Pik3r1","Pik3r6","Pilra","Pilrb","Pikfyve","Pim2","Pim1","Pim3","Pimreg","Pin4","Pin1","Pinlyp","Pinx1","Pink1","Pip","Pip4k2b","Pip4k2a","Pip4k2c","Pip4p1","Pip4p2","Pip5k1a","Pip5kl1","Pip5k1b","Pip5k1c","Pipox","Pira2","Pir","Pirt","Pirb","Pithd1","Pisd","Pitpna","Pitpnb","Pitpnc1","Pitpnm1","Pitpnm2","Pitpnm3","Pitrm1","Pitx1","Pitx3","Pitx2","Piwil1","Piwil2","Piwil4","Pja1","Pja2","Pjvk","Pkd1l2","Pkd1l1","Pkd1","Pkd1l3","Pkd2l1","Pkd2","Pkd2l2","Pkdrej","Pkdcc","Pkhd1","Pkia","Pkhd1l1","Pkig","Pkib","Pkmyt1","Pklr","Pkm","Pkn1","Pkn2","Pknox1","Pkn3","Pknox2","Pkp1","Pkp2","Pkp3","Pla1a","Pkp4","Pla2g10","Pla2g12a","Pla2g12b","Pla2g15","Pla2g16","Pla2g1b","Pla2g2c","Pla2g2a","Pla2g2e","Pla2g2d","Pla2g2f","Pla2g3","Pla2g4b","Pla2g4cl1","Pla2g4c","Pla2g4a","Pla2g4d","Pla2g4f","Pla2g4e","Pla2g5","Pla2g7","Pla2r1","Plaa","Plac1","Pla2g6","Plac8","Plac8l1","Plac9","Plag1","Plagl1","Plagl2","Plb1","Plaur","Plbd1","Plat","Plau","Plbd2","Plcb3","Plcb2","Plcb1","Plcb4","Plcd1","Plcd3","Plcd4","Plce1","Plch1","Plcg2","Plch2","Plcg1","Plcxd1","Plcl1","Plcl2","Plcxd3","Plcxd2","Pld3","Plcz1","Pld4","Pld2","Pld6","Pld1","Pld5","Plek","Plek2","Plekha2","Plekha1","Plec","Plekha3","Plekha4","Plekha6","Plekha7","Plekha5","Plekha8","Plekhb1","Plekhb2","Plekhd1","Plekhf1","Plekhf2","Plekhg1","Plekhg2","Plekhg3","Plekhg4","Plekhg7","Plekhg5","Plekhg6","Plekhh1","Plekhh3","Plekhh2","Plekhm1","Plekhj1","Plekhm2","Plekhm3","Plekhn1","Plekho2","Plekho1","Plet1","Plekhs1","Plgrkt","Plin1","Plin3","Plin2","Plin4","Plg","Plin5","Plk3","Plk2","Plk4","Plk1","Plk5","Pllp","Plod2","Plod1","Pln","Plod3","Plp2","Plp1","Plpbp","Plpp1","Plpp2","Plpp3","Plpp4","Plpp5","Plpp6","Plpp7","Plppr1","Plppr2","Plppr5","Plppr3","Plppr4","Plrg1","Pls1","Plscr2","Pls3","Plscr1","Plscr4","Plscr3","Plscr5","Pltp","Plvap","Plxdc1","Plxdc2","Plxna1","Plxna2","Plxna4","Plxna3","Plxnb1","Plxnb2","Plxnc1","Plxnb3","Plxnd1","Pm20d1","Pm20d2","Pmaip1","Pmel","Pmch","Pmepa1","Pmf1","Pmfbp1","Pmm2","Pmm1","Pml","Pmp2","Pmp22","Pmpca","Pmpcb","Pms1","Pms2","Pmvk","Pnck","Pnisr","Pnldc1","Pnkp","Pnkd","Pnlip","Pnliprp1","Pnma1","Pnma2","Pnliprp2","Pnma3","Pnma5","Pnma8a","Pnma8b","Pno1-ps1","Pnmt","Pnn","Pno1","Pnoc","Pnp","Pnpla1","Pnpla2","Pnpla3","Pnpla4","Pnpla5","Pnpla6","Pnpla8","Pnpla7","Pnpo","Pnrc1","Pnpt1","Pnrc2","Poc1a","Poc1b","Podn","Poc5","Podnl1","Podxl2","Podxl","Pof1b","Pofut2","Pofut1","Pogk","Poglut1","Pogz","Pola2","Pola1","Polb","Pold1","Pold2","Pold3","Pold4","Poldip2","Poldip3","Pole2","Pole4","Pole","Pole3","Polh","Polg2","Poli","Polg","Polk","Poll","Polm","Poln","Polq","Polr1a","Polr1b","Polr1d","Polr1c","Polr1e","Polr2a","Polr2b","Polr2c","Polr2d","Polr2e","Polr2h-ps1","Polr2f","Polr2g","Polr2h","Polr2i","Polr2j","Polr2l","Polr2l-ps1","Polr2k","Polr3b","Polr2m","Polr3d","Polr3a","Polr3c","Polr3d-ps1","Polr3f","Polr3e","Polr3g","Polr3gl","Polr3h","Pom121l12","Polrmt","Polr3k","Pom121","Pom121l2","Pomgnt2","Pomgnt1","Pomk","Pomp","Pomc","Pomt2","Pomt1","Pon2","Pon3","Pon1","Pop1","Pop4","Pop5","Pop7","Popdc3","Popdc2","Porcn","Por","Postn","Pot1b","Pot1","Potec","Potef","Poteh","Poteg","Potem","Pou2af1","Pou1f1","Pou2f1","Pou2f3","Pou2f2","Pou3f1","Pou3f2","Pou3f3","Pou3f4","Pou4f1","Pou4f3","Pou4f2","Pou5f2","Pou6f2","Pou5f1","Pou6f1","Pp2d1","Ppa2","Ppa1","Ppan","Ppard","Ppargc1b","Ppara","Ppbp","Ppat","Ppcdc","Ppargc1a","Ppcs","Pparg","Ppdpf","Ppef1","Ppef2","Ppfia1","Ppfia2","Ppfia3","Ppfia4","Pphln1","Ppfibp1","Ppfibp2","Ppial4d","Ppia","Ppial4g","Ppic","Ppid-ps1","Ppib","Ppid","Ppidl1","Ppie","Ppig","Ppif","Ppih","Ppil1","Ppil2","Ppil4","Ppil3","Ppil6","Ppip5k1","Ppip5k2","Ppl","Ppm1a","Ppm1b","Ppm1d","Ppm1e","Ppm1g","Ppm1f","Ppm1j","Ppm1h","Ppm1m","Ppm1k","Ppm1l","Ppm1n","Ppme1","Ppp1cb-ps","Ppox","Ppp1ca","Ppp1cb","Ppp1r11","Ppp1r10","Ppp1cc","Ppp1r12b","Ppp1r12a","Ppp1r13b","Ppp1r12c","Ppp1r13l","Ppp1r14a","Ppp1r14b","Ppp1r14c","Ppp1r14d","Ppp1r15a","Ppp1r15b","Ppp1r16a","Ppp1r17","Ppp1r16b","Ppp1r18","Ppp1r1a","Ppp1r1c","Ppp1r1b","Ppp1r2","Ppp1r2-ps1","Ppp1r26","Ppp1r21","Ppp1r27","Ppp1r32","Ppp1r35","Ppp1r36","Ppp1r37","Ppp1r3a","Ppp1r3b","Ppp1r3c","Ppp1r3d","Ppp1r3f","Ppp1r3e","Ppp1r3g","Ppp1r42","Ppp1r8","Ppp1r7","Ppp1r9a","Ppp1r9b","Ppp2cb","Ppp2r1a","Ppp2ca","Ppp2r1b","Ppp2r2c","Ppp2r2a","Ppp2r2b","Ppp2r2d","Ppp2r3a","Ppp2r3b","Ppp2r3c","Ppp2r5a","Ppp2r5b","Ppp2r5c","Ppp2r5d","Ppp2r5e","Ppp3cb","Ppp3ca","Ppp3cc","Ppp3r1","Ppp3r2","Ppp4c","Ppp4r1","Ppp4r3c","Ppp4r3a","Ppp4r2","Ppp4r3b","Ppp4r4","Ppp6r1","Ppp6c","Ppp6r2","Ppp5c","Ppp6r3","Pprc1","Ppt1","Ppt2","Pptc7","Ppy","Ppwd1","Pqbp1","Pqlc1","Pqlc2","Pradc1","Pqlc3","Praf2","Prag1","Pram1","Pramef12","Prame","Pramef17","Pramef20","pramef20l","Pramef25","Pramef5","Pramef6","Pramef27","Pramef8","Pramel","Pramel7","Pramel3","Pramel6","Prap1","Prb1","Prb3","Prc1","Prcd","Prcc","Prcp","Prdm1","Prdm11","Prdm12","Prdm10","Prdm13","Prdm14","Prdm15","Prdm16","Prdm2","Prdm4","Prdm5","Prdm8","Prdm6","Prdm9","Prdx1l1","Prdx1","Prdx2","Prdx3","Prdx4","Prdx5","Prdx6","Prelid3a","Prelid1","Preb","Prelid2","Prelid3b","Prep","Prepl","Prelp","Prex1","Prex2","Prg3","Prg2","Prf1","Prg4","Prh1","Prickle2","Prickle1","Prickle4","Prickle3","Prim1","Prima1","Primpol","Prim2","Prkaa1","Prkab1","Prkab2","Prkaa2","Prkaca","Prkacb","Prkag2","Prkag3","Prkag1","Prkar1a-ps1","Prkar1a","Prkar1b","Prkar2a","Prkar2b","Prkcb","Prkca","Prkcg","Prkce","Prkcd","Prkcsh","Prkch","Prkci","Prkcq","Prkd2","Prkd1","Prkd3","Prkcz","Prkdc","Prkg2","Prkg1","Prkra","Prkrip1","Prkx","Prkn","Prl2a1","Prl2b1","Prl2c1","Prl3a1","Prl3b1","Prl3d1","Prl3c1","Prl","Prl3d2","Prl4a1","Prl5a1","Prl3d4","Prl5a2","Prl6a1","Prl7a3","Prl7a4","Prl7d1","Prl7b1","Prl8a3","Prl8a2","Prl8a4","Prl8a7","Prl8a5","Prl8a9","Prlh","Prlhr","Prm2","Prm1","Prm3","Prlr","Prmt2","Prmt1","Prmt3","Prmt5","Prmt6","Prmt7","Prmt8","Prmt9","Prnd","Prob1","Proca1","Prnp","Procr","Prodh1","Proc","Prodh2","Prok1","Prokr1","Prok2","Prokr2","Prom2","Prop1","Prorsd1","Prom1","Proser2","Pros1","Proser1","Proser3","Prox1","Prox2","Prp2","Prp15","Proz","Prp2l1","Prpf18","Prpf31","Prpf3","Prpf19","Prpf38a","Prpf38b","Prpf39","Prpf4","Prpf40a","Prpf40b","Prpf4b","Prpf6","Prpf8","Prpmp5","Prps1l1","Prph","Prps1","Prph2","Prps2","Prpsap1","Prpsap2","Prr11","Prr13","Prr14","Prr12","Prr15","Prr14l","Prr15l","Prr16","Prr18","Prr20e","Prr21","Prr19","Prr23d2","Prr23a","Prr22","Prr29","Prr27","Prr30","Prr32","Prr34","Prr33","Prr3","Prr35","Prr36","Prr7","Prr4","Prr5","Prr5l","Prr9","Prrc1","Prrc2a","Prrc2c","Prrc2b","Prrg1","Prrg2","Prrg3","Prrg4","Prrt1b","Prrt1","Prrt3","Prrt2","Prrt4","Prrx2","Prrx1","Prss1","Prss16","Prss12","Prss21","Prss2","Prss23","Prss27","Prss22","Prss29","Prss3","Prss30","Prss32","Prss33","Prss34","Prss35","Prss36","Prss37","Prss38","Prss39","Prss3b","Prss42","Prss40","Prss41","Prss44","Prss45","Prss46","Prss47","Prss48","Prss50","Prss53","Prss54","Prss55","Prss56","Prss57","Prss58","Prtfdc1","Prss8","Prtn3","Prune1","Prtg","Prune2","Prx","Psapl1","Psca","Psat1","Psap","Psd2","Psd","Psd4","Psd3","Psenen","Psg16","Psg29","Psg19","Psen2","Psen1","Psgb1","Pskh1","Psma1","Psip1","Psma2","Psma3l","Psma3","Psma4","Psma5","Psma6","Psma8","Psma7","Psmb1","Psmb11","Psmb10","Psmb2","Psmb3","Psmb4","Psmb5","Psmb6","Psmb7","Psmb8","Psmc1","Psmc2","Psmb9","Psmc3ip","Psmc3","Psmc4","Psmc6","Psmd10","Psmc5","Psmd1","Psmd11","Psmd12","Psmd13","Psmd14","Psmd2","Psmd3","Psmd4","Psmd5","Psmd6","Psmd7","Psmd8","Psme1-ps1","Psmd9","Psme1","Psme2","Psmf1","Psme3","Psmg1","Psme4","Psmg3","Psmg2","Psmg4","Psors1c2","Pspc1","Pspn","Psph","Psrc1","Pstpip1","Psx1","Pstk","Pstpip2","Ptar1","Ptbp2","Ptafr","Ptcd1","Ptbp1","Ptcd2","Ptbp3","Ptcd3","Ptchd1","Ptchd3","Ptch2","Ptchd4","Ptcra","Ptch1","Ptdss1","Ptdss2","Pter","Ptf1a","Ptgdr","Ptgdr2","Ptgdrl","Ptger1","Ptgds","Ptger2","Ptges2","Pten","Ptges","Ptger4","Ptger3","Ptges3l","Ptges3","Ptges3l1","Ptgir","Ptgfrn","Ptgfr","Ptgr1","Ptgr2","Ptgis","Pth2","Ptgs1","Pth2r","Pth1r","Pthlh","Pth","Ptk6","Ptk7","Ptma","Ptk2","Ptms","Ptn","Ptk2b","Ptov1","Ptp4a2","Ptgs2","Ptp4a1","Ptp4a3","Ptpa","Ptpdc1","Ptpmt1","Ptpn12","Ptpn1","Ptpn13","Ptpn14","Ptpn18","Ptpn11","Ptpn2","Ptpn20","Ptpn21","Ptpn23","Ptpn22","Ptpn3","Ptpn4","Ptpn5","Ptpn6","Ptpn7","Ptpn9","Ptpra","Ptprcap","Ptprb","Ptpre","Ptprc","Ptprd","Ptprf","Ptprg","Ptprh","Ptprj","Ptprk","Ptprm","Ptprn","Ptprn2","Ptpro","Ptprq","Ptprr","Ptprs","Ptprt","Ptpru","Ptprv","Ptprz1","Ptrh1","Ptrh2","Ptrhd1","Pts","Pttg1","Pttg1ip","Ptx3","Ptx4","Pudp","Puf60","Pum1","Pum2","Pum3","Pura","Purb","Purg","Pus1","Pus10","Pus3","Pus7","Pus7l","Pusl1","Pvalb","PVR","Pvrig","Pvt1","Pwp1","Pwp2","Pwwp2a","Pwwp2b","Pxdc1","Pxdn","Pxk","Pxmp2","Pxmp4","Pxn","Pxt1","Pxylp1","Pycard","Pycr1","Pycr2","Pycr3","Pygb","Pygl","Pygm","Pygo1","Pygo2","Pym1","Pyroxd1","Pyroxd2","Pyurf","Pyy","Pzp","Qars","Qdpr","Qk","Qki","Qpct","Qpctl","Qprt","Qrfp","Qrfpr","Qrich1","Qrich2","Qrsl1","Qser1","Qsox1","Qsox2","Qtrt1","Qtrt2","R3hcc1","R3hcc1l","R3hdm1","R3hdm2","R3hdm4","R3hdml","Rab1-ps1","Rab10","Rab11a","Rab11b","Rab11fip1","Rab11fip2","Rab11fip3","Rab11fip4","Rab11fip5","Rab12","Rab13","Rab14","Rab15","Rab17","Rab18","Rab19","Rab1a","Rab1b","Rab1b-ps1","Rab20","Rab21","Rab22a","Rab23","Rab24","Rab25","Rab26","Rab27a","Rab27b","Rab28","Rab29","Rab2a","Rab2b","Rab30","Rab31","Rab32","Rab33a","Rab33b","Rab34","Rab35","Rab36","Rab37","Rab38","Rab39a","Rab3a","Rab3b","Rab3c","Rab3d","Rab3gap1","Rab3gap2","Rab3il1","Rab3ip","Rab40b","Rab40c","Rab42","Rab43","Rab44","Rab4a","Rab4b","Rab5a","Rab5al1","Rab5b","Rab5c","Rab6a","Rab6b","Rab7a","Rab7b","Rab8a","Rab8b","Rab9a","Rab9b","Rabac1","Rabep1","Rabep2","Rabepk","Rabgap1","Rabgap1l","Rabgef1","Rabggta","Rabggta-ps1","Rabggtb","Rabif","Rabl2","Rabl3","Rabl6","Rac1","Rac2","Rac3","Racgap1","Rack1","Rad1","Rad17","Rad18","Rad21","Rad21l1","Rad23a","Rad23b","Rad50","Rad51","Rad51ap1","Rad51ap2","Rad51b","Rad51c","Rad51d","Rad52","Rad54b","Rad54l","Rad54l2","Rad9a","Rad9b","Radil","Rae1","Raet1c","Raet1d","Raet1e","Raet1l","Raf1","Rag1","Rag2","Rai1","Rai14","Rai2","Rala","Ralb","Ralbp1","Ralgapa1","Ralgapa2","Ralgapb","Ralgds","Ralgps1","Ralgps2","Raly","Ralyl","Ramp1","Ramp2","Ramp3","Ran","Ranbp1","Ranbp10","Ranbp17","Ranbp2","Ranbp3","Ranbp3l","Ranbp6","Ranbp9","Rangap1","Rangrf","Rap1a","Rap1b","Rap1gap","Rap1gap2","Rap1gds1","Rap2a","Rap2b","Rap2c","Rapgef1","Rapgef2","Rapgef3","Rapgef4","Rapgef5","Rapgef6","Rapgefl1","Raph1","Rapsn","Rara","Rarb","Rarg","Rarres1","Rarres2","Rars","Rars2","Rasa1","Rasa2","Rasa3","Rasa4","Rasal1","Rasal2","Rasal3","Rasd1","Rasd2","Rasef","Rasgef1a","Rasgef1b","Rasgef1c","Rasgrf1","Rasgrf2","Rasgrp1","Rasgrp2","Rasgrp3","Rasgrp4","Rasip1","Rasl10a","Rasl10b","Rasl11a","Rasl11b","Rasl12","Rasl2-9","Rassf1","Rassf10","Rassf2","Rassf3","Rassf4","Rassf5","Rassf6","Rassf7","Rassf8","Rassf9","RatNP-3b","Raver1","Raver2","Rax","Rb1","Rb1cc1","Rbak","Rbbp4","Rbbp5","Rbbp6","Rbbp7","Rbbp8","Rbbp8nl","Rbbp9","Rbck1","Rbfa","Rbfox1","Rbfox2","Rbfox3","Rbks","Rbl1","Rbl2","Rbm10","Rbm11","Rbm12","Rbm12b","Rbm14","Rbm15","Rbm15b","Rbm17","Rbm18","Rbm19","Rbm20","Rbm22","Rbm24","Rbm25","Rbm25l1","Rbm26","Rbm27","Rbm28","Rbm3","Rbm31y","Rbm33","Rbm34","Rbm38","Rbm39","Rbm4","Rbm41","Rbm42","Rbm43","Rbm44","Rbm45","Rbm46","Rbm47","Rbm48","Rbm4b","Rbm5","Rbm6","Rbm7","Rbm8a","Rbms1","Rbms2","Rbms3","Rbmx","Rbmx2","Rbmxl1","Rbmxl1b","Rbmxl2","Rbmy1j","Rbp1","Rbp2","Rbp3","Rbp4","Rbp7","Rbpj","Rbpjl","Rbpjl2","Rbpms","Rbpms2","Rbsn","Rbx1","Rc3h1","Rc3h2","Rcan1","Rcan2","Rcan3","Rcbtb1","Rcbtb2","Rcc1","Rcc1l","Rcc2","Rccd1","Rce1","Rchy1","Rcl1","Rcn1","Rcn2","Rcn3","Rcor1","Rcor2","Rcor2l1","Rcor3","Rcrg1-ps1","Rcrg1-ps10","Rcrg1-ps11","Rcrg1-ps12","Rcrg1-ps13","Rcrg1-ps14","Rcrg1-ps15","Rcrg1-ps16","Rcrg1-ps17","Rcrg1-ps18","Rcrg1-ps19","Rcrg1-ps2","Rcrg1-ps20","Rcrg1-ps21","Rcrg1-ps22","Rcrg1-ps23","Rcrg1-ps24","Rcrg1-ps25","Rcrg1-ps26","Rcrg1-ps27","Rcrg1-ps28","Rcrg1-ps29","Rcrg1-ps3","Rcrg1-ps30","Rcrg1-ps31","Rcrg1-ps32","Rcrg1-ps33","Rcrg1-ps34","Rcrg1-ps35","Rcrg1-ps36","Rcrg1-ps37","Rcrg1-ps38","Rcrg1-ps39","Rcrg1-ps4","Rcrg1-ps40","Rcrg1-ps5","Rcrg1-ps6","Rcrg1-ps7","Rcrg1-ps8","Rcrg1-ps9","Rcrg2-ps1","Rcrg2-ps2","Rcrg2-ps3","Rcrg2-ps4","Rcrg2-ps5","Rcrg2-ps6","Rcsd1","Rcvrn","Rd3","Rd3l","Rdh10","Rdh11","Rdh12","Rdh13","Rdh14","Rdh16","Rdh5","Rdh7","Rdh8","Rdm1","Rdx","Rec114","Rec8","Reck","Recql","Recql4","Recql5","Reep1","Reep2","Reep3","Reep4","Reep5","Reep6","Reg1a","Reg3a","Reg3b","Reg3g","Reg4","Rel","Rela","Relb","Rell1","Rell2","Reln","Relt","Rem1","Rem2","Ren","Renbp","Rep15","Repin1","Reps1","Reps2","Rer1","Rere","Rerg","Rergl","Resp18","Rest","Ret","Retn","Retnla","Retnlb","Retnlg","Retreg1","Retreg2","Retreg3","Retsat","Rev1","Rev3l","Rex1bd","Rex2","Rexo1","Rexo1l1-ps1","Rexo2","Rexo4","Rexo5","Rfc1","Rfc2","Rfc3","Rfc4","Rfc5","Rfesd","Rffl","Rfk","Rflna","Rflnb","Rfng","Rfpl4a","Rfpl4b","Rft1","Rftn1","Rftn2","Rfwd2","Rfwd3","Rfx1","Rfx2","Rfx3","Rfx4","Rfx5","Rfx6","Rfx7","Rfx8","Rfxank","Rfxap","Rfxapl1","Rgcc","RGD1302996","RGD1303003","RGD1304554","RGD1304567","RGD1304587","RGD1304622","RGD1304624","RGD1304694","RGD1304728","RGD1304745","RGD1304770","RGD1304810","RGD1304870","RGD1304884","RGD1304963","RGD1305014","RGD1305089","RGD1305110","RGD1305178","RGD1305184","RGD1305207","RGD1305298","RGD1305347","RGD1305350","RGD1305455","RGD1305464","RGD1305645","RGD1305704","RGD1305713","RGD1305733","RGD1305807","RGD1305938","RGD1306063","RGD1306072","RGD1306148","RGD1306186","RGD1306195","RGD1306227","RGD1306233","RGD1306271","RGD1306282","RGD1306441","RGD1306474","RGD1306484","RGD1306502","RGD1306519","RGD1306556","RGD1306704","RGD1306746","RGD1306750","RGD1306782","RGD1306941","RGD1306954","RGD1306995","RGD1307100","RGD1307182","RGD1307235","RGD1307443","RGD1307461","RGD1307537","RGD1307554","RGD1307595","RGD1307603","RGD1307621","RGD1307752","RGD1307782","RGD1307916","RGD1307929","RGD1307947","RGD1308005","RGD1308065","RGD1308106","RGD1308117","RGD1308134","RGD1308143","RGD1308147","RGD1308195","RGD1308428","RGD1308430","RGD1308544","RGD1308564","RGD1308601","RGD1308706","RGD1308742","RGD1308750","RGD1308751","RGD1308775","RGD1308878","RGD1309028","RGD1309036","RGD1309049","RGD1309079","RGD1309104","RGD1309106","RGD1309110","RGD1309139","RGD1309170","RGD1309291","RGD1309310","RGD1309350","RGD1309362","RGD1309489","RGD1309534","RGD1309540","RGD1309594","RGD1309621","RGD1309651","RGD1309730","RGD1309748","RGD1309779","RGD1309808","RGD1309870","RGD1309998","RGD1310081","RGD1310110","RGD1310127","RGD1310166","RGD1310209","RGD1310212","RGD1310352","RGD1310429","RGD1310495","RGD1310507","RGD1310553","RGD1310587","RGD1310602","RGD1310717","RGD1310819","RGD1310852","RGD1310935","RGD1310951","RGD1311084","RGD1311164","RGD1311251","RGD1311300","RGD1311318","RGD1311343","RGD1311345","RGD1311447","RGD1311517","RGD1311575","RGD1311595","RGD1311703","RGD1311739","RGD1311744","RGD1311745","RGD1311847","RGD1311892","RGD1311899","RGD1311933","RGD1311946","RGD1312005","RGD1359108","RGD1359127","RGD1359158","RGD1359290","RGD1359334","RGD1359449","RGD1359508","RGD1359634","RGD1559424","RGD1559441","RGD1559458","RGD1559459","RGD1559460","RGD1559461","RGD1559464","RGD1559482","RGD1559499","RGD1559508","RGD1559512","RGD1559513","RGD1559516","RGD1559519","RGD1559532","RGD1559534","RGD1559536","RGD1559545","RGD1559573","RGD1559574","RGD1559575","RGD1559578","RGD1559579","RGD1559588","RGD1559600","RGD1559602","RGD1559607","RGD1559622","RGD1559629","RGD1559639","RGD1559644","RGD1559647","RGD1559654","RGD1559662","RGD1559667","RGD1559669","RGD1559677","RGD1559679","RGD1559683","RGD1559707","RGD1559708","RGD1559710","RGD1559714","RGD1559724","RGD1559726","RGD1559731","RGD1559743","RGD1559747","RGD1559752","RGD1559769","RGD1559772","RGD1559781","RGD1559786","RGD1559795","RGD1559804","RGD1559806","RGD1559808","RGD1559810","RGD1559821","RGD1559833","RGD1559839","RGD1559854","RGD1559859","RGD1559877","RGD1559887","RGD1559890","RGD1559891","RGD1559892","RGD1559896","RGD1559902","RGD1559903","RGD1559908","RGD1559909","RGD1559912","RGD1559916","RGD1559921","RGD1559924","RGD1559935","RGD1559938","RGD1559940","RGD1559948","RGD1559950","RGD1559951","RGD1559955","RGD1559960","RGD1559962","RGD1559965","RGD1559967","RGD1559970","RGD1559972","RGD1559982","RGD1559995","RGD1559999","RGD1560010","RGD1560015","RGD1560017","RGD1560028","RGD1560034","RGD1560065","RGD1560069","RGD1560073","RGD1560076","RGD1560088","RGD1560096","RGD1560099","RGD1560105","RGD1560108","RGD1560109","RGD1560110","RGD1560112","RGD1560119","RGD1560124","RGD1560146","RGD1560162","RGD1560163","RGD1560171","RGD1560180","RGD1560186","RGD1560203","RGD1560207","RGD1560208","RGD1560212","RGD1560225","RGD1560227","RGD1560231","RGD1560234","RGD1560242","RGD1560262","RGD1560263","RGD1560281","RGD1560288","RGD1560289","RGD1560291","RGD1560302","RGD1560303","RGD1560314","RGD1560324","RGD1560325","RGD1560330","RGD1560333","RGD1560337","RGD1560341","RGD1560348","RGD1560349","RGD1560350","RGD1560353","RGD1560357","RGD1560382","RGD1560394","RGD1560398","RGD1560402","RGD1560408","RGD1560412","RGD1560429","RGD1560431","RGD1560436","RGD1560444","RGD1560455","RGD1560462","RGD1560464","RGD1560474","RGD1560482","RGD1560484","RGD1560492","RGD1560510","RGD1560512","RGD1560513","RGD1560523","RGD1560527","RGD1560533","RGD1560539","RGD1560544","RGD1560554","RGD1560559","RGD1560568","RGD1560585","RGD1560590","RGD1560608","RGD1560617","RGD1560623","RGD1560633","RGD1560640","RGD1560648","RGD1560661","RGD1560683","RGD1560687","RGD1560689","RGD1560697","RGD1560700","RGD1560703","RGD1560718","RGD1560723","RGD1560729","RGD1560730","RGD1560738","RGD1560771","RGD1560775","RGD1560784","RGD1560789","RGD1560795","RGD1560797","RGD1560801","RGD1560806","RGD1560813","RGD1560815","RGD1560821","RGD1560824","RGD1560826","RGD1560831","RGD1560842","RGD1560844","RGD1560854","RGD1560857","RGD1560860","RGD1560872","RGD1560883","RGD1560892","RGD1560901","RGD1560917","RGD1560925","RGD1560927","RGD1560931","RGD1560936","RGD1560954","RGD1560958","RGD1560961","RGD1560975","RGD1560979","RGD1560983","RGD1560986","RGD1560987","RGD1561017","RGD1561024","RGD1561034","RGD1561050","RGD1561060","RGD1561079","RGD1561102","RGD1561106","RGD1561111","RGD1561113","RGD1561114","RGD1561118","RGD1561134","RGD1561137","RGD1561143","RGD1561145","RGD1561148","RGD1561149","RGD1561150","RGD1561151","RGD1561154","RGD1561157","RGD1561161","RGD1561185","RGD1561192","RGD1561195","RGD1561206","RGD1561212","RGD1561215","RGD1561219","RGD1561224","RGD1561226","RGD1561230","RGD1561231","RGD1561232","RGD1561236","RGD1561246","RGD1561251","RGD1561252","RGD1561276","RGD1561277","RGD1561286","RGD1561288","RGD1561305","RGD1561306","RGD1561310","RGD1561317","RGD1561318","RGD1561323","RGD1561327","RGD1561333","RGD1561341","RGD1561381","RGD1561382","RGD1561395","RGD1561410","RGD1561413","RGD1561415","RGD1561426","RGD1561430","RGD1561440","RGD1561442","RGD1561445","RGD1561463","RGD1561444","RGD1561453","RGD1561465","RGD1561497","RGD1561481","RGD1561508","RGD1561520","RGD1561517","RGD1561525","RGD1561551","RGD1561552","RGD1561558","RGD1561572","RGD1561557","RGD1561582","RGD1561560","RGD1561575","RGD1561585","RGD1561589","RGD1561590","RGD1561594","RGD1561627","RGD1561620","RGD1561618","RGD1561635","RGD1561636","RGD1561658","RGD1561661","RGD1561689","RGD1561648","RGD1561671","RGD1561662","RGD1561684","RGD1561694","RGD1561667","RGD1561709","RGD1561704","RGD1561722","RGD1561715","RGD1561699","RGD1561729","RGD1561736","RGD1561754","RGD1561738","RGD1561766","RGD1561755","RGD1561767","RGD1561730","RGD1561771","RGD1561777","RGD1561780","RGD1561787","RGD1561788","RGD1561803","RGD1561795","RGD1561808","RGD1561796","RGD1561812","RGD1561821","RGD1561827","RGD1561843","RGD1561847","RGD1561853","RGD1561860","RGD1561849","RGD1561871","RGD1561877","RGD1561870","RGD1561886","RGD1561890","RGD1561897","RGD1561908","RGD1561906","RGD1561911","RGD1561919","RGD1561916","RGD1561935","RGD1561944","RGD1561958","RGD1561986","RGD1561977","RGD1561987","RGD1562020","RGD1562011","RGD1562024","RGD1562033","RGD1562029","RGD1562035","RGD1561998","RGD1562036","RGD1562055","RGD1562039","RGD1562066","RGD1562067","RGD1562068","RGD1562073","RGD1562080","RGD1562088","RGD1562090","RGD1562104","RGD1562118","RGD1562134","RGD1562107","RGD1562114","RGD1562139","RGD1562136","RGD1562140","RGD1562143","RGD1562146","RGD1562152","RGD1562156","RGD1562171","RGD1562178","RGD1562187","RGD1562196","RGD1562218","RGD1562259","RGD1562229","RGD1562266","RGD1562265","RGD1562281","RGD1562272","RGD1562289","RGD1562299","RGD1562290","RGD1562306","RGD1562355","RGD1562310","RGD1562339","RGD1562319","RGD1562387","RGD1562381","RGD1562394","RGD1562378","RGD1562399","RGD1562400","RGD1562402","RGD1562392","RGD1562404","RGD1562415","RGD1562420","RGD1562431","RGD1562423","RGD1562451","RGD1562433","RGD1562461","RGD1562458","RGD1562460","RGD1562462","RGD1562465","RGD1562485","RGD1562494","RGD1562492","RGD1562507","RGD1562508","RGD1562517","RGD1562521","RGD1562515","RGD1562524","RGD1562525","RGD1562545","RGD1562542","RGD1562532","RGD1562558","RGD1562569","RGD1562577","RGD1562598","RGD1562603","RGD1562613","RGD1562614","RGD1562636","RGD1562608","RGD1562618","RGD1562625","RGD1562641","RGD1562638","RGD1562650","RGD1562652","RGD1562690","RGD1562667","RGD1562683","RGD1562700","RGD1562699","RGD1562660","RGD1562704","RGD1562725","RGD1562739","RGD1562753","RGD1562726","RGD1562747","RGD1562755","RGD1562771","RGD1562758","RGD1562774","RGD1562775","RGD1562781","RGD1562776","RGD1562794","RGD1562801","RGD1562811","RGD1562818","RGD1562819","RGD1562820","RGD1562833","RGD1562844","RGD1562835","RGD1562851","RGD1562847","RGD1562863","RGD1562871","RGD1562890","RGD1562885","RGD1562914","RGD1562917","RGD1562936","RGD1562937","RGD1562932","RGD1562960","RGD1562980","RGD1562992","RGD1563029","RGD1562987","RGD1563034","RGD1563036","RGD1563055","RGD1563049","RGD1563057","RGD1563056","RGD1563060","RGD1563066","RGD1563097","RGD1563072","RGD1563100","RGD1563099","RGD1563124","RGD1563104","RGD1563134","RGD1563135","RGD1563145","RGD1563136","RGD1563157","RGD1563150","RGD1563159","RGD1563200","RGD1563217","RGD1563222","RGD1563232","RGD1563242","RGD1563234","RGD1563231","RGD1563270","RGD1563285","RGD1563263","RGD1563294","RGD1563295","RGD1563300","RGD1563301","RGD1563302","RGD1563314","RGD1563322","RGD1563330","RGD1563307","RGD1563323","RGD1563340","RGD1563334","RGD1563346","RGD1563351","RGD1563352","RGD1563349","RGD1563356","RGD1563375","RGD1563365","RGD1563354","RGD1563378","RGD1563392","RGD1563410","RGD1563402","RGD1563412","RGD1563405","RGD1563400","RGD1563445","RGD1563441","RGD1563451","RGD1563459","RGD1563486","RGD1563483","RGD1563482","RGD1563489","RGD1563492","RGD1563496","RGD1563502","RGD1563503","RGD1563527","RGD1563535","RGD1563537","RGD1563545","RGD1563546","RGD1563551","RGD1563554","RGD1563563","RGD1563570","RGD1563581","RGD1563584","RGD1563562","RGD1563578","RGD1563591","RGD1563590","RGD1563601","RGD1563604","RGD1563606","RGD1563613","RGD1563636","RGD1563620","RGD1563656","RGD1563667","RGD1563668","RGD1563679","RGD1563709","RGD1563690","RGD1563705","RGD1563680","RGD1563692","RGD1563725","RGD1563716","RGD1563743","RGD1563738","RGD1563739","RGD1563714","RGD1563747","RGD1563749","RGD1563780","RGD1563757","RGD1563812","RGD1563835","RGD1563834","RGD1563818","RGD1563815","RGD1563847","RGD1563850","RGD1563861","RGD1563903","RGD1563894","RGD1563905","RGD1563931","RGD1563888","RGD1563917","RGD1563937","RGD1563947","RGD1563956","RGD1563943","RGD1563941","RGD1563958","RGD1563963","RGD1563962","RGD1563991","RGD1563978","RGD1564021","RGD1564026","RGD1563986","RGD1564031","RGD1564040","RGD1564053","RGD1564062","RGD1564095","RGD1564100","RGD1564086","RGD1564097","RGD1564125","RGD1564126","RGD1564131","RGD1564133","RGD1564129","RGD1564138","RGD1564159","RGD1564148","RGD1564149","RGD1564162","RGD1564166","RGD1564172","RGD1564167","RGD1564177","RGD1564179","RGD1564193","RGD1564171","RGD1564225","RGD1564236","RGD1564240","RGD1564243","RGD1564277","RGD1564268","RGD1564275","RGD1564247","RGD1564278","RGD1564284","RGD1564292","RGD1564301","RGD1564318","RGD1564306","RGD1564308","RGD1564313","RGD1564320","RGD1564319","RGD1564343","RGD1564325","RGD1564324","RGD1564366","RGD1564347","RGD1564378","RGD1564382","RGD1564386","RGD1564390","RGD1564380","RGD1564392","RGD1564405","RGD1564416","RGD1564400","RGD1564409","RGD1564433","RGD1564425","RGD1564447","RGD1564477","RGD1564463","RGD1564492","RGD1564482","RGD1564480","RGD1564512","RGD1564513","RGD1564515","RGD1564536","RGD1564534","RGD1564571","RGD1564574","RGD1564548","RGD1564541","RGD1564578","RGD1564580","RGD1564581","RGD1564583","RGD1564585","RGD1564587","RGD1564597","RGD1564606","RGD1564599","RGD1564613","RGD1564627","RGD1564617","RGD1564614","RGD1564637","RGD1564645","RGD1564649","RGD1564651","RGD1564650","RGD1564657","RGD1564664","RGD1564665","RGD1564698","RGD1564696","RGD1564699","RGD1564702","RGD1564712","RGD1564730","RGD1564748","RGD1564744","RGD1564781","RGD1564764","RGD1564783","RGD1564770","RGD1564786","RGD1564795","RGD1564798","RGD1564800","RGD1564814","RGD1564801","RGD1564807","RGD1564804","RGD1564836","RGD1564827","RGD1564839","RGD1564845","RGD1564849","RGD1564855","RGD1564854","RGD1564865","RGD1564866","RGD1564883","RGD1564885","RGD1564915","RGD1564897","RGD1564899","RGD1564887","RGD1564933","RGD1564920","RGD1564937","RGD1564941","RGD1564956","RGD1564963","RGD1564958","RGD1564972","RGD1564955","RGD1564974","RGD1564981","RGD1564999","RGD1565032","RGD1565010","RGD1565017","RGD1565046","RGD1565047","RGD1565033","RGD1565048","RGD1565054","RGD1565056","RGD1565058","RGD1565063","RGD1565057","RGD1565066","RGD1565059","RGD1565083","RGD1565086","RGD1565071","RGD1565088","RGD1565102","RGD1565107","RGD1565117","RGD1565119","RGD1565131","RGD1565129","RGD1565143","RGD1565158","RGD1565170","RGD1565166","RGD1565183","RGD1565212","RGD1565245","RGD1565258","RGD1565260","RGD1565272","RGD1565222","RGD1565286","RGD1565288","RGD1565291","RGD1565297","RGD1565299","RGD1565301","RGD1565317","RGD1565329","RGD1565331","RGD1565323","RGD1565332","RGD1565338","RGD1565346","RGD1565356","RGD1565361","RGD1565365","RGD1565355","RGD1565367","RGD1565369","RGD1565395","RGD1565372","RGD1565400","RGD1565403","RGD1565410","RGD1565413","RGD1565422","RGD1565415","RGD1565435","RGD1565429","RGD1565438","RGD1565430","RGD1565478","RGD1565459","RGD1565472","RGD1565462","RGD1565495","RGD1565498","RGD1565533","RGD1565534","RGD1565541","RGD1565548","RGD1565560","RGD1565565","RGD1565566","RGD1565569","RGD1565573","RGD1565598","RGD1565590","RGD1565588","RGD1565600","RGD1565607","RGD1565611","RGD1565627","RGD1565634","RGD1565617","RGD1565622","RGD1565648","RGD1565616","RGD1565641","RGD1565651","RGD1565653","RGD1565657","RGD1565655","RGD1565661","RGD1565660","RGD1565664","RGD1565665","RGD1565679","RGD1565689","RGD1565685","RGD1565732","RGD1565693","RGD1565695","RGD1565725","RGD1565735","RGD1565752","RGD1565762","RGD1565753","RGD1565767","RGD1565779","RGD1565766","RGD1565784","RGD1565785","RGD1565798","RGD1565806","RGD1565822","RGD1565829","RGD1565844","RGD1565862","RGD1565894","RGD1565866","RGD1565900","RGD1565902","RGD1565912","RGD1565904","RGD1565939","RGD1565945","RGD1565956","RGD1565965","RGD1565959","RGD1565977","RGD1565987","RGD1565988","RGD1565989","RGD1565996","RGD1566007","RGD1566033","RGD1566006","RGD1566008","RGD1566035","RGD1566037","RGD1566048","RGD1566059","RGD1566060","RGD1566061","RGD1566067","RGD1566078","RGD1566093","RGD1566085","RGD1566100","RGD1566099","RGD1566129","RGD1566135","RGD1566136","RGD1566134","RGD1566138","RGD1566137","RGD1566184","RGD1566189","RGD1566159","RGD1566197","RGD1566198","RGD1566212","RGD1566217","RGD1566225","RGD1566227","RGD1566237","RGD1566226","RGD1566241","RGD1566244","RGD1566247","RGD1566248","RGD1566257","RGD1566258","RGD1566251","RGD1566262","RGD1566271","RGD1566273","RGD1566265","RGD1566284","RGD1566289","RGD1566292","RGD1566300","RGD1566324","RGD1566303","RGD1566331","RGD1566325","RGD1566337","RGD1566344","RGD1566347","RGD1566353","RGD1566354","RGD1566355","RGD1566368","RGD1566359","RGD1566369","RGD1566373","RGD1566383","RGD1566387","RGD1566386","RGD1566409","RGD1566401","RGD1584023","RGD1597339","RGD2301395","RGD2320734","RGD1624210","RGD9310068","RGD621098","RGD735029","RGD735065","Rgl1","Rgl2","Rgmb","Rgl3","Rgma","Rgp1","Rgr","Rgs1","Rgn","Rgs11","Rgs13","Rgs10","Rgs16","Rgs12","Rgs14","Rgs17","Rgs18","Rgs19","Rgs20","Rgs2","Rgs21","Rgs22","Rgs3","Rgs5","Rgs4","Rgs6","Rgs7bp","Rgs8","Rgs7","Rgs9bp","Rgs9","Rgsl2h","Rgsl1","Rhag","Rhbdd1","Rhbdd2","Rhbdf1","Rhbdd3","Rhbdf2","Rhbdl1","Rhbdl2","Rhbdl3","Rhbg","Rhcg","Rhd","Rhebl1","Rheb","Rhno1","Rho","Rhob","Rhobtb1","Rhobtb2","Rhobtb3","Rhod","Rhoc","Rhof","Rhoh","Rhog","Rhoa","Rhoq","Rhoj","Rhot2","Rhou","Rhot1","Rhox11","Rhox12","Rhov","Rhox13","Rhox2","Rhox3","Rhox4g","Rhox5","Rhox7","Rhox8","Rhox9","Rhoxf10","Rhpn1","Rhpn2","Ribc1","Ribc2","Ric1","Ric3","Ric8b","Ric8a","Rictor","Rida","Riiad1","Rif1","Rilp","Rilpl1","Rilpl2","Rimbp2","Rimbp3","Rimkla","Rimklb","Rims3","Rims4","Rin1","Rims1","Rin3","Rims2","Ring1","Rin2","Rinl","Rint1","Riok1","Riok2","Riox1","Riok3","Riox2","Ripk2","Ripk3","Ripk1","Ripk4","Ripor3","Ripor2","Ripply1","Ripor1","Ripply2","Ripply3","Rit1","Rita1","Rit2","Rlbp1","Rlf","Rlim","Rln1","Rln3","Rmdn1","Rmdn2","Rmi2","Rmdn3","Rmi1","Rmrp","Rmnd1","Rmnd5a","Rmnd5b","Rn18s","Rn28s","Rmt1","Rn5-8s","Rn7sl1","Rn5s","Rnase-ps","Rnase1","Rnase11","Rnase13","Rnase10","Rnase12","Rnase17","Rnase1l1","Rnase1l2","Rnase2","Rnase9","Rnase3","Rnase6","Rnaseh1","Rnase4","Rnaseh2b","Rnaseh2a","Rnaseh2c","Rnasek","Rnaset2","Rnd1","Rnasel","Rnd2","Rnf10","Rnd3","Rnf11","Rnf103","Rnf113a","Rnf112","Rnf111","Rnf113a1","Rnf113a2","Rnf114","Rnf11l2","Rnf115","Rnf11l1","Rnf122","Rnf121","Rnf125","Rnf123","Rnf126","Rnf130","Rnf13","Rnf128","Rnf133","Rnf135","Rnf138","Rnf139","rnf141","Rnf144a","Rnf14","Rnf144b","Rnf145","Rnf146","Rnf148","Rnf149","Rnf150","Rnf151","Rnf157","Rnf152","Rnf165","Rnf166","Rnf167","Rnf169","Rnf168","Rnf17","Rnf170","Rnf180","Rnf181","Rnf182","Rnf186","Rnf185","Rnf183","Rnf187","Rnf19b","Rnf19a","Rnf20","Rnf2","Rnf207","Rnf208","Rnf212","Rnf213","Rnf215","Rnf214","Rnf216","Rnf217","Rnf219","Rnf220","Rnf223","Rnf222","Rnf225","Rnf224","Rnf24","Rnf26","Rnf25","Rnf32","Rnf31","Rnf34","Rnf39","Rnf38","Rnf4","Rnf40","Rnf41","Rnf43","Rnf5","Rnf44","Rnf6","Rnf7","Rnf8","Rnft2","Rnft1","Rngtt","Rnmt","Rnh1","Rnls","Rnpc3","Rnpepl1","Rnps1","Rnr3_mapped","Rnpep","Robld3-ps1","Robo3","Robo4","Robo2","Robo1","Rogdi","Rom1","Rock2","Romo1","Rock1","Ropn1","Ropn1l","Ror1","Ror2","Rora","Rorc","Rorb","Rp1l1","Rp1","Rp2","Ros1","Rp9","Rpa1","Rpa3","Rpain","Rpap1","Rpa2","Rpap2","Rpap3","Rpe","Rpf2","Rpgrip1","Rpf1","Rpe65","Rpgr","Rpgrip1l","Rph3a","Rph3al","Rpia","Rpl10l","Rpl10a","Rpl10","Rpl11","Rpl12-ps1","Rpl12","Rpl13-ps1","Rpl13","Rpl17l1","Rpl13a","Rpl17-ps1","Rpl14","Rpl15","Rpl17","Rpl18","Rpl18a","Rpl21-ps2","Rpl21-ps1","Rpl21-ps3","Rpl19","Rpl22-ps","Rpl21","Rpl22","Rpl22l1","Rpl22l2","Rpl24","Rpl23","Rpl23a","Rpl26-ps1","Rpl26-ps2","Rpl26-ps3","Rpl26","Rpl27-l1","Rpl27-ps1","Rpl27","Rpl27a","Rpl29-ps1","Rpl29-ps2","Rpl28","Rpl29","Rpl29-ps3","Rpl30l1","Rpl31l1","Rpl31l2","Rpl3","Rpl31l3","Rpl31","Rpl30","Rpl31l4","Rpl32-ps1","Rpl32-ps2","Rpl32-ps3","Rpl32-ps4","Rpl34-ps1","Rpl34l1","Rpl32","Rpl34","Rpl35","Rpl36a-ps1","Rpl35al1","Rpl36","Rpl36a-ps2","Rpl36a-ps3","Rpl36a","Rpl35a","Rpl36a-ps4","Rpl37-ps1","Rpl37a-ps2","Rpl37a-ps3","Rpl36al","Rpl37a","Rpl37a-ps1","Rpl37","Rpl38","Rpl38-ps1","Rpl38-ps2","Rpl38-ps3","Rpl39-ps","Rpl39l","Rpl3l","Rpl39","Rpl41-ps1","Rpl41","Rpl5l1","Rpl4","Rpl6-ps1","Rpl5","Rpl6","Rpl7l1","Rpl7","Rpl7a","Rpl8","Rplp0l1","Rpl9","Rplp2","Rpn1","Rplp1","Rpn2","Rpp14","Rplp0","Rpp21","Rpp25","Rpp30","Rpp25l","Rpp38","Rpp40","Rprd1a","Rprd2","Rprd1b","Rprm","Rps10l1","Rprml","Rps12l2","Rps12l3","Rps10","Rps11","Rps12","Rps13","Rps15-ps1","Rps15-ps2","Rps15a-ps1","Rps15","Rps15al1","Rps14","Rps15al2","Rps15a","Rps15al4","Rps17l","Rps17","Rps16","Rps18l1","Rps18","Rps19bp1","Rps19","Rps19l1","Rps2-ps1","Rps2-ps2","Rps2-ps3","Rps2-ps4","Rps2-ps5","Rps2-ps6","Rps2","Rps2-ps7","Rps21-ps1","Rps20","Rps25-ps2","Rps25-ps1","Rps21","Rps23","Rps25","Rps24","Rps26","Rps27a-ps10","Rps27a-ps11","Rps27a-ps1","Rps27a-ps13","Rps27a-ps14","Rps27","Rps27a","Rps27a-ps15","Rps27a-ps16","Rps27a-ps17","Rps27a-ps18","Rps27a-ps19","Rps27a-ps20","Rps27a-ps2","Rps27a-ps21","Rps27a-ps22","Rps27a-ps23","Rps27a-ps25","Rps27a-ps26","Rps27a-ps24","Rps27a-ps27","Rps27a-ps28","Rps27a-ps29","Rps27a-ps3","Rps27a-ps30","Rps27a-ps4","Rps27a-ps5","Rps27a-ps6","Rps27a-ps7","Rps27a-ps8","Rps27a-ps9","Rps27l","Rps28-ps1","Rps28","Rps4x-ps1","Rps3","Rps29","Rps4x-ps3","Rps4x-ps2","Rps3a","Rps4x","Rps4x-ps4","Rps4x-ps5","Rps4x-ps6","Rps4x-ps7","Rps4x-ps8","Rps4x-ps9","Rps4y2","Rps5","Rps6","Rps6ka2","Rps6ka1","Rps6ka4","Rps6ka3","Rps6ka6","Rps6ka5","Rps6kl1","Rps7","Rps6kb2","Rps6kc1","Rps8-ps1","Rps6kb1","Rps8","Rps9","Rptn","Rps9l1","Rpusd1","Rpusd2","Rptor","Rpusd3","Rpsa","Rpusd4","Rraga","Rrad","RragB","Rragc","Rragd","Rras2","Rras","Rrbp1","Rrh","Rrlt","Rreb1","Rrm1-ps1","Rrm1","Rrm2b","Rrn3","Rrm2","Rrnad1","Rrp12","Rrp1","Rrp15","Rrp36","Rrp1b","Rrp7a","Rrp8","Rrs1","RSA-14-44","Rrp9","Rs1","Rsad1","Rsad2","Rsbn1l","Rsbn1","Rsf1","Rsg1","Rsl1","Rsl1d1","Rsl1d1l1","Rsl24d1","Rsph1","Rsph10b","Rsph14","Rsph3","Rsph4a","Rsph6a","Rsph9","Rspo1","Rspo2","Rspo4","Rspo3","Rsrc1","Rspry1","Rsrc2","Rsrp1","Rsu1","RT1-A","RT1-B","RT1-A2","RT1-A3","RT1-A1","RT1-CE1","RT1-CE10","RT1-CE11","RT1-CE12","RT1-CE14","RT1-CE13","RT1-Ba","RT1-CE14-ps1","RT1-Bb","RT1-CE15","RT1-CE16","RT1-CE2","RT1-CE3","RT1-CE6","RT1-CE4","RT1-CE8-ps1","RT1-CE5","RT1-CE9-ps1","RT1-CE7","RT1-Cl","RT1-Db2","RT1-DOa","RT1-DMa","RT1-Da","RT1-DMb","RT1-DOb","RT1-Hb-ps1","RT1-M1-1-ps","RT1-L3","RT1-EC2","RT1-Ha","RT1-Db1","RT1-M1-3-ps","RT1-M1-2","RT1-M10-2-ps","RT1-M10-3-ps","RT1-M1-5","RT1-M1-4","RT1-M10-1","RT1-M10-4-ps","RT1-M2","RT1-M3-3-ps","RT1-M3-2-ps","RT1-M3-1","RT1-M7-ps","RT1-M6-2","RT1-M4","RT1-M6-1","RT1-M5","RT1-M8-ps","RT1-N1","RT1-O2-ps","RT1-O3-ps","RT1-P1-ps1","RT1-O1","RT1-N2","RT1-N3","RT1-P2-ps1","RT1-T24-2","RT1-S2","RT1-T18","RT1-T24-1","RT1-V1-ps1","RT1-T24-3","RT1-S3","RT1-T24-4","Rt1.a-4","RT1-V2-ps1","Rtbdn","Rtcb","Rtca","Rtf1","Rtel1","Rtfdc1","Rtkn2","Rtkn","Rtl1","Rtl3","Rtl5","Rtl8a","Rtl4","Rtl6","Rtl8b","Rtl9","Rtn2","Rtn1","Rtn3","Rtn4ip1","Rtn4rl1","Rtn4rl2","Rtn4r","Rtp1","Rtn4","Rtp2","Rtp3","Rtp4","Rtraf","Rttn","Rubcnl","Rubcn","Rufy1","Rufy2","Rufy4","Rundc1","Rufy3","Rundc3a","Rundc3b","Runx1t1","Runx1","Runx3","Runx2","Rup2","Rusc1","Rusc2","Ruvbl1","Ruvbl2","Rwdd1","Rwdd2a","Rwdd2b","Rwdd3","Rwdd4","Rxfp1","Rxfp2","Rxfp3","Rxfp4-ps1","Rxra","Rxrb","Rybp","Rxrg","Ryk","S100a10","S100a1","Ryr1","Ryr3","S100a11","S100a14","S100a13","S100a16","S100a3","Ryr2","S100a4","S100a5","S100a6","S100a7a","S100a7l2","S100a8","S100a9","S100pbp","S100vp","S100g","S100z","S100b","S1pr4","S1pr2","S1pr1","S1pr3","S1pr5","Sacm2l-ps1","Saal1","Sac3d1","Saa4","Sacm1l","Sacm2l-ps2","Sacm2l-ps5","Sacm2l-ps4","Sacm2l-ps3","Sacm2l-ps6","Sacm2l-ps7","Safb2","Sacs","Sae1","Safb","Sall1","Sag","Samd1","Sall3","Sall2","Samd10","Samd11","Samd12","Samd13","Samd14","Samd15","Samd3","Sall4","Samd5","Samd7","Samd4b","Samd4a","Samd8","Samd9","Samd9l","Samm50","Samhd1","Samt2","Samsn1","Samt4","Samt3","Sap130","Sap18","Sap25","Sap30","Sap30bp","Sap30l","Sapcd2","Sapcd1","Sar1b","Saraf","Sar1a","Sarm1","Sarnp","Sardh","Sars","Sars2","Sart1","Sash1","Sart3","Sash3","Sass6","Sat1","Sat2","Satb1","Satl1","Satb2","Sav1","Saxo2","Saysd1","Saxo1","Saxol1","Sbds","Sbk1","Sbk2","Sbk3","Sbf1","Sbf2","Sbno2","Sbno1","Sbsn","Sbp","Sbspon","Sc5d","Scaf1","Scaf11","Scaf4","Scaf8","Scai","Scamp1","Scamp2","Scamp4","Scamp3","Scand1","Scand3-ps1","Scamp5","Scand3-ps2","Scand3-ps3","Scand3-ps4","Scara3","Scaper","Scap","Scara5","Scarf1","Scarb2","Scarf2","Scarna15","Scarb1","Scarna3","Scart1","Sccpdh","Scd","Scd2","Scd4","Scel","Scfd2","Scfd1","Scg3","Scg2","Scg5","Scgb1b30","Scgb1b24","Scgb1c1","Scgb1d2","Scgb1a1","Scgb1d4","Scgb2a1","Scgb2b2","Scgb2a2","Scgb2b24","Scgb3a1","Scgb3a2","Scgn","Scimp","Schip1","Scin","Scml1","Scmh1","Scly","Sclt1","Scml2","Scml4","Scn11a","Scn2b","Scn10a","Scn1b","Scn1a","Scn2a","Scn3b","Scn3a","Scn4b","Scn7a","Scn4a","Scn8a","Scnm1","Scn5a","Scn9a","Sco1","Scoc","Scnn1a","Scp2d1","Scnn1b","Scnn1g","Scpep1","Scp2","Scrg1","Scrn1","Scrn2","Scrt1","Scrn3","Scrt2","Scrib","Sct","Sctr","Scx","Scube2","Scube1","Scube3","Scyl1","Scyl2","Scyl3","Sdad1","Sdc2","Sdc3","Sdc1","Sdccag1-ps1","Sdcbp2","Sdc4","Sdcbp","Sdccag3","Sde2","Sdf2","Sdccag8","Sdf2l1","Sdhaf1","Sdf4","Sdha","Sdhaf3","Sdhaf2","Sdhaf4","Sdhc","Sdhb","Sdhd","Sdk1","Sdr16c6","Sdr16c5","Sdk2","Sdr39u1","Sdr42e1","Sdr42e2","Sdr9c7","Sdsl","Sec1","Sebox","Sds","Sec11a","Sec11c","Sec13","Sec14l1","Sec14l5","Sec14l4","Sec14l3","Sec14l2","Sec16a","Sec16b","Sec22a","Sec22c","Sec22b","Sec23a","Sec23b","Sec23ip","Sec24a","Sec24b","Sec24c","Sec61-ps","Sec24d","Sec31b","Sec31a","Sec61a1","Sec61a2","Sec61b","Sec61g","Sec61g-ps1","Sec61gl","Sec62","Secisbp2","Sec63","Sectm1a","Secisbp2l","Seh1l","Sectm1b","Sel1l","Sel1l2","Sel1l3","Selenoh","Selenbp1","Selenof","Sele","Selenoi","Selenok-ps1","Selenok","Selenok-ps2","Selenok-ps3","Selenok-ps4","Selenok-ps6","Selenok-ps5","Selenon","Selenom","Selenoo","Selenop","Selenos","Selenot-ps1","Selenot","Selenov","Selenow-ps1","Selenow","Selplg","Sem1","Sell","Sema3b","Sema3c","Sema3a","Sema3d","Sema3e","Sema3g","Sema3f","Sema4a","Sema4b","Sema4c","Sema4d","Selp","Sema4f","Sema6a","Sema4g","Sema5b","Sema5a","Sema6b","Sema6c","Sema6d","Sema7a","Senp17","Senp1","Senp18","Semg1","Senp2","Senp3","Senp5","Sephs2","Senp6","Senp7","Senp8","Sephs1","Sepsecs","1-Sep","10-Sep","12-Sep","14-Sep","11-Sep","3-Sep","2-Sep","4-Sep","5-Sep","6-Sep","7-Sep","Serac1","8-Sep","9-Sep","Serf1","Serbp1","Serf2","Sergef","Serhl2","Serinc2","Serinc1","Serinc3","Serinc4","Serinc5","Serp2","Serp1","Serpina11","Serpina12","Serpina10","Serpina16","Serpina1f","Serpina1","Serpina3c","Serpina3m","Serpina4","Serpina5","Serpina9","Serpina3n","Serpina6","Serpina7","Serpinb10","Serpinb11","Serpinb12","Serpinb13","Serpinb1b","Serpinb2","Serpinb1a","Serpinb3","Serpinb3a","Serpinb5","Serpinb6a","Serpinb6b","Serpinb6e","Serpinb8","Serpinb7","Serpinb9d","Serpinb9","Serpind1","Serpinc1","Serpine3","Serpine2","Serpinf2","Serping1","Serpinf1","Serpinh1","Sert1","Serpini1","Serpini2","Sertad1","Sertad2","Serpine1","Sertad3","Sertm1","Sertad4","Sesn1","Sesn3","Sesn2","Sestd1","Setbp1","Set","Setd1b","Setd1a","Setd3","Setd4","Setd2","Setd6","Setd5","Setd7","Setdb1","Setdb2","Setsip","Setmar","Setx","Sez6","Sez6l2","Sez6l","Sf1","Sf3a2","Sf3a1","Sf3a3","Sf3b4","Sf3b1","Sf3b2","Sf3b3","Sf3b5","Sf3b6","Sfi1","Sfmbt1","Sfmbt2","Sfr1","Sfn","Sfpq","Sfrp2","Sfrp1","Sfrp4","Sfrp5","Sft2d3","Sft2d2","Sfswap","Sft2d1","Sfta2","Sfxn2","Sfxn1","Sfxn3","Sfxn4","Sftpc","Sftpa1","Sftpb","Sftpd","Sfxn5","Sgca","Sgcb","Sgce","Sgcd","Sgcg","Sgcz","Sgf29","Sgk494","Sgk2","Sgk3","Sgip1","Sgo1","Sgms2","Sgk1","Sgms1","Sgo2","Sgpp1","Sgsh","Sgpl1","Sgpp2","Sgsm1","Sgsm2","Sgsm3","Sgta","Sgtb","Sh2b3","Sh2b1","Sh2b2","Sh2d1b2","Sh2d1a","Sh2d1b","Sh2d3a","Sh2d2a","Sh2d4b","Sh2d6","Sh2d3c","Sh2d4a","Sh2d5","Sh2d7","Sh3bgr","Sh3bgrl","Sh3bgrl2","Sh3bgrl3","Sh3bp2","Sh3bp1","Sh3bp4","Sh3bp5","Sh3bp5l","Sh3d19","Sh3gl1","Sh3d21","Sh3gl2","Sh3gl3","Sh3glb1","Sh3glb2","Sh3pxd2a","Sh3kbp1","Sh3pxd2b","Sh3rf1","Sh3rf2","Sh3rf3","Sh3tc1","Sh3tc2","Sh3yl1","Shb","Sharpin","Shank1","Shank3","Shbg","Shc2","Shank2","Shc1","Shc3","Shc4","Shcbp1","Shcbp1l","She","Shf","Shd","Shisa2","Shisa6","Shisa3","Shisa7","Shisa4","Shisa8","Shisa5","Shisa9","Shisal2b","Shisal2a","Shisal1","Shkbp1","Shh","Shmt1","Shmt2","Shoc2","Shpk","Shox2","Shq1","Shroom1","Shprh","Shroom2","Shroom3","Shroom4","Shtn1","Siah2","Siae","Si","Siah1","Siah3","Sidt1","Sidt2","Sigirr","Siglec15","Siglec10","Siglec8","Siglec1","Siglech","Siglec5","Siglecl1","Sik2","Sike1","Sik3","Sigmar1","Sik1","Sil1","Sim2","Sim1","Simc1","Sinhcaf","Sipa1l1","Sipa1","Sin3b","Sipa1l2","Sin3a","Sipa1l3","Sirpb2","Sirpb2l1","Sirpd","Sirpa","Sirt2","Sirt4","Sirt3","Sirt5","Sirt7","Sit1","Sirt6","Siva1","Six2","Six1","Six4","Six3","Six5","Six6","Six6os1","Ska1","Ska2","Sirt1","Ska3","Skap2","Skida1","Skap1","Ski","Skil","Skint10","Skint1","Skint4","Skint8","Skiv2l","Skor1","Skiv2l2","Skor2","Sla","Skp1","Skp2","Sla2","Slain1","Slain2","Slamf1","Slamf6","Slamf7","Slamf8","Slamf9","Slbp","Slc10a3","Slc10a1","Slc10a2","Slc10a4","Slc10a5","Slc10a6","Slc10a7","Slc11a1","Slc12a2","Slc12a1","Slc12a4","Slc12a3","Slc12a6","Slc11a2","Slc12a5","Slc12a9","Slc12a7","Slc13a1","Slc12a8","Slc13a4","Slc13a2","Slc13a3","Slc13a5","Slc14a1","Slc15a3","Slc15a4","Slc15a2","Slc15a5","Slc15a1","Slc14a2","Slc16a1","Slc16a14","Slc16a11","Slc16a12","Slc16a10","Slc16a13","Slc16a2","Slc16a3","Slc16a4","Slc16a9","Slc16a5","Slc16a6","Slc16a8","Slc17a1","Slc16a7","Slc17a2","Slc17a4","Slc17a3","Slc17a5","Slc17a9","Slc17a6","Slc17a8","Slc17a7","Slc18a1","Slc18a3","Slc18b1","Slc18a2","Slc19a3","Slc19a2","Slc19a1","Slc1a4","Slc1a1","Slc1a5","Slc1a6","Slc1a3","Slc1a2","Slc1a7","Slc20a1","Slc20a2","Slc22a14","Slc22a12","Slc21a4","Slc22a16","Slc22a15","Slc22a13","Slc22a1","Slc22a17","Slc22a20","Slc22a18","Slc22a22","Slc22a23","Slc22a24","Slc22a25","Slc22a2","Slc22a7-ps1","Slc22a3","Slc22a4","Slc22a7","Slc22a6","Slc22a5","Slc23a1","Slc22a8","Slc23a3","Slc24a1","Slc23a2","Slc24a3","Slc24a2","Slc24a5","Slc24a4","Slc25a1","Slc25a10","Slc25a11","Slc25a12","Slc25a13","Slc25a14","Slc25a15","Slc25a17","Slc25a16","Slc25a18","Slc25a2","Slc25a19","Slc25a20","Slc25a21","Slc25a22","Slc25a23","Slc25a24","Slc25a26","Slc25a25","Slc25a27","Slc25a28","Slc25a30","Slc25a29","Slc25a32","Slc25a3","Slc25a31","Slc25a33","Slc25a34","Slc25a35","Slc25a36l1","Slc25a36","Slc25a38","Slc25a37","Slc25a39","Slc25a4","Slc25a40","Slc25a41","Slc25a43","Slc25a42","Slc25a44","Slc25a45","Slc25a46","Slc25a48","Slc25a47","Slc25a5","Slc25a53","Slc25a52","Slc25a51","Slc25a54","Slc25a6","Slc26a10","Slc26a1","Slc26a11","Slc26a3","Slc26a2","Slc26a6","Slc26a4","Slc26a5","Slc26a7","Slc26a8","Slc26a9","Slc27a2","Slc27a3","Slc27a1","Slc27a4","Slc27a5","Slc27a6","Slc28a3","Slc28a1","Slc28a2","Slc29a1","Slc29a3","Slc29a4","Slc29a2","Slc2a10","Slc2a12","Slc2a1","Slc2a13","Slc2a5","Slc2a6","Slc2a3","Slc2a2","Slc2a7","Slc2a8","Slc2a9","Slc2a4","Slc30a1","Slc30a10","Slc30a2","Slc30a4","Slc30a3","Slc30a5","Slc30a7","Slc30a8","Slc30a6","Slc30a9","Slc31a2","Slc31a1","Slc33a1","Slc32a1","Slc35a1","Slc34a2","Slc34a3","Slc35a3","Slc35a2","Slc35a5","Slc35a4","Slc34a1","Slc35b1","Slc35b2","Slc35b3","Slc35b4","Slc35c1","Slc35d1","Slc35d2","Slc35c2","Slc35d3","Slc35e1","Slc35e3","Slc35e2b","Slc35e4","Slc35f1","Slc35f3","Slc35f2","Slc35f4","Slc35f5","Slc35f6","Slc35g1","Slc35g2","Slc35g3","Slc36a1","Slc36a2","Slc36a4","Slc36a3","Slc37a1","Slc37a2","Slc37a3","Slc37a4","Slc38a11","Slc38a10","Slc38a1","Slc38a2","Slc38a3","Slc38a5","Slc38a4","Slc38a7","Slc38a6","Slc38a8","Slc38a9","Slc39a1","Slc39a10","Slc39a12","Slc39a11","Slc39a2","Slc39a13","Slc39a14","Slc39a3","Slc39a4l","Slc39a4","Slc39a5","Slc39a6","Slc39a7","Slc39a8","Slc39a9","Slc3a1","Slc3a2","Slc41a1","Slc41a2","Slc41a3","Slc40a1","Slc43a1","Slc43a2","Slc43a3","Slc44a1","Slc44a3","Slc44a2","Slc45a1","Slc44a4","Slc44a5","Slc45a2","Slc45a3","Slc45a4","Slc46a2","Slc46a1","Slc47a2","Slc46a3","Slc48a1","Slc47a1","Slc4a1","Slc4a11","Slc4a1ap","Slc4a10","Slc4a5","Slc4a3","Slc4a2","Slc4a4","Slc50a1","Slc4a7","Slc4a9","Slc4a8","Slc51a","Slc51b","Slc52a2","Slc52a3","Slc5a12","Slc5a10","Slc5a11","Slc5a3","Slc5a1","Slc5a2","Slc5a4","Slc5a4b","Slc5a8","Slc5a6","Slc5a5","Slc5a9","Slc5a7","Slc6a11","Slc6a1","Slc6a12","Slc6a16","Slc6a14","Slc6a13","Slc6a15","Slc6a17","Slc6a18","Slc6a19","Slc6a2","Slc6a20","Slc6a5","Slc6a6","Slc6a7","Slc6a3","Slc6a8","Slc6a4","Slc6a9","Slc7a12","Slc7a10","Slc7a11","Slc7a13","Slc7a1","Slc7a14","Slc7a15","Slc7a4","Slc7a3","Slc7a6os","Slc7a6","Slc7a5","Slc7a2","Slc7a7","Slc7a8","Slc7a9","Slc8a2","Slc8b1","Slc8a3","Slc9a2","Slc9a1","Slc9a3r2","Slc8a1","Slc9a3r1","Slc9a4","Slc9a6","Slc9a3","Slc9a5","Slc9a7","Slc9a8","Slc9b1","Slc9b2","Slc9a9","Slc9c1","Slc9c2","Slco1a1","Slco1a2","Slco1a4","Slco1a6","Slco1b2","Slco1c1","Slco2a1","Slco2b1","Slco3a1","Slco4a1","Slco4c1","Slco6c1","Slco6b1","Slco5a1","Slco6d1","Slf1","Slfn1","Slf2","Slfn13","Slfn14","Slfn3","Slfn2","Slfn4","Slfn5","Slfnl1","Slirp","Slitrk1","Slit1","Slitrk3","Slitrk2","Slitrk4","Slit3","Slitrk5","Slit2","Slitrk6","Slk","Sln","Slpil2","Slpil3","Slpi","Slmap","Sltm","Slurp1","Slu7","Slx1b","Slx4","Slx4ip","Smad1","Smad2","Smad5","Smad3","Smad6","Smad9","Smad7","Smad4","Smagp","Smap1","Smap2","Smarca1","Smarca2","Smarcad1","Smarca5","Smarcal1","Smarcb1","Smarca4","Smarcc1","Smarcd1","Smarcc2","Smarce1l","Smarcd3","Smarcd2","Smc1b","Smarce1","Smc1a","Smc2","Smc3","Smc4","Smc6","Smc5","Smco1","Smco2","Smchd1","Smco3","Smcp","Smcr8","Smdt1","Smco4","Smg5","Smg1","Smim1","Smg6","Smgc","Smg8","Smg7","Smg9","Smim10","Smim10l1","Smim11","Smim12","Smim13","Smim14","Smim15","Smim17","Smim18","Smim19","Smim2","Smim20","Smim22","Smim23","Smim24","Smim26","Smim29","Smim3","Smim31","Smim34a","Smim4","Smim35","Smim5","Smim6","Smim7","Smkr1","Smlr1","Smim8","Smndc1","Smoc1","Smn1","Smok2a","Smoc2","Smo","Smox","Smpd1","Smpd4","Smpd2","Smpd3","Smpd5","Smpdl3a","Smpdl3b","Smptb","Smpx","Smr3a","Sms-ps1","Sms","Smr3b","Smtn","Smtnl1","Smtnl2","Smu1","Smug1","Smurf1","Smurf2","Smyd1","Smyd4","Smyd2","Smyd3","Smyd5","Snai1","Snai2","Snai3","Snap47","Snap23","Snap29","Snapc1","Snapc3","Snap91","Snapc2","Snapc4","Snapc5","Snap25","Snapin","Sncaip","Sncg","Sncb","Snd1","Snf8","Snhg11","Sned1","Snhg4","Snca","Snora19","Snip1","Snn","Snora58","Snph","Snrk","Snrnp200","Snrnp25","Snrnp40","Snrnp35","Snrnp27","Snrnp48","Snrpa","Snrnp70","Snrpc-ps1","Snrpa1","Snrpb2","Snrpc","Snrpb","Snrpd1","Snrpd2","Snrpd2l","Snrpel","Snrpel1","Snrpd3","Snrpep2","Snrpf","Snrpg-ps1","Snrpg","Snrpgl2","Snrpe","Snta1","Sntb1","Snrpn","Sntb2","Sntg1","Sntg2","Sntn","Snu13","Snupn","Snurf","Snw1","Snx1","Snx10","Snx11","Snx12","Snx13","Snx16","Snx15","Snx14","Snx17","Snx18","Snx19","Snx20","Snx2","Snx21","Snx22","Snx24","Snx25","Snx27","Snx3","Snx30","Snx29","Snx31","Snx33","Snx32","Snx4","Snx5","Snx7","Snx8","Snx9","Snx6","Soat1","Sobp","Soat2","Socs4","Socs2","Socs5","Socs1","Socs3","Socs6","Socs7","Soga1","Soga3","Sod3","Sohlh1","Sohlh2","Son","Sod2","Sod1","Sorbs1","Sorbs3","Sorbs2","Sorcs1","Sorcs2","Sorcs3","Sorl1","Sord","Sort1","Sostdc1","Sost","Sowaha","Sos2","Sos1","Sowahb","Sox1","Sowahc","Sowahd","Sox12","Sox11","Sox13","Sox14","Sox10","Sox15","Sox21","Sox17","Sox18","Sox3","Sox30","Sox4","Sox2","Sox7","Sox5","Sox8","Sox6","Sp100","Sp110","Sox9","Sp140","Sp1","Sp2","Sp4","Sp3","Sp5","Sp6","Sp8","Spaca1","Sp7","Sp9","Spa17","Spaca3","Spaca4","Spaca5","Spaca6","Spaca7","Spaca9","Spag1","Spag11a","Spag11b","Spag11bl","Spag17","Spag16","Spag4","Spag6","Spag7","Spag5","Spag6l","Spag8","Spam1","Sparcl1","Spag9","Spart","Sparc","Spast","Spata1","Spata13","Spata16","Spata17","Spata18","Spata19","Spata2","Spata20","Spata21","Spata22","Spata24","Spata25","Spata2L","Spata3","Spata31d1b","Spata31a5","Spata31d1d","Spata31d3","Spata31e1","Spata32","Spata33","Spata4","Spata45","Spata46","Spata5l1","Spata5","Spata6l","Spata6","Spata9","Spata7","Spatc1","Spatc1l","Spats1","Spats2","Spc24","Spats2l","Spc25","Spcs1","Spcs2","Spcs3","Spdef","Spdl1","Spdya","Spdye4","Specc1","Specc1l","Spef1","Spef2","Spem1","Speg","Spen","Spert","Spesp1","Spetex-2A","Spetex-2B","Spetex-2C","Spetex-2D","Spetex-2E","Spetex-2F","Spetex-2G","Spetex-2H","Spg11","Spg21","Spg7","Sphk2","Sphk1","Sphkap","Spi1","Spib","Spic","Spice1","Spidr","Spin1","Spin3","Spin2a","Spin4","Spink10","Spink1","Spink13","Spink14","Spink2","Spink1l","Spink4","Spink5","Spink6","Spink7","Spink8","Spink9","Spint1","Spint2","Spint4","Spint3","Spint5p","Spire1","Spire2","Spn","Spns1","Spns2","Spns3","Spocd1","Spo11","Spock1","Spock2","Spock3","Spon1","Spon2","Spop","Spopl","Spout1","Spp1","Spp2","Sppl2a","Sppl2b","Sppl2c","Sppl3","Spr","Spred1","Spred2","Spred3","Sprn","Sprr1a","Sprr1b","Sprr2d","Sprr3","Sprr4","Sprtn","Spry1","Spry2","Spry3","Spry4","Spryd4","Spryd3","Spryd7","Spsb1","Spsb2","Spsb3","Spsb4","Spt1","Spta1","Sptan1","Sptb","Sptbn1","Sptbn2","Sptbn5","Sptbn4","Sptlc1","Sptlc2","Sptssa","Sptlc3","Sptssb","Spty2d1","Spz1","Spx","Sqor","Sqle","Sra1","Sqstm1","Srarp","Srbd1","Srcap","Src","Srcin1","Srd5a2","Srd5a1","Srd5a3","Srebf1","Srebf2","Srek1","Srek1ip1","Srfbp1","Srf","Srgap1","Srgap2","Srgap3","Srgn","Sri","Srl","Srm","Srms","Srp14","Srp19","Srp54a","Srp68","Srp72-ps1","Srp72","Srp9","Srpk1","Srpk2","Srpk3","Srpra","Srprb","Srpx","Srpx2","Srrd","Srr","Srrm1","Srrm2","Srrm4","Srrm3","Srrm5","Srrt","Srsf10","Srsf1","Srsf12","Srsf11","Srsf3","Srsf2","Srsf3-ps1","Srsf4","Srsf5","Srsf6","Srsf7","Srsf8","Srsf9","Srxn1","Ss18","Sry","Ss18l1","Ss18l2","Ssbp1","Ssb","Ssbp2","Ssbp3","Ssbp4","Ssc4d","Ssc5d","Ssfa2","Ssh1","Ssh2","Ssmem1","Ssh3","Ssna1","Sspn","Ssr1","Sspo","Ssr2","Ssr3","Ssr4","Ssrp1","Sssca1","Sst","Sstr1","Sstr3","Sstr2","Sstr4","Sstr5","Ssty1","Ssu72","Ssuh2","Ssx1","Ssx2","Ssx2ip","St13","St14","St18","St3gal1","St3gal2","St3gal3","St3gal4","St3gal5","St3gal6","St5","St6gal1","St6gal2","St6galnac1","St6galnac2","St6galnac3","St6galnac4","St6galnac5","St6galnac6","St7l","ST7","St8sia2","St8sia1","St8sia3","St8sia4","St8sia6","St8sia5","Stab1","Stab2","Stac","Stac2","Stac3","Stag1","Stag2","Stag3","Stam","Stam2","Stambp","Stambpl1","Stap1","Stap2","Stard10","Stard13","Stard3","Stard3nl","Star","Stard4","Stard5","Stard6","Stard7","Stard8","Stard9","Stat2","Stat1","Stat4","Stat3","Stat5a","Stat5b","Stat6","Stath","Stau1","Stau2","Stbd1","Stc1","Stc2","Steap1","Steap2","Steap3","Steap4","Stfa2","Stfa2l1","Stfa2l2","Stfa3","Stfa3l1","Stil","Stim1","Stim2","Stip1","Stk10","Stk11ip","Stk11","Stk16","Stk17b","Stk19-ps","Stk19","Stk25","Stk24","Stk26","Stk3","Stk31","Stk32a","Stk32c","Stk32b","Stk35","Stk33","Stk36","Stk38","Stk38l","Stk39","Stk4","Stk40","Stkld1","Stmn1","Stmn2","Stmn3","Stmnd1","Stmn4","Stn1","Stom","Stoml1","Stoml2","Stoml3","Ston1","Ston2","Stox1","Stox2","Stpg1","Stpg3","Stpg2","Stpg4","Stra6","Stra8","Strada","Stradb","Strap","Strbp","Strc","Strip1","Strip2","Strn","Strn3","Strn4","Sts","Stt3a","Stt3b","Stum","Stub1","Stx11","Stx12","Stx16","Stx17","Stx19","Stx18","Stx1b","Stx1a","Stx2","Stx3","Stx4","Stx5","Stx6","Stx7","Stx8","Stxbp2","Stxbp1","Stxbp3","Stxbp4","Stxbp5","Stxbp5l","Stxbp6","Styk1","Styx","Styxl1","Styxl2","Sub1","Sucla2","Suclg1","Suclg2","Sucnr1","Suco","Suds3","Sufu","Sugct","Sugp1","Sugp2","Sugt1","Sulf1","Sulf2","Sult1a1","Sult1b1","Sult1c2a","Sult1c2","Sult1d1","Sult1c3","Sult1e1","Sult2a1","Sult2a2","Sult2a6","Sult2b1","Sult4a1","Sult5a1","Sult6b1","Sumf1","Sumf2","Sumo1","Sumo2","Sumo3","Sumo4","Sun1","Sun2","Sun3","Sun5","Suox","Supt16h","Supt3h","Supt20h","Supt4h1","Supt5h","Supt7l","Supt6h","Supv3l1","Surf1","Surf2","Surf4","Surf6","Susd1","Susd2","Susd3","Susd4","Susd5","Suv39h1","Susd6","Suv39h1l1","Suv39h2","Suz12","Sv2a","Sv2b","Sv2c","Sval1","Sval2","Svbp","Svep1","Svil","Svip","Svop","Svopl","Svs1","Svs3a","Svs3b","Svs4","Svs5","Svs6","Swap70","Swi5","Swsap1","Swt1","Syap1","Sybu","Syce1","Syce1l","Syce2","Syce3","Sycn","Sycp1","Sycp2","Sycp2l","Sycp3","Syde1","Syde2","Syf2","Sympk","Syk","Syn2","Syn1","Synb","Syn3","Sync","Syncrip","Syndig1","Syndig1l","Syne1","Syne2","Syne3","Syne4","Syngr1","Syngap1","Syngr2","Syngr3","Syngr4","Synj1","Synj2","Synj2bp","Synm","Synpo","Synpo2","Synpo2l","Synpr","Synrg","Sypl1","Syp","Sypl2","Sys1","Syt10","Syt11","Syt1","Syt12","Syt13","Syt14","Syt15","Syt16","Syt17","Syt2","Syt3","Syt5","Syt4","Syt6","Syt7","Syt8","Syt9","Sytl1","Sytl2","Sytl3","Sytl4","Sytl5","Syvn1","Szrd1","T","Szt2","T2","Taar1","Taar2","Taar3","Taar4","Taar5","Taar6","Taar7a","Taar7b","Taar7c","Taar7d","Taar7e","Taar7f-ps","Taar7g","Taar7h","Taar7i-ps","Taar8a","Taar8b","Taar8c","Taar9","Tab1","Tab2","Tab3","Tac3","Tac1","Tac4","Tacc1","Tacc2","Tacc3","Taco1","Tacr2","Tacr1","Tacr3","Tacstd2","Tada1","Tada2a","Tada2b","Tada3lb","Tada3","Taf1","Taf10","Taf11","Taf12","Taf13","Taf15","Taf1a","Taf1b","Taf1c","Taf1d","Taf2","Taf4","Taf3","Taf4b","Taf5","Taf5l","Taf6","Taf6l","Taf7","Taf7l","Taf7l-ps1","Taf8","Taf9","Taf9-ps","Tagap","Taf9b","Tagln","Tagln2","Tagln3","Tal2","Tal1","Taldo1","Tamm41","Tanc1","Tanc2","Tango2","Tango6","Tank","Taok1","Taok2","Taok3","Tap1","Tap2","Tapbpl","Tapbp","Tarbp1","Tapt1","Tarbp2","Tarm1","Tardbp","Tars","Tars2","Tarsl2","Tas1r1","Tas1r2","Tas1r3","Tas2r102","Tas2r103","Tas2r104","Tas2r105","Tas2r106","Tas2r107","Tas2r108","Tas2r109","Tas2r110","Tas2r113","Tas2r114","Tas2r116","Tas2r117","Tas2r118","Tas2r119","Tas2r120","Tas2r121","Tas2r123","Tas2r124","Tas2r125","Tas2r126","Tas2r129","Tas2r13","Tas2r130","Tas2r134","Tas2r136","Tas2r135","Tas2r137","Tas2r138","Tas2r139","Tas2r140","Tas2r143","Tas2r144","Tas2r145","Tas2r7l","Tasp1","Tatdn1","Tat","Tatdn2","Tatdn3","Tax1bp3","Tax1bp1","Tbata","Taz","Tbc1d1","Tbc1d10a","Tbc1d10b","Tbc1d10c","Tbc1d12","Tbc1d13","Tbc1d14","Tbc1d15","Tbc1d16","Tbc1d17","Tbc1d19","Tbc1d2","Tbc1d20","Tbc1d21","Tbc1d22a","Tbc1d22b","Tbc1d23","Tbc1d24","Tbc1d25","Tbc1d2b","Tbc1d30","Tbc1d31","Tbc1d32","Tbc1d4","Tbc1d5","Tbc1d7","Tbc1d8","Tbc1d8b","Tbc1d9","Tbca","Tbc1d9b","Tbcb","Tbcc","Tbccd1","Tbcd","Tbce","Tbcel","Tbck","Tbk1","Tbkbp1","Tbl1x","Tbl1xr1","Tbl2","Tbl3","Tbp","Tbpl1","Tbpl2","Tbr1","Tbrg1","Tbrg4","Tbx10","Tbx1","Tbx15","Tbx18","Tbx19","Tbx2","Tbx20","Tbx21","Tbx22","Tbx3","Tbx4","Tbx6","Tbx5","Tbxa2r","Tbxas1","Tc2n","Tcaf1","Tcaf2","Tcam1","Tcaim","Tcap","Tcea1","Tcea2","Tcea3","Tceal1","Tceal3","Tceal5","Tceal6","Tceal7","Tceal8","Tceal9","Tceanc","Tceanc2","Tcerg1","Tcerg1l","Tcf15","Tcf12","Tcf19","Tcf20","Tcf21","Tcf23","Tcf24","Tcf25","Tcf3","Tcf4","Tcf7","Tcf7l1","Tcf7l2","Tcfl5","Tchh","Tchhl1","Tchp","Tcirg1","Tcl1a","Tcn2","Tcof1","Tcp1-ps1","Tcp1","Tcp10b","Tcp11","Tcp11l1","Tcp11l2","Tcp11x2","Tcra-v22.1","Tcrb","Tcta","Tcte3","Tcte1","Tctex1d1","Tctex1d2","Tctex1d4","Tctn1","Tctn2","Tctn3","Tdg","Tdg-ps1","Tdgf1","Tdh","Tdo2","Tdp1","Tdp2","Tdpoz1","Tdrd12","Tdrd1","Tdrd15","Tdrd3","Tdrd6","Tdrd5","Tdrd7","Tdrd9","Tdrkh","Tdrp","Tead1","Tead2","Tead3","Tead4","Tec","Tecpr1","Tecpr2","Tecr","Tecrl","Tecta","Tectb","Tedc1","Teddm1","Tef","Tefm","Tekt1","Tek","Tekt2","Tekt3","Tekt4","Tekt5","Telo2","Ten1","Tenm1","Tenm2","Tenm3","Tenm4","Tep1","Tepp","Tepsin","Terb1","Terb2","Terc","Terf1","Terf2","Terf2ip","Tes","Tert","Tesb","Tesc","Tescl","Tesk1","Tesk2","Tesl","Tesmin","Testin","Tet1","Tet2","Tet3","Tex10","Tex101","Tex11","Tex12","Tex13a","Tex13b","Tex13c","Tex14","Tex15","Tex16-ps1","Tex19.1","Tex19.2","Tex2","Tex21","Tex22","Tex26","Tex261","Tex264","Tex28","Tex29","Tex30","Tex33","Tex35","Tex36","Tex37","Tex38","Tex43","Tex44","Tex45","Tex47","Tex49","Tex51","Tex52","Tex9","Tfam","Tf","Tfap2a","Tfap2b","Tfap2c","Tfap2d","Tfap2e","Tfap4","Tfb1m","Tfb2m","Tfcp2","Tfcp2l1","Tfdp1","Tfdp2","Tfe3","Tfeb","Tfec","Tff1","Tff2","Tff3","Tfg","Tfip11","Tfpi","Tfpi2","Tfpt","Tfr2","Tfrc","Tg","tGap1","Tgds","Tgfa","Tgfb1i1","Tgfb2","Tgfb1","Tgfb3","Tgfbi","Tgfbr1","Tgfbr2","Tgfbr3","Tgfbr3l","Tgfbrap1","Tgif1","Tgif2-ps1","Tgif2","Tgif2lx2","Tgm1","Tgm2","Tgm3","Tgm4","Tgm5","Tgm7","Tgm6","Tgs1","Tgoln2","Thada","Thap1","Th","Thap11","Thap12","Thap2","Thap3","Thap4","Thap6","Thap7","Thap8","Thbs1","Thbd","Thbs3","Thbs2","Theg","Thbs4","Thegl","Them4","Them5","Them6","Themis","Themis2","Thg1l","Thnsl1","Thoc1","Thnsl2","Thoc3","Thoc2","Thoc5","Thoc6","Thoc7","Thop1","Thpol1","Thpo","Thrap3","Thra","Thrb","Thrsp","Thsd1","Thsd4","Thsd7a","Thsd7b","Thtpa","Thumpd1","Thumpd2","Thumpd3","Thumpd3-as1","Thyn1","Thy1","Tia1","Tial1","Tiam1","Tiam2","Ticam1","Ticam2","Ticrr","Tie1","Tifa","Tifab","Tigar","Tigd2","Tigd3","Tigd4","Tigd5","Tigit","Timd2","Timd4","Timeless","Timm10","Timm13","Timm10b","Timm17al1","Timm17a","Timm17b","Timm21","Timm22","Timm23","Timm23b","Timm29","Timm44","Timm50","Timm8a1","Timm8a2","Timm8b","Timm9","Timmdc1","Timp1","Timp2","Timp4","Timp3","Tinag","Tinagl1","Tincr","Tinf2","Tiparp","Tipin-ps1","Tipin","Tipinl1","Tiprl","Tirap","Tjap1","Tjp2","Tjp1","Tjp3","Tk1","Tk2","Tkfc","Tkt","Tktl1","Tktl2","Tlcd1","Tlcd2","Tldc1","Tldc2","Tle1","Tle2","Tle3","Tle4","Tle6","Tlk1","Tlk2","Tll1","Tll2","Tln1","Tln2","Tlnrd1","Tlr1","Tlr10","Tlr11","Tlr12","Tlr13","Tlr3","Tlr2","Tlr4","Tlr5","Tlr6","Tlr7","Tlr8","Tlx1","Tlr9","Tlx2","Tlx3","Tm2d1","Tm2d3","Tm2d2","Tm4sf19","Tm4sf1","Tm4sf20","Tm4sf4","Tm4sf5","Tm6sf1","Tm6sf2","Tm7sf2","Tm7sf3","Tm9sf1","Tm9sf2","Tm9sf3","Tm9sf4","Tma16","Tma7","Tmbim1","Tmbim4","Tmbim6","Tmbim7","Tmc1","Tmc2","Tmc3","Tmc4","Tmc4b","Tmc5","Tmc6","Tmc7","Tmc8","Tmcc1","Tmcc2","Tmco1","Tmcc3","Tmco2","Tmco3","Tmco4","Tmco5a","Tmco5b","Tmco6","Tmed1","Tmed10","Tmed11","Tmed2","Tmed3","Tmed4","Tmed5","Tmed6","Tmed7","Tmed8","Tmed9","Tmeff1","Tmeff2","Tmem100","Tmem101","Tmem102","Tmem105","Tmem104","Tmem106a","Tmem106b","Tmem106c","Tmem107","Tmem108","Tmem109","Tmem11","Tmem110","Tmem114","Tmem115","Tmem116","Tmem117","Tmem119","Tmem120a","Tmem120b","Tmem121","Tmem121b","Tmem123","Tmem125","Tmem126a","Tmem126b","Tmem127","Tmem128","Tmem129","Tmem130","Tmem131","Tmem132a","Tmem132b","Tmem132c","Tmem132e","Tmem132d","Tmem134","Tmem135","Tmem136","Tmem138","Tmem139","Tmem140","Tmem141","Tmem144","Tmem143","Tmem145","Tmem147","Tmem14a","Tmem14c","Tmem150a","Tmem150b","Tmem150c","Tmem151a","Tmem151b","Tmem154","Tmem156","Tmem158","Tmem159","Tmem160","Tmem161a","Tmem161b","Tmem163","Tmem164","Tmem165","Tmem167a","Tmem167b","Tmem168","Tmem169","Tmem17","Tmem170a","Tmem170b","Tmem171","Tmem173","Tmem174","Tmem175","Tmem176a","Tmem176b","Tmem177","Tmem178a","Tmem178b","Tmem179","Tmem179b","Tmem18","Tmem181","Tmem182","Tmem183a","Tmem184a","Tmem184b","Tmem184c","Tmem185a","Tmem185b","Tmem186","Tmem189","Tmem19","Tmem190","Tmem191c","Tmem192","Tmem196","Tmem198","Tmem198b","Tmem199","Tmem2","Tmem200a","Tmem200b","Tmem200c","Tmem201","Tmem202","Tmem203","Tmem204","Tmem205","Tmem206","Tmem207","Tmem208","Tmem209","Tmem210","Tmem211","Tmem212","Tmem213","Tmem214","Tmem215","Tmem216","Tmem217","Tmem218","Tmem219","Tmem220","Tmem221","Tmem222","Tmem223","Tmem225","Tmem229a","Tmem229b","Tmem230","Tmem231","Tmem232","Tmem233","Tmem234","Tmem235","Tmem236","Tmem238","Tmem237","Tmem239","Tmem240","Tmem241","Tmem242","Tmem243","Tmem245","Tmem246","Tmem247","Tmem249","Tmem248","Tmem25","Tmem250","Tmem251","Tmem252","Tmem253","Tmem254","Tmem255a","Tmem255b","Tmem256","Tmem258","Tmem258b","Tmem259","Tmem26","Tmem262","Tmem260","Tmem265","Tmem263","Tmem266","Tmem267","Tmem268","Tmem269","Tmem270","Tmem27","Tmem30b","Tmem30a","Tmem30c","Tmem33","Tmem35a","Tmem35b","Tmem37","Tmem38a","Tmem38b","Tmem39a","Tmem39b","Tmem40","Tmem41a","Tmem41b","Tmem42","Tmem43","Tmem44","Tmem45a","Tmem45al","Tmem45b","Tmem47","Tmem5","Tmem50a","Tmem50b","Tmem51","Tmem52","Tmem52b","Tmem53","Tmem54","Tmem56","Tmem57","Tmem59","Tmem59l","Tmem60","Tmem61","Tmem62","Tmem63a","Tmem63b","Tmem63c","Tmem64","Tmem65","Tmem67","Tmem68","Tmem69","Tmem70","Tmem71","Tmem72","Tmem74","Tmem74b","Tmem74bos","Tmem79","Tmem80","Tmem81","Tmem82","Tmem86a","Tmem86b","Tmem87a","Tmem87b","Tmem88","Tmem88b","Tmem89","Tmem8a","Tmem8b","Tmem9","Tmem91","Tmem92","Tmem95","Tmem97","Tmem98","Tmem9b","Tmf1","Tmie","Tmigd1","Tmigd3","Tmlhe","Tmod1","Tmod2","Tmod3","Tmod4","Tmpo","Tmppe","Tmprss11a","Tmprss11b","Tmprss11c","Tmprss11d","Tmprss11e","Tmprss11f","Tmprss11g","Tmprss12","Tmprss13","Tmprss15","Tmprss2","Tmprss3","Tmprss4","Tmprss5","Tmprss6","Tmprss7","Tmprss9","Tmsb10","Tmsb15b2","Tmtc1","Tmsb4x","Tmtc3","Tmtc2","Tmub1","Tmtc4","Tmx1","Tmub2","Tmx2","Tmx3","Tmx4","Tnc","Tnfaip1","Tnfaip2","Tnfaip3","Tnfaip6","Tnfaip8","Tnfaip8l1","Tnfaip8l2","Tnf","Tnfaip8l3","Tnfrsf10b","Tnfrsf11a","Tnfrsf11b","Tnfrsf12a","Tnfrsf13b","Tnfrsf13c","Tnfrsf14","Tnfrsf17","Tnfrsf18","Tnfrsf19","Tnfrsf1b","Tnfrsf1a","Tnfrsf21","Tnfrsf22","Tnfrsf25","Tnfrsf26","Tnfrsf4","Tnfrsf8","Tnfrsf9","Tnfsf10","Tnfsf11","Tnfsf12","Tnfsf13","Tnfsf13b","Tnfsf14","Tnfsf15","Tnfsf18","Tnfsf4","Tnfsf8","Tnfsf9","Tnik","Tnip1","Tnip2","Tnip3","Tnk1","Tnk2","Tnks","Tnks1bp1","Tnks2","Tnmd","Tnn","Tnnc1","Tnnc2","Tnni1","Tnni2","Tnni3","Tnni3k","Tnnt1","Tnnt2","Tnnt3","Tnp1","Tnp2","Tnpo1","Tnpo2","Tnpo3","Tnrc18","Tnr","Tnrc6a","Tnrc6b","Tnrc6c","Tns1","Tns2","Tns3","Tns4","Tnxa-ps1","Tnxb","Tob1","Tob2","Toe1","Togaram1","Togaram2","Tollip","Tom1","Tom1l1","Tom1l2","Tomm20l","Tomm20","Tomm22","Tomm34","Tomm40l","Tomm40","Tomm5","Tomm6","Tomm7","Tomm70","Tonsl","Top1","Top1mt","Top2b","Top2a","Top3a","Top3b","Topaz1","Topbp1","Topors","Tor1a","Tor1aip1","Tor1aip2","Tor1b","Tor2a","Tor3a","Tor4a","Tore","Tox","Tox2","Tox3","Tox4","Tp53bp2","Tp53bp1","Tp53i11","Tp53i3","Tp53i13","Tp53inp2","Tp53rk","Tp53tg5","Tp53inp1","Tpbgl","Tpbpa","Tpbg","Tp63","Tp73","Tpc1808","Tpcr12","Tpcn1","Tpcn2","Tpd52","Tpd52l1","Tp53","Tpgs1","Tpd52l3","Tpd52l2","Tpgs2","Tph2","Tph1","Tpi1","Tpk1","Tpm3_v1","Tpm2","Tpm4","Tpmt","Tpm1","Tpm3","Tpo","Tpp2","Tppp","Tpp1","Tppp2","Tppp3","Tprg1","Tpra1","Tprg1l","Tpr","Tprn","Tprkb","Tpsb2","Tpsg1","Tpsab1","Tpst1","Tpst2","Tpte2","Tpx2","Tra2a","Tpt1","Tra2b","Trabd","Trabd2b","Tradd","Traf1","Traf3ip1","Traf2","Traf3","Traf3ip2","Traf3ip3","Traf5","Traf4","Traf6","Traf7","Trafd1","Traip","Trak1","Tram1l1","Trak2","Tram1","Tram2","Trank1","Trap1","Trap1a","Trappc1","Trappc10","Trappc12","Trappc11","Trappc2","Trappc13","Trappc2b","Trappc2l","Trappc3","Trappc3l","Trappc5","Trappc4","Trappc6a","Trappc6b","Trappc8","Trat1","Trappc9","Trav14s2","Trav12-3","Trav22","Treh","Trem1","Trdmt1","Trem2","Trdn","Trem3","Treml1","Treml4","Treml2","Trex1","Trerf1","Trex2","Trg","Triap1","Trhde","Trhr","Trib1","Trh","Trib2","Tril","Trim10","Trib3","Trim13","Trim11","Trim14","Trim15-ps1","Trim15","Trim16","Trim17","Trim2","Trim21","Trim24","Trim23","Trim25","Trim29","Trim26","Trim27","Trim3","Trim28","Trim30","Trim31","Trim30c","Trim34","Trim32","Trim33","Trim35","Trim36","Trim38","Trim39-ps","Trim39","Trim40","Trim43a","Trim37","Trim42","Trim41","Trim44","Trim45","Trim47","Trim46","Trim50","Trim5","Trim52","Trim54","Trim58","Trim55","Trim60","Trim59","Trim6","Trim62","Trim65","Trim66","Trim63","Trim67","Trim68","Trim7","Trim69","Trim8","Trim72","Trim71","Trim80","Triml1","Triml2","Trim9","Triobp","Trip10","Trip11","Trio","Trip13","Trip6","Trip12","Trip4","Triqk","Trir","Trit1","Trmo","Trmt1","Trmt10a","Trmt10b","Trmt10c","Trmt11","Trmt112","Trmt12","Trmt13","Trmt1l","Trmt2b","Trmt2a","Trmt5","Trmt44","Trmt6","Trmt61a","Trnaa-agc1","Trmu","Trnaa-agc10","Trnaa-agc11","Trnaa-agc13","Trnaa-agc12","Trnaa-agc15","Trnaa-agc14","Trnaa-agc16","Trnaa-agc17","Trnaa-agc19","Trnaa-agc18","Trnaa-agc2","Trnaa-agc20","Trnaa-agc3","Trnaa-agc4","Trnaa-agc5","Trnaa-agc6","Trnaa-agc7","Trnaa-agc8","Trnaa-agc9","Trnaa-cgc1","Trnaa-cgc2","Trnaa-cgc3","Trnaa-cgc4","Trnaa-ggc1","Trnaa-ugc1","Trnaa-ugc2","Trnaa-ugc3","Trnaa-ugc","Trnaa-ugc4","Trnaa-ugc5","Trnaa-ugc6","Trnaa-ugc7","Trnaa-ugc8","Trnaa-ugc9","Trnac-gca1","Trnac-gca10","Trnac-gca11","Trnac-gca12","Trnac-gca13","Trnac-gca","Trnac-gca14","Trnac-gca15","Trnac-gca16","Trnac-gca17","Trnac-gca18","Trnac-gca19","Trnac-gca2","Trnac-gca20","Trnac-gca21","Trnac-gca22","Trnac-gca23","Trnac-gca24","Trnac-gca25","Trnac-gca26","Trnac-gca27","Trnac-gca28","Trnac-gca29","Trnac-gca3","Trnac-gca30","Trnac-gca31","Trnac-gca32","Trnac-gca33","Trnac-gca34","Trnac-gca35","Trnac-gca36","Trnac-gca37","Trnac-gca38","Trnac-gca39","Trnac-gca4","Trnac-gca5","Trnac-gca6","Trnac-gca7","Trnac-gca8","Trnac-gca9","Trnad-guc1","Trnad-guc10","Trnad-guc11","Trnad-guc13","Trnad-guc12","Trnad-guc14","Trnad-guc2","Trnad-guc3","Trnad-guc4","Trnad-guc5","Trnad-guc6","Trnad-guc7","Trnad-guc8","Trnad-guc9","Trnae-cuc1","Trnae-cuc2","Trnae-cuc3","Trnae-cuc4","Trnae-cuc5","Trnae-cuc6","Trnae-cuc7","Trnae-cuc8","Trnae-cuc9","Trnae-uuc1","Trnae-uuc10","Trnae-uuc2","Trnae-uuc3","Trnae-uuc4","Trnae-uuc5","Trnae-uuc6","Trnae-uuc7","Trnae-uuc8","Trnae-uuc9","Trnaf-gaa1","Trnaf-gaa2","Trnaf-gaa3","Trnaf-gaa4","Trnaf-gaa5","Trnaf-gaa6","Trnaf-gaa7","Trnaf-gaa8","Trnag-ccc1","Trnag-ccc3","Trnag-ccc2","Trnag-ccc4","Trnag-ccc5","Trnag-gcc1","Trnag-gcc10","Trnag-gcc11","Trnag-gcc2","Trnag-gcc3","Trnag-gcc4","Trnag-gcc5","Trnag-gcc6","Trnag-gcc7","Trnag-gcc8","Trnag-gcc9","Trnag-ucc","Trnag-ucc1","Trnag-ucc2","Trnag-ucc3","Trnag-ucc4","Trnag-ucc5","Trnag-ucc6","Trnag-ucc7","Trnag-ucc8","Trnag-ucc9","Trnah-gug10","Trnah-gug1","Trnah-gug11","Trnah-gug2","Trnah-gug3","Trnah-gug4","Trnah-gug5","Trnah-gug6","Trnah-gug7","Trnah-gug8","Trnah-gug9","Trnai-aau1","Trnai-aau10","Trnai-aau11","Trnai-aau2","Trnai-aau3","Trnai-aau4","Trnai-aau5","Trnai-aau6","Trnai-aau7","Trnai-aau8","Trnai-aau9","Trnai-uau1","Trnai-uau2","Trnai-uau3","Trnak-cuu1","Trnak-cuu","Trnak-cuu10","Trnak-cuu11","Trnak-cuu12","Trnak-cuu13","Trnak-cuu14","Trnak-cuu15","Trnak-cuu16","Trnak-cuu17","Trnak-cuu18","Trnak-cuu2","Trnak-cuu3","Trnak-cuu4","Trnak-cuu5","Trnak-cuu6","Trnak-cuu7","Trnak-cuu8","Trnak-cuu9","Trnak-uuu","Trnak-uuu1","Trnak-uuu2","Trnak-uuu3","Trnak-uuu4","Trnak-uuu5","Trnak-uuu6","Trnak-uuu7","Trnak-uuu8","Trnak-uuu9","Trnal-aag1","Trnal-aag2","Trnal-aag3","Trnal-aag4","Trnal-aag5","Trnal-aag6","Trnal-caa2","Trnal-caa1","Trnal-caa3","Trnal-cag1","Trnal-cag10","Trnal-cag2","Trnal-cag3","Trnal-cag4","Trnal-cag5","Trnal-cag6","Trnal-cag7","Trnal-cag9","Trnal-cag8","Trnal-uaa1","Trnal-uaa2","Trnal-uag1","Trnal-uag2","Trnal-uag3","Trnam-cau1","Trnam-cau10","Trnam-cau11","Trnam-cau12","Trnam-cau13","Trnam-cau2","Trnam-cau3","Trnam-cau4","Trnam-cau5","Trnam-cau6","Trnam-cau7","Trnam-cau8","Trnam-cau9","Trnan-guu","Trnan-guu1","Trnan-guu10","Trnan-guu11","Trnan-guu12","Trnan-guu13","Trnan-guu2","Trnan-guu3","Trnan-guu4","Trnan-guu5","Trnan-guu6","Trnan-guu7","Trnan-guu8","Trnan-guu9","Trnan1","Trnap-agg","Trnap-agg1","Trnap-agg10","Trnap-agg11","Trnap-agg13","Trnap-agg12","Trnap-agg14","Trnap-agg15","Trnap-agg16","Trnap-agg17","Trnap-agg18","Trnap-agg2","Trnap-agg3","Trnap-agg4","Trnap-agg5","Trnap-agg6","Trnap-agg7","Trnap-agg8","Trnap-agg9","Trnap-cgg1","Trnap-cgg2","Trnap-cgg3","Trnap-ugg","Trnap-ugg1","Trnap-ugg2","Trnap-ugg4","Trnap-ugg3","Trnap-ugg5","Trnap-ugg6","Trnaq-cug1","Trnaq-cug","Trnaq-cug10","Trnaq-cug2","Trnaq-cug3","Trnaq-cug4","Trnaq-cug5","Trnaq-cug6","Trnaq-cug7","Trnaq-cug8","Trnaq-cug9","Trnaq-uug1","Trnaq-uug2","Trnaq-uug3","Trnaq-uug4","Trnaq-uug5","Trnar-acg1","Trnar-acg2","Trnar-acg3","Trnar-acg4","Trnar-acg5","Trnar-acg6","Trnar-ccg1","Trnar-ccg2","Trnar-ccg3","Trnar-ccu","Trnar-ccu1","Trnar-ccu2","Trnar-ccu3","Trnar-ccu4","Trnar-ccu5","Trnar-ccu6","Trnar-ccu7","Trnar-ccu8","Trnar-ccu9","Trnar-ucg1","Trnar-ucg2","Trnar-ucg3","Trnar-ucg4","Trnar-ucg5","Trnar-ucu1","Trnar-ucu2","Trnar-ucu3","Trnar-ucu4","Trnar-ucu5","Trnar-ucu6","Trnar-ucu7","Trnas-aga1","Trnas-aga10","Trnas-aga11","Trnas-aga2","Trnas-aga3","Trnas-aga4","Trnas-aga5","Trnas-aga6","Trnas-aga7","Trnas-aga8","Trnas-aga9","Trnas-cga1","Trnas-cga2","Trnas-cga3","Trnas-gcu","Trnas-gcu1","Trnas-gcu10","Trnas-gcu11","Trnas-gcu2","Trnas-gcu3","Trnas-gcu4","Trnas-gcu5","Trnas-gcu6","Trnas-gcu7","Trnas-gcu8","Trnas-gcu9","Trnas-uga1","Trnas-uga2","Trnas-uga3","Trnas-uga4","Trnat-agu","Trnat-agu1","Trnat-agu2","Trnat-agu3","Trnat-agu4","Trnat-agu5","Trnat-agu6","Trnat-agu7","Trnat-agu8","Trnat-cgu1","Trnat-cgu2","Trnat-cgu3","Trnat-cgu4","Trnat-cgu5","Trnat-ugu1","Trnat-ugu2","Trnat-ugu3","Trnat-ugu4","Trnat-ugu5","Trnav-aac1","Trnau1ap","Trnav-aac2","Trnav-aac3","Trnav-aac4","Trnav-aac5","Trnav-aac6","Trnav-aac7","Trnav-cac1","Trnav-cac2","Trnav-cac3","Trnav-cac4","Trnav-cac5","Trnav-cac6","Trnav-cac7","Trnav-cac8","Trnav-uac1","Trnav-uac2","Trnav-uac3","Trnav-uac4","Trnaw-cca1","Trnaw-cca2","Trnaw-cca3","Trnaw-cca4","Trnaw-cca5","Trnaw-cca6","Trnaw-cca7","Trnaw-cca8","Trnay-gua1","Trnay-gua2","Trnay-gua3","Trnay-gua4","Trnay-gua5","Trnay-gua6","Trnay-gua7","Trnay-gua8","Trnp1","Trnt1","Trnt1-ps1","Tro","Troap","Trove2","Trpa1","Trpc1","Trpc2","Trpc3","Trpc4ap","Trpc4","Trpc5os","Trpc5","Trpc7","Trpc6","Trpm1","Trpm2","Trpm3","Trpm4","Trpm5","Trpm6","Trpm7","Trpm8","Trps1","Trpt1","Trpv2","Trpv3","Trpv1","Trpv4","Trpv5","Trrap","Trpv6","Trub2","Trub1","Trub2-ps1","Trub2-ps2","Try10","Try5","Tryx5","Tsacc","Tsc1","Tsc2","Tsc22d1","Tsc22d2","Tsc22d3","Tsc22d4","Tsen15","Tsen2","Tsen34l1","Tsen34","Tsen54","Tsfm","Tsga10","Tsg101","Tsga10ip","Tsga13","Tshb","Tshr","Tshz1","Tshz2","Tshz3","Tsks","Tsku","Tslp","Tsn","Tsnax","Tsnaxip1","Tspan10","Tspan1","Tspan11","Tspan12","Tspan13","Tspan14","Tspan15","Tspan17","Tspan18","Tspan2","Tspan3","Tspan31","Tspan32","Tspan33","Tspan4","Tspan5","Tspan6","Tspan7","Tspan8","Tspan9","Tspear","Tspo","Tspo2","Tspy1","Tspoap1","Tspy26","Tspyl1","Tspyl2","Tspyl4","Tspyl5","Tsr1","Tsr2","Tsr3","Tssc4","Tssk1b","Tssk2","Tssk3","Tssk4","Tssk5","Tssk6","Tst","Tsta3","Tstd1","Tstd2","Tstd3","Tsx","Ttbk1","Ttbk2","Ttc1","Ttc12","Ttc13","Ttc14","Ttc16","Ttc17","Ttc19","Ttc21a","Ttc21b","Ttc22","Ttc23","Ttc23l","Ttc24","Ttc25","Ttc26","Ttc27","Ttc28","Ttc29","Ttc30a","Ttc3","Ttc30a1","Ttc30b","Ttc32","Ttc33","Ttc34","Ttc36","Ttc38","Ttc37","Ttc39b","Ttc39a","Ttc39d","Ttc39c","Ttc5","Ttc4","Ttc6","Ttc7a","Ttc7b","Ttc9","Ttc8","Ttc9b","Ttc9c","Ttf1","Ttf2","Tti1","Tti2","Ttl","Ttk","Ttll1","Ttll10","Ttll11","Ttll12","Ttll2","Ttll13","Ttll4","Ttll3","Ttll6","Ttll5","Ttll7","Ttll8","Ttll9","Ttn","Ttpa","Ttpal","Ttyh1","Ttr","Ttyh2","Ttyh3","Tub","Tuba1b","Tuba1a","Tuba1c","Tuba3a","Tuba3b","Tuba4a","Tuba8","Tubal3","Tubb1","Tubb2a","Tubb2b","Tubb3","Tubb4a","Tubb4b","Tubb5","Tubd1","Tubb6","Tube1","Tubg1","Tubg2","Tubgcp2","Tubgcp3","Tubgcp4","Tubgcp5","Tubgcp6","Tufm","Tuft1","Tug1","Tulp1","Tulp2","Tulp3","Tulp4","Tusc2","Tusc3","Tusc5","Tut1","Tvp23a","Tvp23b","Twf1","Twf2","Twf2-ps1","Twist1","Twist2","Twistnb","Twnk","Twsg1","Txlna","Txk","Txlnb","Txlng","Txn2","Txn1","Txndc11","Txndc12","Txndc15","Txndc16","Txndc17","Txndc2","Txndc5","Txndc8","Txndc9","Txnip","Txnl1","Txnl4a","Txnl4b","Txnrd1","Txnrd2","Txnrd3","Tyk2","Tymp","Tyms","Tyr","Tyro3","Tyrobp","Tyrp1","Tysnd1","Tyw1","Tyw3","Tyw5","U2af1","U2af1l4","U2af2","U2surp","Uaca","Uap1","Uap1l1","Uap1l2","Uba1","Uba1y","Uba2-ps1","Uba2","Uba3","Uba52","Uba5","Uba6","Uba7","Ubac1","Ubac2","Ubald1","Ubald2","Ubap1","Ubap1l","Ubap2","Ubap2l","Ubash3a","Ubash3b","Ubbp4","Ubb","Ubd","Ubc","Ube2a","Ube2b","Ube2c","Ube2d1","Ube2d2","Ube2d3","Ube2d4","Ube2d4l1","Ube2e1","Ube2e2","Ube2e3","Ube2f","Ube2g1","Ube2g2","Ube2h","Ube2i","Ube2j1","Ube2j2","Ube2k","Ube2l3","Ube2l6","Ube2m","Ube2n","Ube2o","Ube2q1","Ube2q2","Ube2q2l","Ube2ql1","Ube2s","Ube2r2","Ube2t","Ube2u","Ube2v1","Ube2v2","Ube2w","Ube2z","Ube3a","Ube3b","Ube3c","Ube3d","Ube4a","Ube4b","Ubfd1","Ubiad1","Ubl3","Ubl4b","Ubl4a","Ubl5","Ubl7","Ublcp1","Ubn1","Ubn2","Ubox5","Ubp1","Ubqln1","Ubqln2","Ubqln3","Ubqln4","Ubqlnl","Ubr1","Ubr2","Ubr3","Ubr5","Ubr4","Ubr7","Ubtd1","Ubtd2","Ubtfl1","Ubtf","Ubxn10","Ubxn1","Ubxn2a","Ubxn11","Ubxn2b","Ubxn4","Ubxn7","Ubxn6","Ubxn8","Uchl1","Uchl3","Uchl3-ps1","Uck1","Uchl5","Uck2","Uckl1","Ucma","Ucn","Ucn2","Ucn3","Ucp1","Ucp2","Ucp3","Uevld","Ufc1","Ufd1","Ufl1","Ufm1","Ufsp1","Ufsp2","Ugcg","Uggt1","Ugdh","Uggt2","Ugp2","Ugt1a2","Ugt1a1","Ugt1a4-ps","Ugt1a3","Ugt1a5","Ugt1a6","Ugt1a7c","Ugt1a8","Ugt1a9","Ugt1a9-ps","Ugt2a1","Ugt2a3","Ugt2b10","Ugt2b","Ugt2b17","Ugt2b15","Ugt2b35","Ugt2b37","Ugt2b7","Ugt3a2","Ugt8","Uhmk1","Uhrf1","Uhrf1bp1","Uhrf1bp1l","Uhrf2","Uimc1","Ulk1","Ulk2","Ulk3","Ulk4","Umodl","Umod","Umodl1","Umps","Unc119","Unc119b","Unc13a","Unc13b","Unc13c","Unc13d","Unc45a","Unc45b","Unc50","Unc5a","Unc5b","Unc5cl","Unc5c","Unc5d","Unc79","Unc80","Unc93a","Unc93b1","Uncx","Ung","Unk","Unkl","Uox","Upb1","Upf1","Upf2","Upf3a","Upf3b","Upk1a","Upk1b","Upk2","Upk3a","Upk3b","Upk3bl1","Upp2","Upp1","Uprt","Uqcc1","Uqcc2","Uqcc3","Uqcr10","Uqcr11","Uqcrb-ps1","Uqcrb","Uqcrc1","Uqcrc2","Uqcrfs1","Uqcrh","Urad","Uqcrq","Urb1","Urb2","Urgcp","Uri1","Urm1","Uroc1","Urod","Uros","Usb1","Use1","Usf1","Usf2","Usf3","Ush1c","Ush1g","Ushbp1","Usmg5","Ush2a","Uso1","Usp1","Usp10","Usp11","Usp12","Usp13","Usp14","Usp15","Usp16","Usp17l5","Usp18","Usp19","Usp2","Usp20","Usp21","Usp22","Usp24","Usp25","Usp26","Usp27x","Usp28","Usp29","Usp3","Usp30","Usp31","Usp32","Usp33","Usp34","Usp35","Usp36","Usp37","Usp38","Usp39","Usp4","Usp40","Usp42","Usp43","Usp44","Usp45","Usp46","Usp47","Usp48","Usp49","Usp5","Usp50","Usp51","Usp53","Usp54","Usp6nl","Usp7","Usp8","Usp9y","Usp9x","Uspl1","Ust","UST4r","Utf1","Ust5r","Utp11","Utp14a","Utp15","Utp18","Utp20","Utp23","Utp3","Utp4","Utp6","Uts2","Utrn","Uts2b","Uts2r","Uty","Uvrag","Uvssa","Uxt","Uxs1","V1ra14","Vac14","Vamp1","Vamp3","Vamp2","Vamp4","Vamp5","Vamp7","Vamp8","Vangl1","Vangl2","Vapa","Vapb","Vars","Vars2","Vash1","Vash2","Vasn","Vasp","Vat1","Vat1l","Vav1","Vav2","Vav3","Vax1","Vax2","Vbp1","Vcan","Vcam1","Vcl","Vcp","Vcpip1","Vcpkmt","Vcsa2","Vdac1","Vdac2","Vdac3","Vdr","Vegfb","Vegfa","Vegfc","Vegfd","Vegp2","Veph1","Vezf1","Vezt","Vgf","Vgll1","Vgll2","Vgll3","Vgll4","Vhl","Vhll","Vil1","Vill","Vim","Vip","Vipas39","Vipr1","Vipr2","Virma","Vit","Vkorc1","Vkorc1l1","Vma21","Vldlr","Vmac","Vmo1","Vmp1","Vnn1","Vnn3","Vof16","Vom1r-ps1","Vom1r-ps10","Vom1r-ps100","Vom1r-ps101","Vom1r-ps102","Vom1r-ps103","Vom1r-ps104","Vom1r-ps105","Vom1r-ps106","Vom1r-ps107","Vom1r-ps108","Vom1r-ps11","Vom1r-ps110","Vom1r-ps111","Vom1r-ps112","Vom1r-ps12","Vom1r-ps13","Vom1r-ps14","Vom1r-ps15","Vom1r-ps16","Vom1r-ps17","Vom1r-ps18","Vom1r-ps19","Vom1r-ps2","Vom1r-ps20","Vom1r-ps21","Vom1r-ps22","Vom1r-ps23","Vom1r-ps24","Vom1r-ps25","Vom1r-ps26","Vom1r-ps27","Vom1r-ps28","Vom1r-ps29","Vom1r-ps3","Vom1r-ps30","Vom1r-ps31","Vom1r-ps32","Vom1r-ps33","Vom1r-ps34","Vom1r-ps35","Vom1r-ps36","Vom1r-ps37","Vom1r-ps38","Vom1r-ps4","Vom1r-ps40","Vom1r-ps41","Vom1r-ps43","Vom1r-ps42","Vom1r-ps44","Vom1r-ps45","Vom1r-ps46","Vom1r-ps47","Vom1r-ps48","Vom1r-ps49","Vom1r-ps5","Vom1r-ps50","Vom1r-ps51","Vom1r-ps52","Vom1r-ps53","Vom1r-ps54","Vom1r-ps55","Vom1r-ps56","Vom1r-ps57","Vom1r-ps58","Vom1r-ps59","Vom1r-ps6","Vom1r-ps60","Vom1r-ps61","Vom1r-ps62","Vom1r-ps63","Vom1r-ps64","Vom1r-ps65","Vom1r-ps66","Vom1r-ps68","Vom1r-ps67","Vom1r-ps69","Vom1r-ps7","Vom1r-ps70","Vom1r-ps71","Vom1r-ps72","Vom1r-ps73","Vom1r-ps74","Vom1r-ps75","Vom1r-ps76","Vom1r-ps77","Vom1r-ps78","Vom1r-ps79","Vom1r-ps8","Vom1r-ps80","Vom1r-ps81","Vom1r-ps82","Vom1r-ps83","Vom1r-ps84","Vom1r-ps85","Vom1r-ps86","Vom1r-ps87","Vom1r-ps88","Vom1r-ps89","Vom1r-ps9","Vom1r-ps90","Vom1r-ps92","Vom1r-ps91","Vom1r-ps93","Vom1r-ps94","Vom1r-ps95","Vom1r-ps96","Vom1r-ps97","Vom1r-ps98","Vom1r-ps99","Vom1r1","Vom1r10","Vom1r100","Vom1r101","Vom1r102","Vom1r103","Vom1r104","Vom1r105","Vom1r106","Vom1r107","Vom1r108","Vom1r109","Vom1r11","Vom1r110","Vom1r111","Vom1r12","Vom1r13","Vom1r14","Vom1r15","Vom1r16","Vom1r17","Vom1r19","Vom1r2","Vom1r20","Vom1r21","Vom1r22","Vom1r23","Vom1r24","Vom1r25","Vom1r26","Vom1r27","Vom1r28","Vom1r3","Vom1r29","Vom1r30","Vom1r31","Vom1r32","Vom1r33","Vom1r34","Vom1r35","Vom1r36","Vom1r37","Vom1r38","Vom1r39","Vom1r4","Vom1r40","Vom1r41","Vom1r42","Vom1r43","Vom1r44","Vom1r45","Vom1r46","Vom1r47","Vom1r48","Vom1r49","Vom1r5","Vom1r50","Vom1r51","Vom1r52","Vom1r53","Vom1r54","Vom1r55","Vom1r56","Vom1r58","Vom1r57","Vom1r59","Vom1r6","Vom1r60","Vom1r61","Vom1r62","Vom1r63","Vom1r64","Vom1r65","Vom1r66","Vom1r67","Vom1r68","Vom1r69","Vom1r7","Vom1r70","Vom1r71","Vom1r72","Vom1r73","Vom1r74","Vom1r75","Vom1r76","Vom1r77","Vom1r78","Vom1r79","Vom1r8","Vom1r80","Vom1r81","Vom1r82","Vom1r83","Vom1r84","Vom1r85","Vom1r86","Vom1r87","Vom1r88","Vom1r89","Vom1r9","Vom1r92","Vom1r90","Vom1r93","Vom1r94","Vom1r95","Vom1r96","Vom1r97","Vom1r98","Vom2r-ps1","Vom1r99","Vom2r-ps10","Vom2r-ps100","Vom2r-ps101","Vom2r-ps103","Vom2r-ps104","Vom2r-ps105","Vom2r-ps106","Vom2r-ps107","Vom2r-ps108","Vom2r-ps109","Vom2r-ps110","Vom2r-ps11","Vom2r-ps111","Vom2r-ps112","Vom2r-ps113","Vom2r-ps114","Vom2r-ps115","Vom2r-ps116","Vom2r-ps117","Vom2r-ps118","Vom2r-ps119","Vom2r-ps12","Vom2r-ps120","Vom2r-ps121","Vom2r-ps122","Vom2r-ps123","Vom2r-ps124","Vom2r-ps125","Vom2r-ps126","Vom2r-ps127","Vom2r-ps128","Vom2r-ps129","Vom2r-ps13","Vom2r-ps130","Vom2r-ps131","Vom2r-ps132","Vom2r-ps133","Vom2r-ps136","Vom2r-ps135","Vom2r-ps137","Vom2r-ps138","Vom2r-ps14","Vom2r-ps140","Vom2r-ps141","Vom2r-ps142","Vom2r-ps15","Vom2r-ps16","Vom2r-ps17","Vom2r-ps18","Vom2r-ps19","Vom2r-ps20","Vom2r-ps22","Vom2r-ps23","Vom2r-ps24","Vom2r-ps25","Vom2r-ps26","Vom2r-ps28","Vom2r-ps27","Vom2r-ps3","Vom2r-ps30","Vom2r-ps31","Vom2r-ps32","Vom2r-ps33","Vom2r-ps34","Vom2r-ps35","Vom2r-ps36","Vom2r-ps37","Vom2r-ps38","Vom2r-ps39","Vom2r-ps4","Vom2r-ps40","Vom2r-ps41","Vom2r-ps42","Vom2r-ps43","Vom2r-ps44","Vom2r-ps46","Vom2r-ps45","Vom2r-ps47","Vom2r-ps48","Vom2r-ps49","Vom2r-ps5","Vom2r-ps50","Vom2r-ps51","Vom2r-ps52","Vom2r-ps53","Vom2r-ps54","Vom2r-ps55","Vom2r-ps56","Vom2r-ps57","Vom2r-ps59","Vom2r-ps61","Vom2r-ps60","Vom2r-ps62","Vom2r-ps63","Vom2r-ps64","Vom2r-ps65","Vom2r-ps66","Vom2r-ps67","Vom2r-ps69","Vom2r-ps7","Vom2r-ps70","Vom2r-ps71","Vom2r-ps72","Vom2r-ps74","Vom2r-ps75","Vom2r-ps76","Vom2r-ps77","Vom2r-ps78","Vom2r-ps79","Vom2r-ps8","Vom2r-ps82","Vom2r-ps84","Vom2r-ps83","Vom2r-ps85","Vom2r-ps86","Vom2r-ps87","Vom2r-ps88","Vom2r-ps89","Vom2r-ps9","Vom2r-ps90","Vom2r-ps91","Vom2r-ps92","Vom2r-ps93","Vom2r-ps94","Vom2r-ps95","Vom2r-ps96","Vom2r-ps97","Vom2r-ps98","Vom2r-ps99","Vom2r1","Vom2r10","Vom2r11","Vom2r12","Vom2r13","Vom2r15","Vom2r16","Vom2r17","Vom2r18","Vom2r19","Vom2r2","Vom2r21","Vom2r22","Vom2r23","Vom2r24","Vom2r25","Vom2r26","Vom2r27","Vom2r28","Vom2r29","Vom2r3","Vom2r30","Vom2r31","Vom2r32","Vom2r34","Vom2r33","Vom2r35","Vom2r36","Vom2r38","Vom2r37","Vom2r39","Vom2r4","Vom2r40","Vom2r41","Vom2r42","Vom2r43","Vom2r44","Vom2r45","Vom2r46","Vom2r47","Vom2r48","Vom2r49","Vom2r5","Vom2r50","Vom2r51","Vom2r52","Vom2r53","Vom2r54","Vom2r55","Vom2r56","Vom2r57","Vom2r58","Vom2r59","Vom2r6","Vom2r60","Vom2r62","Vom2r61","Vom2r63","Vom2r64","Vom2r65","Vom2r66","Vom2r67","Vom2r68","Vom2r69","Vom2r7","Vom2r70","Vom2r71","Vom2r72","Vom2r73","Vom2r75","Vom2r76","Vom2r77","Vom2r78","Vom2r79","Vom2r8","Vom2r80","Vom2r81","Vom2r9","Vopp1","Vpreb2","Vpreb1","Vpreb3","Vps11","Vps13b","Vps13a","Vps13c","Vps13d","Vps16","Vps18","Vps25","Vps26a","Vps26b","Vps28","Vps29","Vps33a","Vps33b","Vps35","Vps36","Vps37a","Vps37b","Vps37c","Vps37d","Vps39","Vps41","Vps45","Vps4a","Vps4b","Vps50","Vps51","Vps52","Vps53","Vps54","Vps54-ps1","Vps72","Vps8","Vps9d1","Vrk1","Vrk2","Vrk3","Vrtn","Vsig1","Vsig10","Vsig10l2","Vsig10l","Vsig2","Vsig4","Vsig8","Vsir","Vstm1","Vsnl1","Vstm2a","Vstm2b","Vstm2l","Vstm4","Vstm5","Vsx1","Vsx2","Vta1","Vtcn1","Vti1a","Vti1b","Vtn","Vwa1","Vwa2","Vwa3a","Vwa3b","Vwa5b1","Vwa5a","Vwa7","Vwa5b2","Vwc2","Vwa8","Vwc2l","Vwce","Vwde","Wac","Vwf","Wap","Wapl","Wars","Wars2","Was","Wasf1","Wasf2","Wasf3","Washc1","Washc2c","Washc3","Washc4","Washc5","Wbp1","Wasl","Wbp11","Wbp11l1","Wbp1l","Wbp2","Wbp2nl","Wbp4","Wdcp","Wdfy2","Wdfy1","Wdfy3","Wdfy4","Wdhd1","Wdpcp","Wdr1","Wdr11","Wdr12","Wdr13","Wdr17","Wdr18","Wdr19","Wdr20","Wdr24","Wdr25","Wdr26","Wdr27","Wdr3","Wdr33","Wdr31","Wdr34","Wdr35","Wdr36","Wdr37","Wdr38","Wdr4","Wdr41","Wdr43","Wdr44","Wdr45","Wdr45b","Wdr46","Wdr47","Wdr48","Wdr49","Wdr53","Wdr5","Wdr54","Wdr55","Wdr5b","Wdr59","Wdr6","Wdr60","Wdr61","Wdr62","Wdr63","Wdr64","Wdr65-ps1","Wdr66","Wdr7","Wdr70","Wdr72","Wdr73","Wdr74","Wdr75","Wdr76","Wdr78","Wdr81","Wdr77","Wdr82","Wdr83","Wdr83os","Wdr87","Wdr86","Wdr88","Wdr89","Wdr90","Wdr91","Wdr92","Wdr93","Wdr95","Wdr97","Wdr98","Wdsub1","Wdyhv1","Wdtc1","Wee1","Wee2","Wfdc10a","Wfdc11","Wfdc1","Wfdc13","Wfdc12","Wfdc15a","Wfdc15b","Wfdc16","Wfdc2","Wfdc18","Wfdc21","Wfdc3","Wfdc5","Wfdc6b","Wfdc6a","Wfdc9","Wfdc8","Wfikkn1","Wfikkn2","Wfs1","Whamm","Whrn","Wif1","Wipf1","Wipf2","Wipf3","Wipi1","Wipi2","Wisp1","Wisp2","Wisp3","Wiz","Wls","Wnk1","Wnk2","Wnk3","Wnk4","Wnt10b","Wnt10a","Wnt1","Wnt11","Wnt16","Wnt2b","Wnt2","Wnt3","Wnt3a","Wnt4","Wnt5a","Wnt5b","Wnt6","Wnt7a","Wnt7b","Wnt8b","Wnt8a","Wnt9a","Wnt9b","Wrap73","Wrap53","Wrb","Wrnip1","Wsb1","Wrn","Wsb2","Wscd2","Wscd1","Wt1","Wtip","Wtap","Wwc1","Wwc2","Wwc3","Wwox","Wwp1","Wwp2","Wwtr1","Xab2","Xaf1","Xcl1","Xbp1","Xcr1","Xirp1","Xiap","Xirp2","Xdh","Xkr4","Xk","Xkr5","Xkr7","Xkr8","Xkr9","Xkr6","Xkrx","Xlr3a","Xlr4a","Xpa","Xpnpep1","Xpc","Xpnpep2","Xpnpep3","Xpo4","Xpo1","Xpo5","Xpo6","Xpot","Xpo7","Xpr1","Xrcc2","Xrcc1","Xrcc3","Xrcc4","Xrcc5","Xrn1","Xrcc6","Xrn2","Xxylt1","Xrra1","Xylb","Xylt1","Xylt2","Yae1d1","Yaf2","Yars2","Yars","Yap1","Ybey","Ybx1-ps1","Ybx1-ps2","Ybx1-ps4","Ybx1-ps3","Ybx1","Ybx1-ps5","Ybx1-ps6","Ybx2","Ydjc","Ybx3","Yeats2","Yeats4","Yif1a","Yes1","Yif1b","Yipf1","Yipf2","Yipf4","Yipf3","Yipf5","Yipf6","Yipf7","Yjefn3","Ykt6","Ylpm1","Yme1l1","Yod1","Ypel1","Ypel3","Ypel2","Ypel4","Ypel5","Yrdc","Ythdc2","Ythdc1","Ythdf1","Ythdf2","Ythdf3","Ywhab","Ywhae","Ywhag","Ywhah","Ywhaq","Yy2","Yy1","Ywhaz","Zan","Zadh2","Zar1","Zap70","Zar1l","Zbed2","Zbbx","Zbed3","Zbed4","Zbed6","Zbed5","Zbp1","Zbtb1","Zbtb11","Zbtb10","Zbtb11os1","Zbtb12","Zbtb18","Zbtb17","Zbtb2","Zbtb16","Zbtb21","Zbtb20","Zbtb22","Zbtb24","Zbtb25","Zbtb26","Zbtb3","Zbtb32","Zbtb33","Zbtb34","Zbtb37","Zbtb38","Zbtb39","Zbtb4","Zbtb41","Zbtb40","Zbtb42","Zbtb43","Zbtb45","Zbtb44","Zbtb46","Zbtb47","Zbtb48","Zbtb49","Zbtb5","Zbtb6","Zbtb7b","Zbtb7a","Zbtb7c","Zbtb8a","Zbtb8b","Zbtb8os","Zbtb9","Zc2hc1a","Zc2hc1b","Zc2hc1c","Zc3h10","Zc3h11a","Zc3h12a","Zc3h12b","Zc3h12c","Zc3h12d","Zc3h13","Zc3h14","Zc3h18","Zc3h15","Zc3h3","Zc3h6","Zc3h4","Zc3h7a","Zc3h7b","Zc3h8","Zc3hav1l","Zc3hav1","Zc3hc1","Zc4h2","Zcchc10","Zcchc12","Zcchc11","Zcchc13","Zcchc14","Zcchc18","Zcchc17","Zcchc2","Zcchc24","Zcchc4","Zcchc3","Zcchc6","Zcchc8","Zcchc7","Zcchc9","Zcrb1","Zcwpw1","Zcwpw2","Zdbf2","Zdhhc11","Zdhhc1","Zdhhc12","Zdhhc13","Zdhhc14","Zdhhc15","Zdhhc16","Zdhhc17","Zdhhc18","Zdhhc19","Zdhhc2","Zdhhc21","Zdhhc20","Zdhhc22","Zdhhc23","Zdhhc24","Zdhhc25","Zdhhc3","Zdhhc4","Zdhhc5","Zdhhc6","Zdhhc7","Zdhhc9","Zdhhc8","Zeb1","Zeb2","Zeb2os","Zer1","Zfand1","Zfand2a","Zfand2b","Zfand3","Zfand5","Zfand6","Zfand4","Zfat","Zfc3h1","Zfhx2","Zfhx3","Zfhx4","Zfp1","Zfp105","Zfp108","Zfp106","Zfp11","Zfp110","Zfp113","Zfp111","Zfp112","Zfp12","Zfp13","Zfp133","Zfp131","Zfp136","Zfp141","Zfp14","Zfp143","Zfp142","Zfp146","Zfp148","Zfp157","Zfp161","Zfp169","Zfp17","Zfp174","Zfp18","Zfp180","Zfp182","Zfp184","Zfp185","Zfp189","Zfp2","Zfp202","Zfp207","Zfp212","Zfp213","Zfp217","Zfp219","Zfp24","Zfp236","Zfp248","Zfp251","Zfp26","Zfp263","Zfp260","Zfp266","Zfp27","Zfp267","Zfp275","Zfp277","Zfp276","Zfp28","Zfp28-ps1","Zfp280b","Zfp281","Zfp280d","Zfp280c","Zfp282","Zfp287","Zfp286a","Zfp292","Zfp296","Zfp3","Zfp30","Zfp300","Zfp316","Zfp318","Zfp317","Zfp319","Zfp322a","Zfp324","Zfp326","Zfp330","Zfp329","Zfp334","Zfp335","Zfp341","Zfp347","Zfp346","Zfp352","Zfp35","Zfp353","Zfp354b","Zfp354a","Zfp354c","Zfp358","Zfp362","Zfp36","Zfp366","Zfp365","Zfp367","Zfp36l3","Zfp36l2","Zfp36l1","Zfp383","Zfp37","Zfp382","Zfp384","Zfp385c","Zfp385a","Zfp385b","Zfp385d","Zfp386","Zfp39","Zfp394","Zfp397","Zfp398","Zfp395","Zfp40","Zfp407","Zfp41","Zfp410","Zfp414","Zfp42","Zfp420","Zfp418","Zfp422","Zfp423","Zfp428","Zfp426","Zfp42l","Zfp438","Zfp445","Zfp444","Zfp446","Zfp446-ps1","Zfp449","Zfp451","Zfp455","Zfp458","Zfp46","Zfp462","Zfp467","Zfp469","Zfp472","Zfp473","Zfp474","Zfp483","Zfp488","Zfp494","Zfp496","Zfp503","Zfp507","Zfp51","Zfp512b","Zfp512","Zfp511","Zfp513","Zfp518b","Zfp516","Zfp518a","Zfp52","Zfp524","Zfp523","Zfp521","Zfp526","Zfp53","Zfp532","Zfp536","Zfp54","Zfp541","Zfp558","Zfp551","Zfp560","Zfp563","Zfp569","Zfp566","Zfp57","Zfp574","Zfp575","Zfp579","Zfp580","Zfp59","Zfp583","Zfp593","Zfp592","Zfp598","Zfp597","Zfp600","Zfp605","Zfp606","Zfp608","Zfp609","Zfp61","Zfp612","Zfp617","Zfp618","Zfp623","Zfp62","Zfp622","Zfp628","Zfp629","Zfp637","Zfp638","Zfp639","Zfp646","Zfp64","Zfp641","Zfp647","Zfp648","Zfp644","Zfp652","Zfp653","Zfp654","Zfp664","Zfp663","Zfp655","Zfp668","Zfp667","Zfp672","Zfp683","Zfp68","Zfp688","Zfp687","Zfp69","Zfp691","Zfp689","Zfp697","Zfp692","Zfp704","Zfp703","Zfp7","Zfp706","Zfp707","Zfp707l1","Zfp709","Zfp709l1","Zfp719","Zfp711","Zfp710","Zfp717","Zfp74","Zfp748","Zfp758","Zfp768","Zfp764","Zfp764l1","Zfp746","Zfp763","Zfp770","Zfp773-ps1","Zfp771","Zfp772","Zfp78","Zfp775","Zfp777","Zfp780b","Zfp780b-ps1","Zfp786","Zfp788","Zfp787","Zfp791","Zfp800","Zfp804a","Zfp799","Zfp804b","Zfp821","Zfp819","Zfp82","Zfp827","Zfp830","Zfp839","Zfp831","Zfp853","Zfp865","Zfp862","Zfp846","Zfp84","Zfp866","Zfp867","Zfp868","Zfp87","Zfp869","Zfp874b","Zfp870","Zfp879","Zfp9","Zfp90","Zfp939","Zfp92","Zfp93","Zfp940-ps1","Zfp91","Zfp945","Zfp94","Zfp948-ps1","Zfp952","Zfp951","Zfp949","Zfp954","Zfp956","Zfp955a","Zfp961","Zfp958","Zfp964","Zfpl1","Zfpm2","Zfpm1","Zfr2","Zfr","Zfyve1","Zfx","Zfyve16","Zfyve19","Zfyve21","Zfyve26","Zfyve28","Zfyve27","Zg16","Zfyve9","Zglp1","Zg16b","Zgpat","Zgrf1","Zhx1","Zhx2","Zic1","Zhx3","Zic3","Zic5","Zic2","Zic4","Zik1","Zim1","Zkscan1","Zkscan2","Zkscan5","Zkscan4","Zkscan3","Zkscan7","Zmat1","Zkscan8","Zmat2","Zmat5","Zmat3","Zmat4","Zmiz1","Zmiz2","Zmpste24","Zmym1","Zmym2","Zmym3","Zmym5","Zmym4","Zmym6","Zmynd10","Znf146","Zmynd12","Zmynd15","Zmynd11","Zmynd19","Znf235","Znf354b","Znf408","Znf442","Znf454","Zmynd8","Znf48","Znf658","Znf474","Znf660","Znf7","Znf750","Znf740","Znf768","Znhit1","Znhit2","Znfx1","Znhit3","Znhit6","Znrd1-ps1","Znrd1as","Znrd1","Znrd1as1","Znrf2","Znrf3","Znrf1","Znrf4","Zp1","Zp2","Zp3","Zp3r","Zp4","Zpbp","Zpld1","Zpbp2","Zpr1","Zranb1","Zrsr1","Zscan10","Zrsr2","Zranb2","Zranb3","Zscan12","Zscan18","Zscan2","Zscan22","Zscan29","Zscan20","Zscan26","Zscan21","Zscan25","Zscan30","Zscan5b","Zscan4f","Zswim1","Zswim3","Zswim2","Zswim4","Zswim5","Zswim6","Zswim7","Zswim9","Zwilch","Zufsp","Zswim8","Zw10","Zxdb","Zwint","Zxdc","Zyg11a","Zyx","Zyg11b","Zzz3","Zzef1"] \ No newline at end of file
diff --git a/gn2/wqflask/static/new/javascript/validation.js b/gn2/wqflask/static/new/javascript/validation.js
new file mode 100644
index 00000000..2cacacfa
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/validation.js
@@ -0,0 +1,42 @@
+// Generated by CoffeeScript 1.8.0
+$(function() {
+ var remove_samples_is_valid, validate_remove_samples;
+ remove_samples_is_valid = function(input) {
+ var new_splats, pattern, splat, splats, _i, _len;
+ if (_.trim(input).length === 0) {
+ return true;
+ }
+ splats = input.split(",");
+ new_splats = (function() {
+ var _i, _len, _results;
+ _results = [];
+ for (_i = 0, _len = splats.length; _i < _len; _i++) {
+ input = splats[_i];
+ _results.push(_.trim(input));
+ }
+ return _results;
+ })();
+ pattern = /^\d+\s*(?:-\s*\d+)?\s*$/;
+ for (_i = 0, _len = new_splats.length; _i < _len; _i++) {
+ splat = new_splats[_i];
+ if (!splat.match(pattern)) {
+ return false;
+ }
+ }
+ return true;
+ };
+ validate_remove_samples = function() {
+
+ /*
+ Check if input for the remove samples function is valid and notify the user if not
+ */
+ var input;
+ input = $('#remove_samples_field').val();
+ if (remove_samples_is_valid(input)) {
+ return $('#remove_samples_invalid').hide();
+ } else {
+ return $('#remove_samples_invalid').show();
+ }
+ };
+ return $('#remove_samples_field').change(validate_remove_samples);
+});