diff options
author | uditgulati | 2021-01-05 13:13:28 -0600 |
---|---|---|
committer | uditgulati | 2021-01-05 13:13:28 -0600 |
commit | 1e7a4d76fa36d1476fe37ae9b4c0a946fe99bce1 (patch) | |
tree | 0d18520e09fa0edce0080c773d0edd14750b855c /wqflask | |
parent | e106f5888cb4d761a6dcb71dc0273e461ef3c71a (diff) | |
parent | e36d40d64c1cf8476002c46b5c9dba308151f75c (diff) | |
download | genenetwork2-1e7a4d76fa36d1476fe37ae9b4c0a946fe99bce1.tar.gz |
Merge branch 'testing' of https://github.com/genenetwork/genenetwork2 into snp_browser_changes
Diffstat (limited to 'wqflask')
133 files changed, 3375 insertions, 3231 deletions
diff --git a/wqflask/base/GeneralObject.py b/wqflask/base/GeneralObject.py index 0122ee32..249195e2 100644 --- a/wqflask/base/GeneralObject.py +++ b/wqflask/base/GeneralObject.py @@ -28,7 +28,7 @@ class GeneralObject: """ Base class to define an Object. a = [Spam(1, 4), Spam(9, 3), Spam(4,6)] - a.sort(lambda x, y: cmp(x.eggs, y.eggs)) + a.sort(key = lambda x: x.eggs) """ def __init__(self, *args, **kw): diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py index cfc02f8b..50bd8874 100644 --- a/wqflask/base/trait.py +++ b/wqflask/base/trait.py @@ -25,19 +25,19 @@ def create_trait(**kw): assert bool(kw.get('dataset')) != bool( kw.get('dataset_name')), "Needs dataset ob. or name" - if kw.get('name'): - if kw.get('dataset_name'): - if kw.get('dataset_name') != "Temp": - dataset = create_dataset(kw.get('dataset_name')) - else: - dataset = kw.get('dataset') + assert bool(kw.get('name')), "Needs trait name" + if kw.get('dataset_name'): if kw.get('dataset_name') != "Temp": - if dataset.type == 'Publish': - permissions = check_resource_availability( - dataset, kw.get('name')) - else: - permissions = check_resource_availability(dataset) + dataset = create_dataset(kw.get('dataset_name')) + else: + dataset = kw.get('dataset') + + if dataset.type == 'Publish': + permissions = check_resource_availability( + dataset, kw.get('name')) + else: + permissions = check_resource_availability(dataset) if "view" in permissions['data']: the_trait = GeneralTrait(**kw) @@ -265,14 +265,17 @@ def get_sample_data(): trait_dict['species'] = trait_ob.dataset.group.species trait_dict['url'] = url_for( 'show_trait_page', trait_id=trait, dataset=dataset) - trait_dict['description'] = trait_ob.description_display if trait_ob.dataset.type == "ProbeSet": trait_dict['symbol'] = trait_ob.symbol trait_dict['location'] = trait_ob.location_repr + trait_dict['description'] = trait_ob.description_display elif trait_ob.dataset.type == "Publish": + trait_dict['description'] = trait_ob.description_display if trait_ob.pubmed_id: trait_dict['pubmed_link'] = trait_ob.pubmed_link trait_dict['pubmed_text'] = trait_ob.pubmed_text + else: + trait_dict['location'] = trait_ob.location_repr return json.dumps([trait_dict, {key: value.value for key, value in list( @@ -513,7 +516,7 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False): # If the dataset is confidential and the user has access to confidential # phenotype traits, then display the pre-publication description instead # of the post-publication description - if trait.confidential: + if not trait.pubmed_id: trait.abbreviation = trait.pre_publication_abbreviation trait.description_display = trait.pre_publication_description else: diff --git a/wqflask/tests/base/__init__.py b/wqflask/tests/integration/__init__.py index e69de29b..e69de29b 100644 --- a/wqflask/tests/base/__init__.py +++ b/wqflask/tests/integration/__init__.py diff --git a/wqflask/tests/integration/test_markdown_routes.py b/wqflask/tests/integration/test_markdown_routes.py new file mode 100644 index 00000000..5e3e5045 --- /dev/null +++ b/wqflask/tests/integration/test_markdown_routes.py @@ -0,0 +1,21 @@ +"Integration tests for markdown routes" +import unittest + +from bs4 import BeautifulSoup + +from wqflask import app + + +class TestGenMenu(unittest.TestCase): + """Tests for glossary""" + + def setUp(self): + self.app = app.test_client() + + def tearDown(self): + pass + + def test_glossary_page(self): + """Test that the glossary page is rendered properly""" + response = self.app.get('/glossary', follow_redirects=True) + pass diff --git a/wqflask/tests/utility/__init__.py b/wqflask/tests/unit/__init__.py index e69de29b..e69de29b 100644 --- a/wqflask/tests/utility/__init__.py +++ b/wqflask/tests/unit/__init__.py diff --git a/wqflask/tests/wqflask/__init__.py b/wqflask/tests/unit/base/__init__.py index e69de29b..e69de29b 100644 --- a/wqflask/tests/wqflask/__init__.py +++ b/wqflask/tests/unit/base/__init__.py diff --git a/wqflask/tests/base/data.py b/wqflask/tests/unit/base/data.py index 06a5a989..06a5a989 100644 --- a/wqflask/tests/base/data.py +++ b/wqflask/tests/unit/base/data.py diff --git a/wqflask/tests/base/test_data_set.py b/wqflask/tests/unit/base/test_data_set.py index 96563a16..96563a16 100644 --- a/wqflask/tests/base/test_data_set.py +++ b/wqflask/tests/unit/base/test_data_set.py diff --git a/wqflask/tests/base/test_general_object.py b/wqflask/tests/unit/base/test_general_object.py index 00fd3c72..00fd3c72 100644 --- a/wqflask/tests/base/test_general_object.py +++ b/wqflask/tests/unit/base/test_general_object.py diff --git a/wqflask/tests/base/test_trait.py b/wqflask/tests/unit/base/test_trait.py index 826ccefd..826ccefd 100644 --- a/wqflask/tests/base/test_trait.py +++ b/wqflask/tests/unit/base/test_trait.py diff --git a/wqflask/tests/base/test_webqtl_case_data.py b/wqflask/tests/unit/base/test_webqtl_case_data.py index 8e8ba482..8e8ba482 100644 --- a/wqflask/tests/base/test_webqtl_case_data.py +++ b/wqflask/tests/unit/base/test_webqtl_case_data.py diff --git a/wqflask/tests/wqflask/api/__init__.py b/wqflask/tests/unit/utility/__init__.py index e69de29b..e69de29b 100644 --- a/wqflask/tests/wqflask/api/__init__.py +++ b/wqflask/tests/unit/utility/__init__.py diff --git a/wqflask/tests/utility/test_authentication_tools.py b/wqflask/tests/unit/utility/test_authentication_tools.py index 5c391be5..5c391be5 100644 --- a/wqflask/tests/utility/test_authentication_tools.py +++ b/wqflask/tests/unit/utility/test_authentication_tools.py diff --git a/wqflask/tests/utility/test_chunks.py b/wqflask/tests/unit/utility/test_chunks.py index 8d90a1ec..8d90a1ec 100644 --- a/wqflask/tests/utility/test_chunks.py +++ b/wqflask/tests/unit/utility/test_chunks.py diff --git a/wqflask/tests/utility/test_corestats.py b/wqflask/tests/unit/utility/test_corestats.py index cf91a248..cf91a248 100644 --- a/wqflask/tests/utility/test_corestats.py +++ b/wqflask/tests/unit/utility/test_corestats.py diff --git a/wqflask/tests/utility/test_corr_result_helpers.py b/wqflask/tests/unit/utility/test_corr_result_helpers.py index e196fbdf..e196fbdf 100644 --- a/wqflask/tests/utility/test_corr_result_helpers.py +++ b/wqflask/tests/unit/utility/test_corr_result_helpers.py diff --git a/wqflask/tests/utility/test_formatting.py b/wqflask/tests/unit/utility/test_formatting.py index 9d3033d1..9d3033d1 100644 --- a/wqflask/tests/utility/test_formatting.py +++ b/wqflask/tests/unit/utility/test_formatting.py diff --git a/wqflask/tests/utility/test_hmac.py b/wqflask/tests/unit/utility/test_hmac.py index 4e3652f8..13d6261d 100644 --- a/wqflask/tests/utility/test_hmac.py +++ b/wqflask/tests/unit/utility/test_hmac.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- """Test hmac utility functions""" import unittest diff --git a/wqflask/tests/wqflask/marker_regression/__init__.py b/wqflask/tests/unit/wqflask/__init__.py index e69de29b..e69de29b 100644 --- a/wqflask/tests/wqflask/marker_regression/__init__.py +++ b/wqflask/tests/unit/wqflask/__init__.py diff --git a/wqflask/tests/wqflask/show_trait/__init__.py b/wqflask/tests/unit/wqflask/api/__init__.py index e69de29b..e69de29b 100644 --- a/wqflask/tests/wqflask/show_trait/__init__.py +++ b/wqflask/tests/unit/wqflask/api/__init__.py diff --git a/wqflask/tests/wqflask/api/test_gen_menu.py b/wqflask/tests/unit/wqflask/api/test_gen_menu.py index 84898bd1..84898bd1 100644 --- a/wqflask/tests/wqflask/api/test_gen_menu.py +++ b/wqflask/tests/unit/wqflask/api/test_gen_menu.py diff --git a/wqflask/tests/unit/wqflask/marker_regression/__init__.py b/wqflask/tests/unit/wqflask/marker_regression/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/wqflask/tests/unit/wqflask/marker_regression/__init__.py diff --git a/wqflask/tests/wqflask/marker_regression/test_display_mapping_results.py b/wqflask/tests/unit/wqflask/marker_regression/test_display_mapping_results.py index 8ae0f09f..8ae0f09f 100644 --- a/wqflask/tests/wqflask/marker_regression/test_display_mapping_results.py +++ b/wqflask/tests/unit/wqflask/marker_regression/test_display_mapping_results.py diff --git a/wqflask/tests/unit/wqflask/marker_regression/test_gemma_mapping.py b/wqflask/tests/unit/wqflask/marker_regression/test_gemma_mapping.py new file mode 100644 index 00000000..fe2569b8 --- /dev/null +++ b/wqflask/tests/unit/wqflask/marker_regression/test_gemma_mapping.py @@ -0,0 +1,181 @@ +# test for wqflask/marker_regression/gemma_mapping.py +import unittest +import random +from unittest import mock +from wqflask.marker_regression.gemma_mapping import run_gemma +from wqflask.marker_regression.gemma_mapping import gen_pheno_txt_file +from wqflask.marker_regression.gemma_mapping import gen_covariates_file +from wqflask.marker_regression.gemma_mapping import parse_loco_output + + +class AttributeSetter: + def __init__(self, obj): + for key, val in obj.items(): + setattr(self, key, val) + + +class MockGroup(AttributeSetter): + def get_samplelist(self): + return None + + +class TestGemmaMapping(unittest.TestCase): + + @mock.patch("wqflask.marker_regression.gemma_mapping.parse_loco_output") + def test_run_gemma_firstrun_set_false(self, mock_parse_loco): + """add tests for gemma function where first run is set to false""" + dataset = AttributeSetter( + {"group": AttributeSetter({"genofile": "genofile.geno"})}) + + output_file = "file1" + mock_parse_loco.return_value = [] + this_trait = AttributeSetter({"name": "t1"}) + + result = run_gemma(this_trait=this_trait, this_dataset=dataset, samples=[], vals=[ + ], covariates="", use_loco=True, first_run=False, output_files=output_file) + + expected_results = ([], "file1") + self.assertEqual(expected_results, result) + + @mock.patch("wqflask.marker_regression.gemma_mapping.webqtlConfig.GENERATED_IMAGE_DIR", "/home/user/img") + @mock.patch("wqflask.marker_regression.gemma_mapping.GEMMAOPTS", "-debug") + @mock.patch("wqflask.marker_regression.gemma_mapping.GEMMA_WRAPPER_COMMAND", "ghc") + @mock.patch("wqflask.marker_regression.gemma_mapping.TEMPDIR", "/home/user/data/") + @mock.patch("wqflask.marker_regression.gemma_mapping.parse_loco_output") + @mock.patch("wqflask.marker_regression.gemma_mapping.flat_files") + @mock.patch("wqflask.marker_regression.gemma_mapping.gen_covariates_file") + @mock.patch("wqflask.marker_regression.run_mapping.random.choice") + @mock.patch("wqflask.marker_regression.gemma_mapping.os") + @mock.patch("wqflask.marker_regression.gemma_mapping.gen_pheno_txt_file") + def test_run_gemma_firstrun_set_true(self, mock_gen_pheno_txt, mock_os, mock_choice, mock_gen_covar, mock_flat_files,mock_parse_loco): + """add tests for run_gemma where first run is set to true""" + this_chromosomes={} + for i in range(1, 5): + this_chromosomes[f'CH{i}']=(AttributeSetter({"name": f"CH{i}"})) + chromosomes = AttributeSetter({"chromosomes": this_chromosomes}) + + dataset_group = MockGroup( + {"name": "GP1", "genofile": "file_geno"}) + dataset = AttributeSetter({"group": dataset_group, "name": "dataset1_name", + "species": AttributeSetter({"chromosomes": chromosomes})}) + trait = AttributeSetter({"name": "trait1"}) + samples = [] + mock_gen_pheno_txt.return_value = None + mock_os.path.isfile.return_value = True + mock_gen_covar.return_value = None + mock_choice.return_value = "R" + mock_flat_files.return_value = "/home/genotype/bimbam" + mock_parse_loco.return_value = [] + results = run_gemma(this_trait=trait, this_dataset=dataset, samples=[ + ], vals=[], covariates="", use_loco=True) + self.assertEqual(mock_os.system.call_count,2) + mock_gen_pheno_txt.assert_called_once() + mock_parse_loco.assert_called_once_with(dataset, "GP1_GWA_RRRRRR",True) + mock_os.path.isfile.assert_called_once_with( + ('/home/user/imgfile_output.assoc.txt')) + self.assertEqual(mock_flat_files.call_count, 4) + self.assertEqual(results, ([], "GP1_GWA_RRRRRR")) + + @mock.patch("wqflask.marker_regression.gemma_mapping.TEMPDIR", "/home/user/data") + def test_gen_pheno_txt_file(self): + """add tests for generating pheno txt file""" + with mock.patch("builtins.open", mock.mock_open())as mock_open: + gen_pheno_txt_file(this_dataset={}, genofile_name="", vals=[ + "x", "w", "q", "we", "R"], trait_filename="fitr.re") + mock_open.assert_called_once_with( + '/home/user/data/gn2/fitr.re.txt', 'w') + filehandler = mock_open() + values = ["x", "w", "q", "we", "R"] + write_calls = [mock.call('NA\n'), mock.call('w\n'), mock.call( + 'q\n'), mock.call('we\n'), mock.call('R\n')] + + filehandler.write.assert_has_calls(write_calls) + + @mock.patch("wqflask.marker_regression.gemma_mapping.flat_files") + @mock.patch("wqflask.marker_regression.gemma_mapping.create_trait") + @mock.patch("wqflask.marker_regression.gemma_mapping.create_dataset") + def test_gen_covariates_file(self, create_dataset, create_trait, flat_files): + """add tests for generating covariates files""" + covariates = "X1:X2,Y1:Y2,M1:M3,V1:V2" + samplelist = ["X1", "X2", "X3", "X4"] + create_dataset_side_effect = [] + create_trait_side_effect = [] + + for i in range(4): + create_dataset_side_effect.append(AttributeSetter({"name": f'name_{i}'})) + create_trait_side_effect.append( + AttributeSetter({"data": [f'data_{i}']})) + + create_dataset.side_effect = create_trait_side_effect + create_trait.side_effect = create_trait_side_effect + + group = MockGroup({"name": "group_X", "samplelist": samplelist}) + this_dataset = AttributeSetter({"group": group}) + flat_files.return_value = "Home/Genenetwork" + + with mock.patch("builtins.open", mock.mock_open())as mock_open: + gen_covariates_file(this_dataset=this_dataset, covariates=covariates, + samples=["x1", "x2", "X3"]) + + create_dataset.assert_has_calls( + [mock.call('X2'), mock.call('Y2'), mock.call('M3'), mock.call('V2')]) + mock_calls = [] + trait_names = ["X1", "Y1", "M1", "V1"] + + for i, trait in enumerate(create_trait_side_effect): + mock_calls.append( + mock.call(dataset=trait, name=trait_names[i], cellid=None)) + + create_trait.assert_has_calls(mock_calls) + + flat_files.assert_called_once_with('mapping') + mock_open.assert_called_once_with( + 'Home/Genenetwork/group_X_covariates.txt', 'w') + filehandler = mock_open() + filehandler.write.assert_has_calls([mock.call( + '-9\t'), mock.call('-9\t'), mock.call('-9\t'), mock.call('-9\t'), mock.call('\n')]) + + @mock.patch("wqflask.marker_regression.gemma_mapping.TEMPDIR", "/home/tmp") + @mock.patch("wqflask.marker_regression.gemma_mapping.os") + @mock.patch("wqflask.marker_regression.gemma_mapping.json") + def test_parse_loco_outputfile_found(self, mock_json, mock_os): + """add tests for parse loco output file found""" + mock_json.load.return_value = { + "files": [["file_name", "user", "~/file1"], + ["file_name", "user", "~/file2"]] + } + return_file="""X/Y\tM1\t28.457155\tQ\tE\tA\tMMB\t23.3\tW\t0.9\t0.85\t +chr4\tM2\t12\tQ\tE\tMMB\tR\t24\tW\t0.87\t0.5 +Y\tM4\t12\tQ\tE\tMMB\tR\t11.6\tW\t0.21\t0.7 +X\tM5\t12\tQ\tE\tMMB\tR\t21.1\tW\t0.65\t0.6""" + + return_file_2 = """chr\tother\t21322\tQ\tE\tA\tP\tMMB\tCDE\t0.5\t0.4""" + mock_os.path.isfile.return_value = True + file_to_write = """{"files":["file_1","file_2"]}""" + with mock.patch("builtins.open") as mock_open: + + handles = (mock.mock_open(read_data="gwas").return_value, mock.mock_open( + read_data=return_file).return_value, mock.mock_open(read_data=return_file_2).return_value) + mock_open.side_effect = handles + results = parse_loco_output( + this_dataset={}, gwa_output_filename=".xw/") + expected_results= [ + {'name': 'M1', 'chr': 'X/Y', 'Mb': 2.8457155e-05, 'p_value': 0.85, 'additive': 23.3, 'lod_score': 0.07058107428570727}, + {'name': 'M2', 'chr': 4, 'Mb': 1.2e-05, 'p_value': 0.5, 'additive': 24.0, 'lod_score': 0.3010299956639812}, + {'name': 'M4', 'chr': 'Y', 'Mb': 1.2e-05, 'p_value': 0.7, 'additive': 11.6, 'lod_score': 0.1549019599857432}, + {'name': 'M5', 'chr': 'X', 'Mb': 1.2e-05, 'p_value': 0.6, 'additive': 21.1, 'lod_score': 0.22184874961635637}] + + self.assertEqual(expected_results, results) + + @mock.patch("wqflask.marker_regression.gemma_mapping.TEMPDIR", "/home/tmp") + @mock.patch("wqflask.marker_regression.gemma_mapping.os") + def test_parse_loco_outputfile_not_found(self, mock_os): + """add tests for parse loco output where output file not found""" + + mock_os.path.isfile.return_value = False + file_to_write = """{"files":["file_1","file_2"]}""" + + with mock.patch("builtins.open", mock.mock_open(read_data=file_to_write)) as mock_open: + results = parse_loco_output( + this_dataset={}, gwa_output_filename=".xw/") + self.assertEqual(results, []) diff --git a/wqflask/tests/unit/wqflask/marker_regression/test_plink_mapping.py b/wqflask/tests/unit/wqflask/marker_regression/test_plink_mapping.py new file mode 100644 index 00000000..5eec93f1 --- /dev/null +++ b/wqflask/tests/unit/wqflask/marker_regression/test_plink_mapping.py @@ -0,0 +1,85 @@ +# test for wqflask/marker_regression/plink_mapping.py +import unittest +from unittest import mock +from wqflask.marker_regression.plink_mapping import build_line_list +from wqflask.marker_regression.plink_mapping import get_samples_from_ped_file +from wqflask.marker_regression.plink_mapping import flat_files +from wqflask.marker_regression.plink_mapping import gen_pheno_txt_file_plink +from wqflask.marker_regression.plink_mapping import parse_plink_output + + +class AttributeSetter: + def __init__(self, obj): + for key, val in obj.items(): + setattr(self, key, val) +class TestPlinkMapping(unittest.TestCase): + + + def test_build_line_list(self): + """test for building line list""" + line_1 = "this is line one test" + irregular_line = " this is an, irregular line " + exp_line1 = ["this", "is", "line", "one", "test"] + + results = build_line_list(irregular_line) + self.assertEqual(exp_line1, build_line_list(line_1)) + self.assertEqual([], build_line_list()) + self.assertEqual(["this", "is", "an,", "irregular", "line"], results) + + @mock.patch("wqflask.marker_regression.plink_mapping.flat_files") + def test_get_samples_from_ped_file(self, mock_flat_files): + """test for getting samples from ped file""" + dataset = AttributeSetter({"group": AttributeSetter({"name": "n_1"})}) + file_sample = """Expected_1\tline test +Expected_2\there + Expected_3\tthree""" + mock_flat_files.return_value = "/home/user/" + with mock.patch("builtins.open", mock.mock_open(read_data=file_sample)) as mock_open: + results = get_samples_from_ped_file(dataset) + mock_flat_files.assert_called_once_with("mapping") + mock_open.assert_called_once_with("/home/user/n_1.ped", "r") + self.assertEqual( + ["Expected_1", "Expected_2", "Expected_3"], results) + + @mock.patch("wqflask.marker_regression.plink_mapping.TMPDIR", "/home/user/data/") + @mock.patch("wqflask.marker_regression.plink_mapping.get_samples_from_ped_file") + def test_gen_pheno_txt_file_plink(self, mock_samples): + """test for getting gen_pheno txt file""" + mock_samples.return_value = ["Expected_1", "Expected_2", "Expected_3"] + + trait = AttributeSetter({"name": "TX"}) + dataset = AttributeSetter({"group": AttributeSetter({"name": "n_1"})}) + vals = ["value=K1", "value=K2", "value=K3"] + with mock.patch("builtins.open", mock.mock_open()) as mock_open: + results = gen_pheno_txt_file_plink(this_trait=trait, dataset=dataset, + vals=vals, pheno_filename="ph_file") + mock_open.assert_called_once_with( + "/home/user/data/ph_file.txt", "wb") + filehandler = mock_open() + calls_expected = [mock.call('FID\tIID\tTX\n'), + mock.call('Expected_1\tExpected_1\tK1\nExpected_2\tExpected_2\tK2\nExpected_3\tExpected_3\tK3\n')] + + filehandler.write.assert_has_calls(calls_expected) + + filehandler.close.assert_called_once() + + @mock.patch("wqflask.marker_regression.plink_mapping.TMPDIR", "/home/user/data/") + @mock.patch("wqflask.marker_regression.plink_mapping.build_line_list") + def test_parse_plink_output(self, mock_line_list): + """test for parsing plink output""" + chromosomes = [0, 34, 110, 89, 123, 23, 2] + species = AttributeSetter( + {"name": "S1", "chromosomes": AttributeSetter({"chromosomes": chromosomes})}) + + fake_file = """0 AACCAT T98.6 0.89\n2 AATA B45 0.3\n121 ACG B56.4 NA""" + + mock_line_list.side_effect = [["0", "AACCAT", "T98.6", "0.89"], [ + "2", "AATA", "B45", "0.3"], ["121", "ACG", "B56.4", "NA"]] + with mock.patch("builtins.open", mock.mock_open(read_data=fake_file)) as mock_open: + parse_results = parse_plink_output( + output_filename="P1_file", species=species) + mock_open.assert_called_once_with( + "/home/user/data/P1_file.qassoc", "rb") + expected = (2, {'AACCAT': 0.89, 'AATA': 0.3}) + + self.assertEqual(parse_results, expected) diff --git a/wqflask/tests/unit/wqflask/marker_regression/test_qtlreaper_mapping.py b/wqflask/tests/unit/wqflask/marker_regression/test_qtlreaper_mapping.py new file mode 100644 index 00000000..b47f877a --- /dev/null +++ b/wqflask/tests/unit/wqflask/marker_regression/test_qtlreaper_mapping.py @@ -0,0 +1,21 @@ +import unittest +from unittest import mock +from wqflask.marker_regression.qtlreaper_mapping import gen_pheno_txt_file + +#issues some methods in genofile object are not defined +#modify samples should equal to vals +class TestQtlReaperMapping(unittest.TestCase): + @mock.patch("wqflask.marker_regression.qtlreaper_mapping.TEMPDIR", "/home/user/data") + def test_gen_pheno_txt_file(self): + vals=["V1","x","V4","V3","x"] + samples=["S1","S2","S3","S4","S5"] + trait_filename="trait_file" + with mock.patch("builtins.open", mock.mock_open())as mock_open: + gen_pheno_txt_file(samples=samples,vals=vals,trait_filename=trait_filename) + mock_open.assert_called_once_with("/home/user/data/gn2/trait_file.txt","w") + filehandler=mock_open() + write_calls= [mock.call('Trait\t'),mock.call('S1\tS3\tS4\n'),mock.call('T1\t'),mock.call('V1\tV4\tV3')] + + filehandler.write.assert_has_calls(write_calls) + + diff --git a/wqflask/tests/unit/wqflask/marker_regression/test_rqtl_mapping.py b/wqflask/tests/unit/wqflask/marker_regression/test_rqtl_mapping.py new file mode 100644 index 00000000..c585f1df --- /dev/null +++ b/wqflask/tests/unit/wqflask/marker_regression/test_rqtl_mapping.py @@ -0,0 +1,48 @@ +import unittest +from unittest import mock +from wqflask import app +from wqflask.marker_regression.rqtl_mapping import get_trait_data_type +from wqflask.marker_regression.rqtl_mapping import sanitize_rqtl_phenotype +from wqflask.marker_regression.rqtl_mapping import sanitize_rqtl_names + +class TestRqtlMapping(unittest.TestCase): + + def setUp(self): + self.app_context=app.app_context() + self.app_context.push() + + def tearDown(self): + self.app_context.pop() + + + @mock.patch("wqflask.marker_regression.rqtl_mapping.g") + @mock.patch("wqflask.marker_regression.rqtl_mapping.logger") + def test_get_trait_data(self,mock_logger,mock_db): + """test for getting trait data_type return True""" + query_value="""SELECT value FROM TraitMetadata WHERE type='trait_data_type'""" + mock_db.db.execute.return_value.fetchone.return_value=["""{"type":"trait_data_type","name":"T1","traid_id":"fer434f"}"""] + results=get_trait_data_type("traid_id") + mock_db.db.execute.assert_called_with(query_value) + self.assertEqual(results,"fer434f") + + def test_sanitize_rqtl_phenotype(self): + """test for sanitizing rqtl phenotype""" + vals=['f',"x","r","x","x"] + results=sanitize_rqtl_phenotype(vals) + expected_phenotype_string='c(f,NA,r,NA,NA)' + + self.assertEqual(results,expected_phenotype_string) + + def test_sanitize_rqtl_names(self): + """test for sanitzing rqtl names""" + vals=['f',"x","r","x","x"] + expected_sanitized_name="c('f',NA,'r',NA,NA)" + results=sanitize_rqtl_names(vals) + self.assertEqual(expected_sanitized_name,results) + + + + + + + diff --git a/wqflask/tests/unit/wqflask/marker_regression/test_run_mapping.py b/wqflask/tests/unit/wqflask/marker_regression/test_run_mapping.py new file mode 100644 index 00000000..4129cc0c --- /dev/null +++ b/wqflask/tests/unit/wqflask/marker_regression/test_run_mapping.py @@ -0,0 +1,284 @@ +import unittest +import datetime +from unittest import mock + +from wqflask.marker_regression.run_mapping import get_genofile_samplelist +from wqflask.marker_regression.run_mapping import geno_db_exists +from wqflask.marker_regression.run_mapping import write_input_for_browser +from wqflask.marker_regression.run_mapping import export_mapping_results +from wqflask.marker_regression.run_mapping import trim_markers_for_figure +from wqflask.marker_regression.run_mapping import get_perm_strata +from wqflask.marker_regression.run_mapping import get_chr_lengths + + +class AttributeSetter: + def __init__(self, obj): + for k, v in obj.items(): + setattr(self, k, v) + + +class MockGroup(AttributeSetter): + + def get_genofiles(self): + return [{"location": "~/genofiles/g1_file", "sample_list": ["S1", "S2", "S3", "S4"]}] + + +class TestRunMapping(unittest.TestCase): + def setUp(self): + + self.group = MockGroup( + {"genofile": "~/genofiles/g1_file", "name": "GP1_", "species": "Human"}) + chromosomes = { + "3": AttributeSetter({ + "name": "C1", + "length": "0.04" + }), + "4": AttributeSetter({ + "name": "C2", + "length": "0.03" + }), + "5": AttributeSetter({ + "name": "C4", + "length": "0.01" + }) + } + self.dataset = AttributeSetter( + {"fullname": "dataser_1", "group": self.group, "type": "ProbeSet"}) + + self.chromosomes = AttributeSetter({"chromosomes": chromosomes}) + self.trait = AttributeSetter( + {"symbol": "IGFI", "chr": "X1", "mb": 123313}) + + def tearDown(self): + self.dataset = AttributeSetter( + {"group": {"location": "~/genofiles/g1_file"}}) + + def test_get_genofile_samplelist(self): + + results_1 = get_genofile_samplelist(self.dataset) + self.assertEqual(results_1, ["S1", "S2", "S3", "S4"]) + self.group.genofile = "~/genofiles/g2_file" + result_2 = get_genofile_samplelist(self.dataset) + self.assertEqual(result_2, []) + + @mock.patch("wqflask.marker_regression.run_mapping.data_set") + def test_if_geno_db_exists(self, mock_data_set): + mock_data_set.create_dataset.side_effect = [ + AttributeSetter({}), Exception()] + results_no_error = geno_db_exists(self.dataset) + results_with_error = geno_db_exists(self.dataset) + + self.assertEqual(mock_data_set.create_dataset.call_count, 2) + self.assertEqual(results_with_error, "False") + self.assertEqual(results_no_error, "True") + + def test_trim_markers_for_figure(self): + + markers = [{ + "name": "MK1", + "chr": "C1", + "cM": "1", + "Mb": "12000", + "genotypes": [], + "dominance":"TT", + "additive":"VA", + "lod_score":0.5 + }, + { + "name": "MK2", + "chr": "C2", + "cM": "15", + "Mb": "10000", + "genotypes": [], + "lod_score":0.7 + }, + { + "name": "MK1", + "chr": "C3", + "cM": "45", + "Mb": "1", + "genotypes": [], + "dominance":"Tt", + "additive":"VE", + "lod_score":1 + }] + + marker_2 = [{ + "name": "MK1", + "chr": "C1", + "cM": "1", + "Mb": "12000", + "genotypes": [], + "dominance":"TT", + "additive":"VA", + "p_wald":4.6 + }] + results = trim_markers_for_figure(markers) + result_2 = trim_markers_for_figure(marker_2) + expected = [ + { + "name": "MK1", + "chr": "C1", + "cM": "1", + "Mb": "12000", + "genotypes": [], + "dominance":"TT", + "additive":"VA", + "lod_score":0.5 + }, + { + "name": "MK1", + "chr": "C3", + "cM": "45", + "Mb": "1", + "genotypes": [], + "dominance":"Tt", + "additive":"VE", + "lod_score":1 + } + + ] + self.assertEqual(results, expected) + self.assertEqual(result_2, marker_2) + + def test_export_mapping_results(self): + """test for exporting mapping results""" + datetime_mock = mock.Mock(wraps=datetime.datetime) + datetime_mock.now.return_value = datetime.datetime( + 2019, 9, 1, 10, 12, 12) + + markers = [{ + "name": "MK1", + "chr": "C1", + "cM": "1", + "Mb": "12000", + "genotypes": [], + "dominance":"TT", + "additive":"VA", + "lod_score":3 + }, + { + "name": "MK2", + "chr": "C2", + "cM": "15", + "Mb": "10000", + "genotypes": [], + "lod_score":7 + }, + { + "name": "MK1", + "chr": "C3", + "cM": "45", + "Mb": "1", + "genotypes": [], + "dominance":"Tt", + "additive":"VE", + "lod_score":7 + }] + + with mock.patch("builtins.open", mock.mock_open()) as mock_open: + + with mock.patch("wqflask.marker_regression.run_mapping.datetime.datetime", new=datetime_mock): + export_mapping_results(dataset=self.dataset, trait=self.trait, markers=markers, + results_path="~/results", mapping_scale="physic", score_type="-log(p)") + + write_calls = [ + mock.call('Time/Date: 09/01/19 / 10:12:12\n'), + mock.call('Population: Human GP1_\n'), mock.call( + 'Data Set: dataser_1\n'), + mock.call('Gene Symbol: IGFI\n'), mock.call( + 'Location: X1 @ 123313 Mb\n'), + mock.call('\n'), mock.call('Name,Chr,'), + mock.call('Mb,-log(p)'), mock.call('Cm,-log(p)'), + mock.call(',Additive'), mock.call(',Dominance'), + mock.call('\n'), mock.call('MK1,C1,'), + mock.call('12000,'), mock.call('1,'), + mock.call('3'), mock.call(',VA'), + mock.call(',TT'), mock.call('\n'), + mock.call('MK2,C2,'), mock.call('10000,'), + mock.call('15,'), mock.call('7'), + mock.call('\n'), mock.call('MK1,C3,'), + mock.call('1,'), mock.call('45,'), + mock.call('7'), mock.call(',VE'), + mock.call(',Tt') + + ] + mock_open.assert_called_once_with("~/results", "w+") + filehandler = mock_open() + filehandler.write.assert_has_calls(write_calls) + + @mock.patch("wqflask.marker_regression.run_mapping.random.choice") + def test_write_input_for_browser(self, mock_choice): + """test for writing input for browser""" + mock_choice.side_effect = ["F", "i", "l", "e", "s", "x"] + with mock.patch("builtins.open", mock.mock_open()) as mock_open: + expected = ['GP1__Filesx_GWAS', 'GP1__Filesx_ANNOT'] + + results = write_input_for_browser( + this_dataset=self.dataset, gwas_results={}, annotations={}) + self.assertEqual(results, expected) + + def test_get_perm_strata(self): + categorical_vars = ["C1", "C2", "W1"] + used_samples = ["S1", "S2"] + sample_list = AttributeSetter({"sample_attribute_values": { + "S1": { + "C1": "c1_value", + "C2": "c2_value", + "W1": "w1_value" + + }, + "S2": { + "W1": "w2_value", + "W2": "w2_value" + + }, + "S3": { + + "C1": "c1_value", + "C2": "c2_value" + + }, + + }}) + + results = get_perm_strata(this_trait={}, sample_list=sample_list, + categorical_vars=categorical_vars, used_samples=used_samples) + self.assertEqual(results, [2, 1]) + + def test_get_chr_length(self): + """test for getting chromosome length""" + chromosomes = AttributeSetter({"chromosomes": self.chromosomes}) + dataset = AttributeSetter({"species": chromosomes}) + results = get_chr_lengths( + mapping_scale="physic", mapping_method="reaper", dataset=dataset, qtl_results=[]) + chr_lengths = [] + for key, chromo in self.chromosomes.chromosomes.items(): + chr_lengths.append({"chr": chromo.name, "size": chromo.length}) + + self.assertEqual(chr_lengths, results) + + qtl_results = [{ + "chr": "16", + "cM": "0.2" + }, + { + "chr": "12", + "cM": "0.5" + }, + { + "chr": "18", + "cM": "0.1" + }, + { + "chr": "22", + "cM": "0.4" + }, + ] + + result_with_other_mapping_scale = get_chr_lengths( + mapping_scale="other", mapping_method="reaper", dataset=dataset, qtl_results=qtl_results) + expected_value = [{'chr': '1', 'size': '0'}, { + 'chr': '16', 'size': '500000.0'}, {'chr': '18', 'size': '400000.0'}] + + self.assertEqual(result_with_other_mapping_scale, expected_value) diff --git a/wqflask/tests/unit/wqflask/show_trait/__init__.py b/wqflask/tests/unit/wqflask/show_trait/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/wqflask/tests/unit/wqflask/show_trait/__init__.py diff --git a/wqflask/tests/wqflask/show_trait/test_export_trait_data.py b/wqflask/tests/unit/wqflask/show_trait/test_export_trait_data.py index 41761944..41761944 100644 --- a/wqflask/tests/wqflask/show_trait/test_export_trait_data.py +++ b/wqflask/tests/unit/wqflask/show_trait/test_export_trait_data.py diff --git a/wqflask/tests/wqflask/test_collect.py b/wqflask/tests/unit/wqflask/test_collect.py index 9a36132d..9a36132d 100644 --- a/wqflask/tests/wqflask/test_collect.py +++ b/wqflask/tests/unit/wqflask/test_collect.py diff --git a/wqflask/tests/unit/wqflask/test_markdown_routes.py b/wqflask/tests/unit/wqflask/test_markdown_routes.py new file mode 100644 index 00000000..90e0f17c --- /dev/null +++ b/wqflask/tests/unit/wqflask/test_markdown_routes.py @@ -0,0 +1,54 @@ +"""Test functions in markdown utils""" + +import unittest +from unittest import mock + +from dataclasses import dataclass +from wqflask.markdown_routes import render_markdown + + +@dataclass +class MockRequests404: + status_code: int = 404 + + +@dataclass +class MockRequests200: + status_code: int = 200 + content: str = b""" +# Glossary +This is some content + +## Sub-heading +This is another sub-heading""" + + +class TestMarkdownRoutesFunctions(unittest.TestCase): + """Test cases for functions in markdown_routes""" + + @mock.patch('wqflask.markdown_routes.requests.get') + def test_render_markdown_when_fetching_locally(self, requests_mock): + requests_mock.return_value = MockRequests404() + markdown_content = render_markdown("general/glossary/glossary.md") + requests_mock.assert_called_with( + "https://raw.githubusercontent.com" + "/genenetwork/gn-docs/" + "master/general/" + "glossary/glossary.md") + self.assertRegexpMatches(markdown_content, + "Content for general/glossary/glossary.md not available.") + + @mock.patch('wqflask.markdown_routes.requests.get') + def test_render_markdown_when_fetching_remotely(self, requests_mock): + requests_mock.return_value = MockRequests200() + markdown_content = render_markdown("general/glossary/glossary.md") + requests_mock.assert_called_with( + "https://raw.githubusercontent.com" + "/genenetwork/gn-docs/" + "master/general/" + "glossary/glossary.md") + self.assertEqual("""<h1>Glossary</h1> +<p>This is some content</p> +<h2>Sub-heading</h2> +<p>This is another sub-heading</p>""", + markdown_content) diff --git a/wqflask/tests/wqflask/test_pbkdf2.py b/wqflask/tests/unit/wqflask/test_pbkdf2.py index a33fbd4f..a33fbd4f 100644 --- a/wqflask/tests/wqflask/test_pbkdf2.py +++ b/wqflask/tests/unit/wqflask/test_pbkdf2.py diff --git a/wqflask/tests/wqflask/test_user_login.py b/wqflask/tests/unit/wqflask/test_user_login.py index 61cd9ab9..61cd9ab9 100644 --- a/wqflask/tests/wqflask/test_user_login.py +++ b/wqflask/tests/unit/wqflask/test_user_login.py diff --git a/wqflask/tests/wqflask/test_user_session.py b/wqflask/tests/unit/wqflask/test_user_session.py index ebb0334a..ebb0334a 100644 --- a/wqflask/tests/wqflask/test_user_session.py +++ b/wqflask/tests/unit/wqflask/test_user_session.py diff --git a/wqflask/tests/wqflask/show_trait/testSampleList.py b/wqflask/tests/wqflask/show_trait/testSampleList.py new file mode 100644 index 00000000..34c51e3e --- /dev/null +++ b/wqflask/tests/wqflask/show_trait/testSampleList.py @@ -0,0 +1,16 @@ +import unittest +import re +from unittest import mock +from wqflask.show_trait.SampleList import natural_sort + + +class TestSampleList(unittest.TestCase): + def test_natural_sort(self): + "Sort the list into natural alphanumeric order." + + characters_list = ["z", "f", "q", "s", "t", "a", "g"] + names_list = ["temp1", "publish", "Sample", "Dataset"] + sorted_list_a=natural_sort(characters_list) + sorted_list_b=natural_sort(names_list) + self.assertEqual(sorted_list_a, ["a", "f", "g", "q", "s", "t", "z"]) + self.assertEqual(sorted_list_b,["Dataset", "Sample", "publish", "temp1"]) diff --git a/wqflask/tests/wqflask/show_trait/test_show_trait.py b/wqflask/tests/wqflask/show_trait/test_show_trait.py new file mode 100644 index 00000000..8c866874 --- /dev/null +++ b/wqflask/tests/wqflask/show_trait/test_show_trait.py @@ -0,0 +1,278 @@ +"""test for wqflask/show_trait/test_show_trait.py""" +import unittest +from unittest import mock +from wqflask import app +from wqflask.show_trait.show_trait import check_if_attr_exists +from wqflask.show_trait.show_trait import get_ncbi_summary +from wqflask.show_trait.show_trait import has_num_cases +from wqflask.show_trait.show_trait import get_table_widths +from wqflask.show_trait.show_trait import get_categorical_variables +from wqflask.show_trait.show_trait import get_trait_units +from wqflask.show_trait.show_trait import get_nearest_marker +from wqflask.show_trait.show_trait import get_genotype_scales +from wqflask.show_trait.show_trait import requests +from wqflask.show_trait.show_trait import get_scales_from_genofile + + +class TraitObject: + def __init__(self, obj): + for key, value in obj.items(): + setattr(self, key, value) + + +class TestTraits(unittest.TestCase): + def setUp(self): + self.app_context = app.app_context() + self.app_context.push() + + def tearDown(self): + self.app_context.pop() + + def test_check_if_attr_exists_truthy(self): + """"test if attributes exists with true return""" + trait_obj = TraitObject({"id_type": "id"}) + trait_obj2 = TraitObject({"sample_name": ['samp1']}) + results = check_if_attr_exists(trait_obj, "id_type") + result2 = check_if_attr_exists(trait_obj2, "sample_name") + self.assertIsInstance(trait_obj, TraitObject) + self.assertTrue(results) + self.assertTrue(result2) + + def test_check_if_attr_exists_empty_attr(self): + """test if attributes exists with false return""" + trait_obj = TraitObject({"sample": ""}) + trait_obj2 = TraitObject({"group": None}) + result = check_if_attr_exists(trait_obj, "sample") + result2 = check_if_attr_exists(trait_obj, "group") + self.assertFalse(result) + self.assertFalse(result2) + + def test_check_if_attr_exists_falsey(self): + """check if attribute exists with empty attributes""" + trait_obj = TraitObject({}) + results = check_if_attr_exists(trait_obj, "any") + self.assertFalse(results) + + @mock.patch("wqflask.show_trait.show_trait.requests.get") + @mock.patch("wqflask.show_trait.show_trait.check_if_attr_exists") + def test_get_ncbi_summary_request_success(self, mock_exists, mock_get): + """test for getting ncbi summary with + successful request""" + trait = TraitObject({"geneid": "id"}) + mock_exists.return_value = True + content_json_string = """{ + "result":{ + "id":{ + "summary":"this is a summary of the geneid" + } + } + } + """ + get_return_obj = TraitObject({"content": content_json_string}) + mock_get.return_value = get_return_obj + results = get_ncbi_summary(trait) + mock_exists.assert_called_once() + mock_get.assert_called_once_with(f"http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=gene&id={trait.geneid}&retmode=json") + + self.assertEqual(results, "this is a summary of the geneid") + + @mock.patch("wqflask.show_trait.show_trait.requests.get") + @mock.patch("wqflask.show_trait.show_trait.check_if_attr_exists") + def test_get_ncbi_summary_request_fail(self, mock_exists, mock_get_fail): + """test for getting ncbi summary with request fail""" + trait = TraitObject({"geneid": "id"}) + mock_exists.return_value = True + mock_get_fail.side_effect = Exception("an error occurred") + content_json_string = """{ + "result":{ + "id":{ + "summary":"this is a summary of the geneid" + } + } + } + """ + results = get_ncbi_summary(trait) + self.assertEqual(results, None) + + def test_hash_num_cases_is_probeset(self): + """test for hash num_cases with dataset.type set to Probeset""" + create_dataset = TraitObject({"type": "ProbeSet"}) + create_trait = TraitObject({"dataset": create_dataset}) + self.assertFalse(has_num_cases(create_trait)) + + def test_hash_num_cases_no_probeset(self): + """test for hash num cases with dataset.type not Probeset""" + create_dataset = TraitObject({"type": "Temp"}) + construct_data = { + "nm1": TraitObject({"num_cases": False}), + "nm2": TraitObject({"num_cases": True}), + "nm3": TraitObject({"num_cases": False}) + } + construct_data2 = { + "nm1": TraitObject({"num_cases": False}), + "nm2": TraitObject({"num_cases": False}), + "nm3": TraitObject({"num_cases": False}) + } + create_trait = TraitObject( + {"dataset": create_dataset, "data": construct_data}) + create_trait2 = TraitObject( + {"dataset": create_dataset, "data": construct_data2}) + + results = has_num_cases(create_trait) + self.assertTrue(has_num_cases(create_trait)) + self.assertFalse(has_num_cases(create_trait2)) + + def test_get_table_widths(self): + """test for getting table widths""" + sample_groups = [TraitObject({'se_exists': True, "attributes": ["attr1", "attr2", "attr3"]} + ), TraitObject( + {"se_exists": False, "attributes": ["at1", "at2"] + })] + + results_with_numcase = get_table_widths(sample_groups, True) + result_no_numcase = get_table_widths(sample_groups, False) + + results_one_sample = get_table_widths( + [TraitObject({"se_exists": True, "attributes": []})], True) + expected_with_numcase = (450, "750px") + expected_no_numcase = (450, "670px") + expected_one_sample = (250, "540px") + self.assertEqual(results_with_numcase, expected_with_numcase) + self.assertEqual(result_no_numcase, expected_no_numcase) + self.assertEqual(results_one_sample, + expected_one_sample) + + def test_get_categorical_variables_no_sample_attributes(self): + """test for getting categorical variable names with no samples""" + trait = TraitObject({}) + sample_list = TraitObject({"se_exists": True, "attributes": []}) + self.assertEqual(get_categorical_variables(trait, sample_list), []) + + def test_get_categorical_variables_with_sample_attributes(self): + """test for getting categorical variable names with no samples""" + this_trait = TraitObject({"data": { + "Gene1": TraitObject({"extra_attributes": {"ex1": "ex1value"}}), + "Gene2": TraitObject({"extra_attributes": {"ex2": "ex2value"}}), + "Gene3": TraitObject({"extra_attributes": {"ex3": "ex3value"}}) + }}) + sample_list = TraitObject({"attributes": { + "sample_attribute_1": TraitObject({"name": "ex1"}), + "sample_attribute_2": TraitObject({"name": "ex2"}), + "sample_attribute_3": TraitObject({"name": "ex3"}), + "sample_attribute_4": TraitObject({"name": "not_in_extra_attributes"}) + }}) + results = get_categorical_variables(this_trait, sample_list) + self.assertEqual( + ["ex1", "ex2", "ex3", "not_in_extra_attributes"], results) + + def test_get_trait_units(self): + """test for getting trait units""" + trait = TraitObject( + {"description_fmt": "[this is a description] another test [N/A]"}) + trait_no_unit_type = TraitObject({"description_fmt": ""}) + results = get_trait_units(trait) + results_no_unit = get_trait_units(trait_no_unit_type) + self.assertEqual(results, "this is a descriptionN/A") + self.assertEqual(results_no_unit, "Value") + + @mock.patch("wqflask.show_trait.show_trait.g") + def test_get_nearest_marker(self, mock_db): + """test for getting nearest marker with non-empty db""" + + mock_db.db.execute.return_value.fetchall.return_value = [ + ["Geno1", "Geno2"], ["Geno3"]] + + trait = TraitObject({"locus_chr": "test_chr", "locus_mb": "test_mb"}) + group_name = TraitObject({"name": "group_name"}) + this_db = TraitObject({"group": group_name}) + results_with_item_db = get_nearest_marker(trait, this_db) + called_with_value = """SELECT Geno.Name + FROM Geno, GenoXRef, GenoFreeze + WHERE Geno.Chr = 'test_chr' AND + GenoXRef.GenoId = Geno.Id AND + GenoFreeze.Id = GenoXRef.GenoFreezeId AND + GenoFreeze.Name = 'group_nameGeno' + ORDER BY ABS( Geno.Mb - test_mb) LIMIT 1""" + + mock_db.db.execute.assert_called_with(called_with_value) + + self.assertEqual(results_with_item_db, "Geno1") + + @mock.patch("wqflask.show_trait.show_trait.g") + def test_get_nearest_marker_empty_db(self, mock_db): + """test for getting nearest marker with empty db""" + mock_db.db.execute.return_value.fetchall.return_value = [] + trait = TraitObject({"locus_chr": "test_chr", "locus_mb": "test_mb"}) + group_name = TraitObject({"name": "group_name"}) + this_db = TraitObject({"group": group_name}) + results_empty_db = get_nearest_marker(trait, this_db) + mock_db.db.execute.assert_called_once() + self.assertEqual(results_empty_db, "") + + @mock.patch("wqflask.show_trait.show_trait.get_scales_from_genofile") + def test_get_genotype_scales_with_genofile_is_list(self, mock_get_scales): + """test for getting genotype scales with genofile as list """ + # where genofile is instance of list + genofiles_list = [{"filename": "file1", "location": "~/data/files/f1"}, + {"filename": "file2", "location": "~/data/files/f2"}, + {"filename": "file3", "location": "~/data/files/f3"}] + + mock_get_scales.side_effect = [[["morgan", "cM"]], + [["morgan", "cM"]], + [["physic", "Mb"]]] + + results = get_genotype_scales(genofiles_list) + expected_results = { + "~/data/files/f1": [["morgan", "cM"]], + "~/data/files/f2": [["morgan", "cM"]], + "~/data/files/f3": [["physic", "Mb"]] + } + + multiple_calls = [mock.call('~/data/files/f1'), mock.call('~/data/files/f2'), + mock.call('~/data/files/f3')] + mock_get_scales.assert_has_calls(multiple_calls) + self.assertEqual(results, expected_results) + + @mock.patch("wqflask.show_trait.show_trait.get_scales_from_genofile") + def test_genotype_scales_with_genofile_other(self, mock_get_scales): + """test for getting genotype scales with genofile as a string""" + file_location = "~/another_file_location" + mock_get_scales.return_value = [["physic", "Mb"]] + expected_results = {f"{file_location}": [["physic", "Mb"]]} + self.assertEqual(get_genotype_scales(file_location), expected_results) + mock_get_scales.assert_called_once_with(file_location) + + + @mock.patch("wqflask.show_trait.show_trait.locate_ignore_error") + def test_get_scales_from_genofile_found(self, mock_ignore_location): + """"add test for get scales from genofile where file is found""" + mock_ignore_location.return_value = True + geno_file = """ + #sample line with no @scales:other\n + #sample line @scales and :separated by semicolon\n + This attempts to check whether\n + """ + + geno_file_string = "@line start with @ and has @scale:morgan" + + file_location = "~/data/file.geno" + + mock_open_geno_file = mock.mock_open(read_data=geno_file) + with mock.patch("builtins.open", mock_open_geno_file): + results = get_scales_from_genofile(file_location) + self.assertEqual(results, [["morgan", "cM"]]) + + mock_open_string = mock.mock_open(read_data=geno_file_string) + + with mock.patch("builtins.open", mock_open_string): + result2 = get_scales_from_genofile(file_location) + self.assertEqual([['morgan', 'cM']], result2) + + @mock.patch("wqflask.show_trait.show_trait.locate_ignore_error") + def test_get_scales_from_genofile_not_found(self, mock_location_ignore): + mock_location_ignore.return_value = False + + expected_results = [["physic", "Mb"]] + results = get_scales_from_genofile("~/data/file") + mock_location_ignore.assert_called_once_with("~/data/file", "genotype") + self.assertEqual(results, expected_results) diff --git a/wqflask/utility/redis_tools.py b/wqflask/utility/redis_tools.py index d855a7fa..236cc755 100644 --- a/wqflask/utility/redis_tools.py +++ b/wqflask/utility/redis_tools.py @@ -25,6 +25,10 @@ def is_redis_available(): return True +def load_json_from_redis(item_list, column_value): + return json.loads(item_list[str.encode(column_value)]) + + def get_user_id(column_name, column_value): user_list = Redis.hgetall("users") key_list = [] @@ -46,7 +50,7 @@ def get_user_by_unique_column(column_name, column_value): if column_name in user_ob and user_ob[column_name] == column_value: item_details = user_ob else: - item_details = json.loads(user_list[column_value]) + item_details = load_json_from_redis(user_list, column_value) return item_details @@ -70,7 +74,7 @@ def get_users_like_unique_column(column_name, column_value): if column_value in user_ob[column_name]: matched_users.append(user_ob) else: - matched_users.append(json.loads(user_list[column_value])) + matched_users.append(load_json_from_redis(user_list, column_value)) return matched_users @@ -199,7 +203,7 @@ def get_groups_like_unique_column(column_name, column_value): if column_value in group_info[column_name]: matched_groups.append(group_info) else: - matched_groups.append(json.loads(group_list[column_value])) + matched_groups.append(load_json_from_redis(group_list, column_value)) return matched_groups diff --git a/wqflask/utility/tools.py b/wqflask/utility/tools.py index 68ef0f04..65df59c3 100644 --- a/wqflask/utility/tools.py +++ b/wqflask/utility/tools.py @@ -267,7 +267,7 @@ ORCID_CLIENT_SECRET = get_setting('ORCID_CLIENT_SECRET') ORCID_AUTH_URL = None if ORCID_CLIENT_ID != 'UNKNOWN' and ORCID_CLIENT_SECRET: ORCID_AUTH_URL = "https://orcid.org/oauth/authorize?response_type=code&scope=/authenticate&show_login=true&client_id=" + \ - ORCID_CLIENT_ID+"&client_secret="+ORCID_CLIENT_SECRET + ORCID_CLIENT_ID+"&client_secret="+ORCID_CLIENT_SECRET + "&redirect_uri=" + GN2_BRANCH_URL + "n/login/orcid_oauth2" ORCID_TOKEN_URL = get_setting('ORCID_TOKEN_URL') ELASTICSEARCH_HOST = get_setting('ELASTICSEARCH_HOST') diff --git a/wqflask/wqflask/__init__.py b/wqflask/wqflask/__init__.py index 274c3d82..0564cfa7 100644 --- a/wqflask/wqflask/__init__.py +++ b/wqflask/wqflask/__init__.py @@ -1,14 +1,17 @@ -import sys +"""Entry point for flask app""" +# pylint: disable=C0413,E0611 import time import jinja2 from flask import g from flask import Flask from utility import formatting - -import logging -logger = logging.getLogger(__name__ ) -logging.basicConfig(level=logging.INFO) +from wqflask.markdown_routes import glossary_blueprint +from wqflask.markdown_routes import references_blueprint +from wqflask.markdown_routes import links_blueprint +from wqflask.markdown_routes import policies_blueprint +from wqflask.markdown_routes import environments_blueprint +from wqflask.markdown_routes import facilities_blueprint app = Flask(__name__) @@ -19,11 +22,18 @@ app.jinja_env.globals.update( undefined=jinja2.StrictUndefined, numify=formatting.numify) +# Registering blueprints +app.register_blueprint(glossary_blueprint, url_prefix="/glossary") +app.register_blueprint(references_blueprint, url_prefix="/references") +app.register_blueprint(links_blueprint, url_prefix="/links") +app.register_blueprint(policies_blueprint, url_prefix="/policies") +app.register_blueprint(environments_blueprint, url_prefix="/environments") +app.register_blueprint(facilities_blueprint, url_prefix="/facilities") @app.before_request def before_request(): - g.request_start_time = time.time() - g.request_time = lambda: "%.5fs" % (time.time() - g.request_start_time) + g.request_start_time = time.time() + g.request_time = lambda: "%.5fs" % (time.time() - g.request_start_time) from wqflask.api import router @@ -39,4 +49,4 @@ from wqflask import db_info from wqflask import user_login from wqflask import user_session -import wqflask.views +import wqflask.views diff --git a/wqflask/wqflask/correlation/corr_scatter_plot.py b/wqflask/wqflask/correlation/corr_scatter_plot.py index 6ab8c3d8..c87776bb 100644 --- a/wqflask/wqflask/correlation/corr_scatter_plot.py +++ b/wqflask/wqflask/correlation/corr_scatter_plot.py @@ -29,6 +29,8 @@ class CorrScatterPlot(object): self.trait_2 = create_trait(name=params['trait_2'], dataset=self.dataset_2) #self.trait_3 = create_trait(name=params['trait_3'], dataset=self.dataset_3) + self.method = params['method'] + primary_samples = self.dataset_1.group.samplelist if self.dataset_1.group.parlist != None: primary_samples += self.dataset_1.group.parlist diff --git a/wqflask/wqflask/correlation/show_corr_results.py b/wqflask/wqflask/correlation/show_corr_results.py index e710bacd..298a3559 100644 --- a/wqflask/wqflask/correlation/show_corr_results.py +++ b/wqflask/wqflask/correlation/show_corr_results.py @@ -71,7 +71,6 @@ class CorrelationResults(object): assert('corr_sample_method' in start_vars) assert('corr_samples_group' in start_vars) assert('corr_dataset' in start_vars) - #assert('min_expr' in start_vars) assert('corr_return_results' in start_vars) if 'loc_chr' in start_vars: assert('min_loc_mb' in start_vars) @@ -184,6 +183,8 @@ class CorrelationResults(object): for _trait_counter, trait in enumerate(list(self.correlation_data.keys())[:self.return_number]): trait_object = create_trait(dataset=self.target_dataset, name=trait, get_qtl_info=True, get_sample_info=False) + if not trait_object: + continue if self.target_dataset.type == "ProbeSet" or self.target_dataset.type == "Geno": #ZS: Convert trait chromosome to an int for the location range option @@ -195,15 +196,15 @@ class CorrelationResults(object): if (float(self.correlation_data[trait][0]) >= self.p_range_lower and float(self.correlation_data[trait][0]) <= self.p_range_upper): - if self.target_dataset.type == "ProbeSet" or self.target_dataset.type == "Geno": - + if (self.target_dataset.type == "ProbeSet" or self.target_dataset.type == "Publish") and bool(trait_object.mean): if (self.min_expr != None) and (float(trait_object.mean) < self.min_expr): continue - elif range_chr_as_int != None and (chr_as_int != range_chr_as_int): + if self.target_dataset.type == "ProbeSet" or self.target_dataset.type == "Geno": + if range_chr_as_int != None and (chr_as_int != range_chr_as_int): continue - elif (self.min_location_mb != None) and (float(trait_object.mb) < float(self.min_location_mb)): + if (self.min_location_mb != None) and (float(trait_object.mb) < float(self.min_location_mb)): continue - elif (self.max_location_mb != None) and (float(trait_object.mb) > float(self.max_location_mb)): + if (self.max_location_mb != None) and (float(trait_object.mb) > float(self.max_location_mb)): continue (trait_object.sample_r, @@ -434,15 +435,15 @@ class CorrelationResults(object): self.this_trait_vals, target_vals, num_overlap = corr_result_helpers.normalize_values(self.this_trait_vals, target_vals) - #ZS: 2015 could add biweight correlation, see http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3465711/ - if self.corr_method == 'bicor': - sample_r, sample_p = do_bicor(self.this_trait_vals, target_vals) - elif self.corr_method == 'pearson': - sample_r, sample_p = scipy.stats.pearsonr(self.this_trait_vals, target_vals) - else: - sample_r, sample_p = scipy.stats.spearmanr(self.this_trait_vals, target_vals) - if num_overlap > 5: + #ZS: 2015 could add biweight correlation, see http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3465711/ + if self.corr_method == 'bicor': + sample_r, sample_p = do_bicor(self.this_trait_vals, target_vals) + elif self.corr_method == 'pearson': + sample_r, sample_p = scipy.stats.pearsonr(self.this_trait_vals, target_vals) + else: + sample_r, sample_p = scipy.stats.spearmanr(self.this_trait_vals, target_vals) + if numpy.isnan(sample_r): pass else: @@ -482,75 +483,85 @@ def generate_corr_json(corr_results, this_trait, dataset, target_dataset, for_ap if trait.view == False: continue results_dict = {} - if not for_api: - results_dict['checkbox'] = "<INPUT TYPE='checkbox' NAME='searchResult' class='checkbox trait_checkbox' style='padding-right: 0px;' VALUE='" + hmac.hmac_creation('{}:{}'.format(trait.name, trait.dataset.name)) + "'>" - results_dict['index'] = i + 1 - results_dict['trait_id'] = "<a href='/show_trait?trait_id="+str(trait.name)+"&dataset="+str(dataset.name)+"'>"+str(trait.name)+"</a>" - else: - results_dict['trait_id'] = trait.name + results_dict['index'] = i + 1 + results_dict['trait_id'] = trait.name + results_dict['dataset'] = trait.dataset.name + results_dict['hmac'] = hmac.data_hmac('{}:{}'.format(trait.name, trait.dataset.name)) if target_dataset.type == "ProbeSet": results_dict['symbol'] = trait.symbol - results_dict['description'] = trait.description_display + results_dict['description'] = "N/A" results_dict['location'] = trait.location_repr - results_dict['mean'] = float(trait.mean) - if trait.LRS_score_repr != "N/A": - results_dict['lrs_score'] = "%.1f" % float(trait.LRS_score_repr) - else: - results_dict['lrs_score'] = "N/A" + results_dict['mean'] = "N/A" + results_dict['additive'] = "N/A" + if bool(trait.description_display): + results_dict['description'] = trait.description_display + if bool(trait.mean): + results_dict['mean'] = f"{float(trait.mean):.3f}" + try: + results_dict['lod_score'] = f"{float(trait.LRS_score_repr) / 4.61:.1f}" + except: + results_dict['lod_score'] = "N/A" results_dict['lrs_location'] = trait.LRS_location_repr - if trait.additive != "": - results_dict['additive'] = "%0.3f" % float(trait.additive) - else: - results_dict['additive'] = "N/A" - if for_api: - results_dict['sample_r'] = "%0.3f" % float(trait.sample_r) - else: - results_dict['sample_r'] = "<a target='_blank' href='corr_scatter_plot?dataset_1=" + str(dataset.name) + "&dataset_2=" + str(trait.dataset.name) + "&trait_1=" + str(this_trait.name) + "&trait_2=" + str(trait.name) + "'>" + "%0.3f" % float(trait.sample_r) + "</a>" + if bool(trait.additive): + results_dict['additive'] = f"{float(trait.additive):.3f}" + results_dict['sample_r'] = f"{float(trait.sample_r):.3f}" results_dict['num_overlap'] = trait.num_overlap - results_dict['sample_p'] = "%0.3e" % float(trait.sample_p) - if trait.lit_corr == "" or trait.lit_corr == 0: - results_dict['lit_corr'] = "--" - else: - results_dict['lit_corr'] = "%0.3f" % float(trait.lit_corr) - if trait.tissue_corr == "" or trait.tissue_corr == 0: - results_dict['tissue_corr'] = "--" - else: - results_dict['tissue_corr'] = "%0.3f" % float(trait.tissue_corr) + results_dict['sample_p'] = f"{float(trait.sample_p):.3e}" + results_dict['lit_corr'] = "--" + results_dict['tissue_corr'] = "--" + results_dict['tissue_pvalue'] = "--" + if bool(trait.lit_corr): + results_dict['lit_corr'] = f"{float(trait.lit_corr):.3f}" + if bool(trait.tissue_corr): + results_dict['tissue_corr'] = f"{float(trait.tissue_corr):.3f}" + results_dict['tissue_pvalue'] = f"{float(trait.tissue_pvalue):.3e}" elif target_dataset.type == "Publish": - results_dict['description'] = trait.description_display - results_dict['authors'] = trait.authors - if trait.pubmed_id: + results_dict['abbreviation_display'] = "N/A" + results_dict['description'] = "N/A" + results_dict['mean'] = "N/A" + results_dict['authors_display'] = "N/A" + results_dict['additive'] = "N/A" + if for_api: + results_dict['pubmed_id'] = "N/A" + results_dict['year'] = "N/A" + else: + results_dict['pubmed_link'] = "N/A" + results_dict['pubmed_text'] = "N/A" + + if bool(trait.abbreviation): + results_dict['abbreviation_display'] = trait.abbreviation + if bool(trait.description_display): + results_dict['description'] = trait.description_display + if bool(trait.mean): + results_dict['mean'] = f"{float(trait.mean):.3f}" + if bool(trait.authors): + authors_list = trait.authors.split(',') + if len(authors_list) > 6: + results_dict['authors_display'] = ", ".join(authors_list[:6]) + ", et al." + else: + results_dict['authors_display'] = trait.authors + if bool(trait.pubmed_id): if for_api: results_dict['pubmed_id'] = trait.pubmed_id results_dict['year'] = trait.pubmed_text else: - results_dict['pubmed'] = "<a href='" + trait.pubmed_link + "'> " + trait.pubmed_text + "</a>" - else: - if for_api: - results_dict['pubmed_id'] = "N/A" - results_dict['year'] = "N/A" - else: - results_dict['pubmed'] = "N/A" - results_dict['lrs_score'] = trait.LRS_score_repr + results_dict['pubmed_link'] = trait.pubmed_link + results_dict['pubmed_text'] = trait.pubmed_text + try: + results_dict['lod_score'] = f"{float(trait.LRS_score_repr) / 4.61:.1f}" + except: + results_dict['lod_score'] = "N/A" results_dict['lrs_location'] = trait.LRS_location_repr - if trait.additive != "": - results_dict['additive'] = "%0.3f" % float(trait.additive) - else: - results_dict['additive'] = "N/A" - if for_api: - results_dict['sample_r'] = "%0.3f" % trait.sample_r - else: - results_dict['sample_r'] = "<a target='_blank' href='corr_scatter_plot?dataset_1=" + str(dataset.name) + "&dataset_2=" + str(trait.dataset.name) + "&trait_1=" + str(this_trait.name) + "&trait_2=" + str(trait.name) + "'>" + "%0.3f" % trait.sample_r + "</a>" + if bool(trait.additive): + results_dict['additive'] = f"{float(trait.additive):.3f}" + results_dict['sample_r'] = f"{float(trait.sample_r):.3f}" results_dict['num_overlap'] = trait.num_overlap - results_dict['sample_p'] = "%0.3e" % float(trait.sample_p) + results_dict['sample_p'] = f"{float(trait.sample_p):.3e}" else: - results_dict['lrs_location'] = trait.LRS_location_repr - if for_api: - results_dict['sample_r'] = "%0.3f" % trait.sample_r - else: - results_dict['sample_r'] = "<a target='_blank' href='corr_scatter_plot?dataset_1=" + str(dataset.name) + "&dataset_2=" + str(trait.dataset.name) + "&trait_1=" + str(this_trait.name) + "&trait_2=" + str(trait.name) + "'>" + "%0.3f" % float(trait.sample_r) + "</a>" + results_dict['location'] = trait.location_repr + results_dict['sample_r'] = f"{float(trait.sample_r):.3f}" results_dict['num_overlap'] = trait.num_overlap - results_dict['sample_p'] = "%0.3e" % float(trait.sample_p) + results_dict['sample_p'] = f"{float(trait.sample_p):.3e}" results_list.append(results_dict) @@ -596,6 +607,7 @@ def get_header_fields(data_type, corr_method): 'Record', 'Abbreviation', 'Description', + 'Mean', 'Authors', 'Year', 'Sample rho', @@ -609,6 +621,7 @@ def get_header_fields(data_type, corr_method): 'Record', 'Abbreviation', 'Description', + 'Mean', 'Authors', 'Year', 'Sample r', @@ -635,3 +648,4 @@ def get_header_fields(data_type, corr_method): 'Sample p(r)'] return header_fields + diff --git a/wqflask/wqflask/correlation_matrix/show_corr_matrix.py b/wqflask/wqflask/correlation_matrix/show_corr_matrix.py index a394f548..a77877d2 100644 --- a/wqflask/wqflask/correlation_matrix/show_corr_matrix.py +++ b/wqflask/wqflask/correlation_matrix/show_corr_matrix.py @@ -20,24 +20,23 @@ import datetime import math +import random +import string + import numpy as np import scipy import rpy2.robjects as robjects -import utility.webqtlUtil # this is for parallel computing only. -import utility.logger +from rpy2.robjects.packages import importr from base import data_set +from base.webqtlConfig import GENERATED_TEXT_DIR from functools import reduce from functools import cmp_to_key -from rpy2.robjects.packages import importr - from utility import webqtlUtil from utility import helper_functions from utility import corr_result_helpers from utility.redis_tools import get_redis_conn -logger = utility.logger.getLogger(__name__) - Redis = get_redis_conn() THIRTY_DAYS = 60 * 60 * 24 * 30 @@ -55,11 +54,7 @@ class CorrelationMatrix(object): self.do_PCA = True this_group = self.trait_list[0][1].group.name #ZS: Getting initial group name before verifying all traits are in the same group in the following loop for trait_db in self.trait_list: - if trait_db[1].group.name != this_group: - self.insufficient_shared_samples = True - break - else: - this_group = trait_db[1].group.name + this_group = trait_db[1].group.name this_trait = trait_db[0] self.traits.append(this_trait) this_sample_data = this_trait.data @@ -68,119 +63,117 @@ class CorrelationMatrix(object): if sample not in self.all_sample_list: self.all_sample_list.append(sample) - if self.insufficient_shared_samples: - pass - else: - self.sample_data = [] - for trait_db in self.trait_list: - this_trait = trait_db[0] - this_sample_data = this_trait.data + self.sample_data = [] + for trait_db in self.trait_list: + this_trait = trait_db[0] + this_sample_data = this_trait.data + + this_trait_vals = [] + for sample in self.all_sample_list: + if sample in this_sample_data: + this_trait_vals.append(this_sample_data[sample].value) + else: + this_trait_vals.append('') + self.sample_data.append(this_trait_vals) - this_trait_vals = [] - for sample in self.all_sample_list: - if sample in this_sample_data: - this_trait_vals.append(this_sample_data[sample].value) - else: - this_trait_vals.append('') - self.sample_data.append(this_trait_vals) - - if len(this_trait_vals) < len(self.trait_list): #Shouldn't do PCA if there are more traits than observations/samples - self.do_PCA = False - - self.lowest_overlap = 8 #ZS: Variable set to the lowest overlapping samples in order to notify user, or 8, whichever is lower (since 8 is when we want to display warning) - - self.corr_results = [] - self.pca_corr_results = [] - self.shared_samples_list = self.all_sample_list - for trait_db in self.trait_list: - this_trait = trait_db[0] - this_db = trait_db[1] - - this_db_samples = this_db.group.all_samples_ordered() - this_sample_data = this_trait.data - - corr_result_row = [] - pca_corr_result_row = [] - is_spearman = False #ZS: To determine if it's above or below the diagonal - for target in self.trait_list: - target_trait = target[0] - target_db = target[1] - target_samples = target_db.group.all_samples_ordered() - target_sample_data = target_trait.data - - this_trait_vals = [] - target_vals = [] - for index, sample in enumerate(target_samples): - if (sample in this_sample_data) and (sample in target_sample_data): - sample_value = this_sample_data[sample].value - target_sample_value = target_sample_data[sample].value - this_trait_vals.append(sample_value) - target_vals.append(target_sample_value) - else: - if sample in self.shared_samples_list: - self.shared_samples_list.remove(sample) - - this_trait_vals, target_vals, num_overlap = corr_result_helpers.normalize_values(this_trait_vals, target_vals) - - if num_overlap < self.lowest_overlap: - self.lowest_overlap = num_overlap - if num_overlap < 2: - corr_result_row.append([target_trait, 0, num_overlap]) - pca_corr_result_row.append(0) - else: - pearson_r, pearson_p = scipy.stats.pearsonr(this_trait_vals, target_vals) - if is_spearman == False: - sample_r, sample_p = pearson_r, pearson_p - if sample_r == 1: - is_spearman = True - else: - sample_r, sample_p = scipy.stats.spearmanr(this_trait_vals, target_vals) - - corr_result_row.append([target_trait, sample_r, num_overlap]) - pca_corr_result_row.append(pearson_r) - - self.corr_results.append(corr_result_row) - self.pca_corr_results.append(pca_corr_result_row) - - self.trait_data_array = [] - for trait_db in self.trait_list: - this_trait = trait_db[0] - this_db = trait_db[1] - this_db_samples = this_db.group.all_samples_ordered() - this_sample_data = this_trait.data + if len(this_trait_vals) < len(self.trait_list): #Shouldn't do PCA if there are more traits than observations/samples + self.do_PCA = False + + self.lowest_overlap = 8 #ZS: Variable set to the lowest overlapping samples in order to notify user, or 8, whichever is lower (since 8 is when we want to display warning) + + self.corr_results = [] + self.pca_corr_results = [] + self.shared_samples_list = self.all_sample_list + for trait_db in self.trait_list: + this_trait = trait_db[0] + this_db = trait_db[1] + + this_db_samples = this_db.group.all_samples_ordered() + this_sample_data = this_trait.data + + corr_result_row = [] + pca_corr_result_row = [] + is_spearman = False #ZS: To determine if it's above or below the diagonal + for target in self.trait_list: + target_trait = target[0] + target_db = target[1] + target_samples = target_db.group.all_samples_ordered() + target_sample_data = target_trait.data this_trait_vals = [] - for index, sample in enumerate(this_db_samples): - if (sample in this_sample_data) and (sample in self.shared_samples_list): + target_vals = [] + for index, sample in enumerate(target_samples): + if (sample in this_sample_data) and (sample in target_sample_data): sample_value = this_sample_data[sample].value + target_sample_value = target_sample_data[sample].value this_trait_vals.append(sample_value) - self.trait_data_array.append(this_trait_vals) + target_vals.append(target_sample_value) + else: + if sample in self.shared_samples_list: + self.shared_samples_list.remove(sample) - corr_result_eigen = np.linalg.eig(np.array(self.pca_corr_results)) - corr_eigen_value, corr_eigen_vectors = sortEigenVectors(corr_result_eigen) + this_trait_vals, target_vals, num_overlap = corr_result_helpers.normalize_values(this_trait_vals, target_vals) - groups = [] - for sample in self.all_sample_list: - groups.append(1) - - try: - if self.do_PCA == True: - self.pca_works = "True" - self.pca_trait_ids = [] - pca = self.calculate_pca(list(range(len(self.traits))), corr_eigen_value, corr_eigen_vectors) - self.loadings_array = self.process_loadings() + if num_overlap < self.lowest_overlap: + self.lowest_overlap = num_overlap + if num_overlap < 2: + corr_result_row.append([target_trait, 0, num_overlap]) + pca_corr_result_row.append(0) else: - self.pca_works = "False" - except: + pearson_r, pearson_p = scipy.stats.pearsonr(this_trait_vals, target_vals) + if is_spearman == False: + sample_r, sample_p = pearson_r, pearson_p + if sample_r == 1: + is_spearman = True + else: + sample_r, sample_p = scipy.stats.spearmanr(this_trait_vals, target_vals) + + corr_result_row.append([target_trait, sample_r, num_overlap]) + pca_corr_result_row.append(pearson_r) + + self.corr_results.append(corr_result_row) + self.pca_corr_results.append(pca_corr_result_row) + + self.export_filename, self.export_filepath = export_corr_matrix(self.corr_results) + + self.trait_data_array = [] + for trait_db in self.trait_list: + this_trait = trait_db[0] + this_db = trait_db[1] + this_db_samples = this_db.group.all_samples_ordered() + this_sample_data = this_trait.data + + this_trait_vals = [] + for index, sample in enumerate(this_db_samples): + if (sample in this_sample_data) and (sample in self.shared_samples_list): + sample_value = this_sample_data[sample].value + this_trait_vals.append(sample_value) + self.trait_data_array.append(this_trait_vals) + + corr_result_eigen = np.linalg.eig(np.array(self.pca_corr_results)) + corr_eigen_value, corr_eigen_vectors = sortEigenVectors(corr_result_eigen) + + groups = [] + for sample in self.all_sample_list: + groups.append(1) + + try: + if self.do_PCA == True: + self.pca_works = "True" + self.pca_trait_ids = [] + pca = self.calculate_pca(list(range(len(self.traits))), corr_eigen_value, corr_eigen_vectors) + self.loadings_array = self.process_loadings() + else: self.pca_works = "False" + except: + self.pca_works = "False" - self.js_data = dict(traits = [trait.name for trait in self.traits], - groups = groups, - cols = list(range(len(self.traits))), - rows = list(range(len(self.traits))), - samples = self.all_sample_list, - sample_data = self.sample_data,) - # corr_results = [result[1] for result in result_row for result_row in self.corr_results]) + self.js_data = dict(traits = [trait.name for trait in self.traits], + groups = groups, + cols = list(range(len(self.traits))), + rows = list(range(len(self.traits))), + samples = self.all_sample_list, + sample_data = self.sample_data,) def calculate_pca(self, cols, corr_eigen_value, corr_eigen_vectors): base = importr('base') @@ -240,6 +233,36 @@ class CorrelationMatrix(object): loadings_array.append(loadings_row) return loadings_array +def export_corr_matrix(corr_results): + corr_matrix_filename = "corr_matrix_" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6)) + matrix_export_path = "{}{}.csv".format(GENERATED_TEXT_DIR, corr_matrix_filename) + with open(matrix_export_path, "w+") as output_file: + output_file.write("Time/Date: " + datetime.datetime.now().strftime("%x / %X") + "\n") + output_file.write("\n") + output_file.write("Correlation ") + for i, item in enumerate(corr_results[0]): + output_file.write("Trait" + str(i + 1) + ": " + str(item[0].dataset.name) + "::" + str(item[0].name) + "\t") + output_file.write("\n") + for i, row in enumerate(corr_results): + output_file.write("Trait" + str(i + 1) + ": " + str(row[0][0].dataset.name) + "::" + str(row[0][0].name) + "\t") + for item in row: + output_file.write(str(item[1]) + "\t") + output_file.write("\n") + + output_file.write("\n") + output_file.write("\n") + output_file.write("N ") + for i, item in enumerate(corr_results[0]): + output_file.write("Trait" + str(i) + ": " + str(item[0].dataset.name) + "::" + str(item[0].name) + "\t") + output_file.write("\n") + for i, row in enumerate(corr_results): + output_file.write("Trait" + str(i) + ": " + str(row[0][0].dataset.name) + "::" + str(row[0][0].name) + "\t") + for item in row: + output_file.write(str(item[2]) + "\t") + output_file.write("\n") + + return corr_matrix_filename, matrix_export_path + def zScore(trait_data_array): NN = len(trait_data_array[0]) if NN < 10: diff --git a/wqflask/wqflask/docs.py b/wqflask/wqflask/docs.py index d653c269..23fc3cad 100644 --- a/wqflask/wqflask/docs.py +++ b/wqflask/wqflask/docs.py @@ -19,8 +19,10 @@ class Docs(object): self.title = self.entry.capitalize() self.content = "" else: + self.title = result[0] - self.content = result[1] + self.content = result[1].decode("utf-8") + self.editable = "false" # ZS: Removing option to edit to see if text still gets vandalized diff --git a/wqflask/wqflask/export_traits.py b/wqflask/wqflask/export_traits.py index 3a886537..6fb760e0 100644 --- a/wqflask/wqflask/export_traits.py +++ b/wqflask/wqflask/export_traits.py @@ -44,7 +44,7 @@ def export_search_results_csv(targs): if targs['filter_term'] != "None": metadata.append(["Search Filter Terms: " + targs['filter_term']]) metadata.append(["Exported Row Number: " + str(len(table_rows))]) - metadata.append(["Funding for The GeneNetwork: NIAAA (U01AA13499, U24AA13513), NIDA, NIMH, and NIAAA (P20-DA21131), NCI MMHCC (U01CA105417), and NCRR (U01NR 105417)"]) + metadata.append(["Funding for The GeneNetwork: NIGMS (R01 GM123489, 2017-2021), NIDA (P30 DA044223, 2017-2022), NIA (R01AG043930, 2013-2018), NIAAA (U01 AA016662, U01 AA013499, U24 AA013513, U01 AA014425, 2006-2017), NIDA/NIMH/NIAAA (P20-DA 21131, 2001-2012), NCI MMHCC (U01CA105417), NCRR/BIRN (U24 RR021760)"]) metadata.append([]) trait_list = [] @@ -54,7 +54,7 @@ def export_search_results_csv(targs): trait_ob = retrieve_trait_info(trait_ob, trait_ob.dataset, get_qtl_info=True) trait_list.append(trait_ob) - table_headers = ['Species', 'Group', 'Dataset', 'Record ID', 'Symbol', 'Description', 'ProbeTarget', 'PubMed_ID', 'Chr', 'Mb', 'Alias', 'Gene_ID', 'Homologene_ID', 'UniGene_ID', 'Strand_Probe', 'Probe_set_specificity', 'Probe_set_BLAT_score', 'Probe_set_BLAT_Mb_start', 'Probe_set_BLAT_Mb_end', 'QTL_Chr', 'QTL_Mb', 'Locus_at_Peak', 'Max_LRS', 'P_value_of_MAX', 'Mean_Expression'] + table_headers = ['Index', 'URL', 'Species', 'Group', 'Dataset', 'Record ID', 'Symbol', 'Description', 'ProbeTarget', 'PubMed_ID', 'Chr', 'Mb', 'Alias', 'Gene_ID', 'Homologene_ID', 'UniGene_ID', 'Strand_Probe', 'Probe_set_specificity', 'Probe_set_BLAT_score', 'Probe_set_BLAT_Mb_start', 'Probe_set_BLAT_Mb_end', 'QTL_Chr', 'QTL_Mb', 'Locus_at_Peak', 'Max_LRS', 'P_value_of_MAX', 'Mean_Expression'] traits_by_group = sort_traits_by_group(trait_list) @@ -77,7 +77,7 @@ def export_search_results_csv(targs): csv_rows.append(full_headers) - for trait in group_traits: + for i, trait in enumerate(group_traits): if getattr(trait, "symbol", None): trait_symbol = getattr(trait, "symbol") elif getattr(trait, "abbreviation", None): @@ -85,6 +85,8 @@ def export_search_results_csv(targs): else: trait_symbol = "N/A" row_contents = [ + i + 1, + "https://genenetwork.org/show_trait?trait_id=" + str(trait.name) + "&dataset=" + str(trait.dataset.name), trait.dataset.group.species, trait.dataset.group.name, trait.dataset.name, diff --git a/wqflask/wqflask/markdown_routes.py b/wqflask/wqflask/markdown_routes.py new file mode 100644 index 00000000..ebf75807 --- /dev/null +++ b/wqflask/wqflask/markdown_routes.py @@ -0,0 +1,126 @@ +"""Markdown routes + +Render pages from github, or if they are unavailable, look for it else where +""" +import requests +import markdown +import os +import sys + +from bs4 import BeautifulSoup + +from flask import send_from_directory +from flask import Blueprint +from flask import render_template + +glossary_blueprint = Blueprint('glossary_blueprint', __name__) +references_blueprint = Blueprint("references_blueprint", __name__) +environments_blueprint = Blueprint("environments_blueprint", __name__) +links_blueprint = Blueprint("links_blueprint", __name__) +policies_blueprint = Blueprint("policies_blueprint", __name__) +facilities_blueprint = Blueprint("facilities_blueprint", __name__) + + +def render_markdown(file_name, is_remote_file=True): + """Try to fetch the file name from Github and if that fails, try to +look for it inside the file system """ + github_url = ("https://raw.githubusercontent.com/" + "genenetwork/gn-docs/master/") + + if not is_remote_file: + text = "" + with open(file_name, "r", encoding="utf-8") as input_file: + text = input_file.read() + return markdown.markdown(text, + extensions=['tables']) + + md_content = requests.get(f"{github_url}{file_name}") + + if md_content.status_code == 200: + return markdown.markdown(md_content.content.decode("utf-8"), + extensions=['tables']) + + return (f"\nContent for {file_name} not available. " + "Please check " + "(here to see where content exists)" + "[https://github.com/genenetwork/gn-docs]. " + "Please reach out to the gn2 team to have a look at this") + + +def get_file_from_python_search_path(pathname_suffix): + cands = [os.path.join(d, pathname_suffix) for d in sys.path] + try: + return list(filter(os.path.exists, cands))[0] + except IndexError: + return None + + +@glossary_blueprint.route('/') +def glossary(): + return render_template( + "glossary.html", + rendered_markdown=render_markdown("general/glossary/glossary.md")), 200 + + +@references_blueprint.route('/') +def references(): + return render_template( + "references.html", + rendered_markdown=render_markdown("general/references/references.md")), 200 + + +@environments_blueprint.route("/") +def environments(): + + md_file = get_file_from_python_search_path("wqflask/DEPENDENCIES.md") + svg_file = get_file_from_python_search_path( + "wqflask/dependency-graph.html") + svg_data = None + if svg_file: + with open(svg_file, 'r') as f: + svg_data = "".join( + BeautifulSoup(f.read(), + 'lxml').body.script.contents) + + if md_file is not None: + return ( + render_template("environment.html", + svg_data=svg_data, + rendered_markdown=render_markdown( + md_file, + is_remote_file=False)), + 200 + ) + # Fallback: Fetch file from server + return (render_template( + "environment.html", + svg_data=None, + rendered_markdown=render_markdown( + "general/environments/environments.md")), + 200) + + +@environments_blueprint.route('/svg-dependency-graph') +def svg_graph(): + directory, file_name, _ = get_file_from_python_search_path( + "wqflask/dependency-graph.svg").partition("dependency-graph.svg") + return send_from_directory(directory, file_name) + + +@links_blueprint.route("/") +def links(): + return render_template( + "links.html", + rendered_markdown=render_markdown("general/links/links.md")), 200 + + +@policies_blueprint.route("/") +def policies(): + return render_template( + "policies.html", + rendered_markdown=render_markdown("general/policies/policies.md")), 200 + + +@facilities_blueprint.route("/") +def facilities(): + return render_template("facilities.html", rendered_markdown=render_markdown("general/help/facilities.md")), 200 diff --git a/wqflask/wqflask/marker_regression/display_mapping_results.py b/wqflask/wqflask/marker_regression/display_mapping_results.py index 04d47624..08c2d750 100644 --- a/wqflask/wqflask/marker_regression/display_mapping_results.py +++ b/wqflask/wqflask/marker_regression/display_mapping_results.py @@ -74,6 +74,14 @@ DARKVIOLET = ImageColor.getrgb("darkviolet") MEDIUMPURPLE = ImageColor.getrgb("mediumpurple") # ---- END: Define common colours ---- # +# ZS: List of distinct colors for manhattan plot if user selects "varied" +COLOR_CODES = ["#FF0000", "#00FF00", "#0000FF", "#FFFF00", "#FF00FF", "#00FFFF", + "#000000", "#800000", "#008000", "#000080", "#808000", "#800080", + "#008080", "#808080", "#C00000", "#00C000", "#0000C0", "#C0C000", + "#C000C0", "#00C0C0", "#C0C0C0", "#400000", "#004000", "#000040"] + +DISTINCT_COLOR_LIST = [ImageColor.getrgb(color) for color in COLOR_CODES] + # ---- FONT FILES ---- # VERDANA_FILE = "./wqflask/static/fonts/verdana.ttf" VERDANA_BOLD_FILE = "./wqflask/static/fonts/verdanab.ttf" @@ -293,6 +301,12 @@ class DisplayMappingResults(object): self.plotScale = "physic" self.manhattan_plot = start_vars['manhattan_plot'] + if self.manhattan_plot: + self.color_scheme = "alternating" + if 'color_scheme' in start_vars: + self.color_scheme = start_vars['color_scheme'] + if self.color_scheme == "single": + self.manhattan_single_color = ImageColor.getrgb("#" + start_vars['manhattan_single_color']) if 'permCheck' in list(start_vars.keys()): self.permChecked = start_vars['permCheck'] @@ -1460,7 +1474,7 @@ class DisplayMappingResults(object): else: continue - smd.sort(lambda A, B: cmp(A.value, B.value)) + smd.sort(key = lambda A: A.value) smd.reverse() samplelist = list(self.genotype.prgy) @@ -2076,7 +2090,7 @@ class DisplayMappingResults(object): if self.lrsMax <= 0: #sliding scale if "lrs_value" in self.qtlresults[0]: LRS_LOD_Max = max([result['lrs_value'] for result in self.qtlresults]) - if self.LRS_LOD == "LOD" or self.LRS_LOD == "-log(p)": + if self.LRS_LOD == "LOD" or self.LRS_LOD == "-logP": LRS_LOD_Max = LRS_LOD_Max / self.LODFACTOR if self.permChecked and self.nperm > 0 and not self.multipleInterval: self.significant = min(self.significant / self.LODFACTOR, webqtlConfig.MAXLRS) @@ -2172,7 +2186,7 @@ class DisplayMappingResults(object): TEXT_X_DISPLACEMENT = -12 else: TEXT_X_DISPLACEMENT = -30 - if self.LRS_LOD == "-log(p)": + if self.LRS_LOD == "-logP": TEXT_Y_DISPLACEMENT = -242 else: TEXT_Y_DISPLACEMENT = -210 @@ -2397,7 +2411,7 @@ class DisplayMappingResults(object): if 'lrs_value' in qtlresult: - if self.LRS_LOD == "LOD" or self.LRS_LOD == "-log(p)": + if self.LRS_LOD == "LOD" or self.LRS_LOD == "-logP": if qtlresult['lrs_value'] > 460 or qtlresult['lrs_value']=='inf': #Yc = yZero - webqtlConfig.MAXLRS*LRSHeightThresh/(LRSAxisList[-1]*self.LODFACTOR) Yc = yZero - webqtlConfig.MAXLRS*LRSHeightThresh/(LRS_LOD_Max*self.LODFACTOR) @@ -2424,10 +2438,16 @@ class DisplayMappingResults(object): Yc = yZero - qtlresult['lod_score']*LRSHeightThresh/LRS_LOD_Max if self.manhattan_plot == True: - if self.selectedChr == -1 and (previous_chr_as_int % 2 == 1): - point_color = RED + if self.color_scheme == "single": + point_color = self.manhattan_single_color + elif self.color_scheme == "varied": + point_color = DISTINCT_COLOR_LIST[previous_chr_as_int] else: - point_color = BLUE + if self.selectedChr == -1 and (previous_chr_as_int % 2 == 1): + point_color = RED + else: + point_color = BLUE + im_drawer.text( text="5", xy=( diff --git a/wqflask/wqflask/marker_regression/gemma_mapping.py b/wqflask/wqflask/marker_regression/gemma_mapping.py index 68a8d5ba..ab3a7278 100644 --- a/wqflask/wqflask/marker_regression/gemma_mapping.py +++ b/wqflask/wqflask/marker_regression/gemma_mapping.py @@ -31,16 +31,12 @@ def run_gemma(this_trait, this_dataset, samples, vals, covariates, use_loco, maf gwa_output_filename = this_dataset.group.name + "_GWA_" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6)) this_chromosomes = this_dataset.species.chromosomes.chromosomes - chr_list_string = "" - for i in range(len(this_chromosomes)): - if i < (len(this_chromosomes) - 1): - chr_list_string += this_chromosomes[i+1].name + "," - else: - chr_list_string += this_chromosomes[i+1].name + this_chromosomes_name=[this_chromosomes[chromosome].name for chromosome in this_chromosomes] + + chr_list_string=",".join(this_chromosomes_name) if covariates != "": gen_covariates_file(this_dataset, covariates, samples) - if use_loco == "True": generate_k_command = GEMMA_WRAPPER_COMMAND + ' --json --loco ' + chr_list_string + ' -- ' + GEMMAOPTS + ' -g %s/%s_geno.txt -p %s/gn2/%s.txt -a %s/%s_snps.txt -gk > %s/gn2/%s.json' % (flat_files('genotype/bimbam'), genofile_name, @@ -50,7 +46,7 @@ def run_gemma(this_trait, this_dataset, samples, vals, covariates, use_loco, maf genofile_name, TEMPDIR, k_output_filename) - logger.debug("k_command:" + generate_k_command) + os.system(generate_k_command) gemma_command = GEMMA_WRAPPER_COMMAND + ' --json --loco --input %s/gn2/%s.json -- ' % (TEMPDIR, k_output_filename) + GEMMAOPTS + ' -g %s/%s_geno.txt -p %s/gn2/%s.txt' % (flat_files('genotype/bimbam'), @@ -58,7 +54,7 @@ def run_gemma(this_trait, this_dataset, samples, vals, covariates, use_loco, maf TEMPDIR, trait_filename) if covariates != "": - gemma_command += ' -c %s/%s_covariates.txt -a %s/%s_snps.txt -lmm 2 -maf %s > %s/gn2/%s.json' % (flat_files('mapping'), + gemma_command += ' -c %s/%s_covariates.txt -a %s/%s_snps.txt -lmm 9 -maf %s > %s/gn2/%s.json' % (flat_files('mapping'), this_dataset.group.name, flat_files('genotype/bimbam'), genofile_name, @@ -66,7 +62,7 @@ def run_gemma(this_trait, this_dataset, samples, vals, covariates, use_loco, maf TEMPDIR, gwa_output_filename) else: - gemma_command += ' -a %s/%s_snps.txt -lmm 2 -maf %s > %s/gn2/%s.json' % (flat_files('genotype/bimbam'), + gemma_command += ' -a %s/%s_snps.txt -lmm 9 -maf %s > %s/gn2/%s.json' % (flat_files('genotype/bimbam'), genofile_name, maf, TEMPDIR, @@ -82,10 +78,9 @@ def run_gemma(this_trait, this_dataset, samples, vals, covariates, use_loco, maf TEMPDIR, k_output_filename) - logger.debug("k_command:" + generate_k_command) os.system(generate_k_command) - gemma_command = GEMMA_WRAPPER_COMMAND + ' --json --input %s/gn2/%s.json -- ' % (TEMPDIR, k_output_filename) + GEMMAOPTS + ' -a %s/%s_snps.txt -lmm 2 -g %s/%s_geno.txt -p %s/gn2/%s.txt' % (flat_files('genotype/bimbam'), + gemma_command = GEMMA_WRAPPER_COMMAND + ' --json --input %s/gn2/%s.json -- ' % (TEMPDIR, k_output_filename) + GEMMAOPTS + ' -a %s/%s_snps.txt -lmm 9 -g %s/%s_geno.txt -p %s/gn2/%s.txt' % (flat_files('genotype/bimbam'), genofile_name, flat_files('genotype/bimbam'), genofile_name, @@ -98,8 +93,6 @@ def run_gemma(this_trait, this_dataset, samples, vals, covariates, use_loco, maf else: gemma_command += ' > %s/gn2/%s.json' % (TEMPDIR, gwa_output_filename) - - logger.debug("gemma_command:" + gemma_command) os.system(gemma_command) else: gwa_output_filename = output_files @@ -108,7 +101,7 @@ def run_gemma(this_trait, this_dataset, samples, vals, covariates, use_loco, maf marker_obs = parse_loco_output(this_dataset, gwa_output_filename) return marker_obs, gwa_output_filename else: - marker_obs = parse_loco_output(this_dataset, gwa_output_filename) + marker_obs = parse_loco_output(this_dataset, gwa_output_filename, use_loco) return marker_obs, gwa_output_filename def gen_pheno_txt_file(this_dataset, genofile_name, vals, trait_filename): @@ -152,41 +145,7 @@ def gen_covariates_file(this_dataset, covariates, samples): outfile.write(str(this_covariate[i]) + "\t") outfile.write("\n") -def parse_gemma_output(genofile_name): - included_markers = [] - p_values = [] - marker_obs = [] - - with open("{}{}_output.assoc.txt".format(webqtlConfig.GENERATED_IMAGE_DIR, genofile_name)) as output_file: - for line in output_file: - if line.startswith("chr\t"): - continue - else: - marker = {} - marker['name'] = line.split("\t")[1] - if line.split("\t")[0] != "X" and line.split("\t")[0] != "X/Y": - if "chr" in line.split("\t")[0]: - marker['chr'] = int(line.split("\t")[0][3:]) - else: - marker['chr'] = int(line.split("\t")[0]) - else: - marker['chr'] = line.split("\t")[0] - marker['Mb'] = float(line.split("\t")[2]) / 1000000 - marker['p_value'] = float(line.split("\t")[9]) - if math.isnan(marker['p_value']) or (marker['p_value'] <= 0): - marker['lod_score'] = 0 - #marker['lrs_value'] = 0 - else: - marker['lod_score'] = -math.log10(marker['p_value']) - #marker['lrs_value'] = -math.log10(marker['p_value']) * 4.61 - marker_obs.append(marker) - - included_markers.append(line.split("\t")[1]) - p_values.append(float(line.split("\t")[9])) - - return marker_obs - -def parse_loco_output(this_dataset, gwa_output_filename): +def parse_loco_output(this_dataset, gwa_output_filename, loco="True"): output_filelist = [] with open("{}/gn2/".format(TEMPDIR) + gwa_output_filename + ".json") as data_file: @@ -225,7 +184,8 @@ def parse_loco_output(this_dataset, gwa_output_filename): else: marker['chr'] = line.split("\t")[0] marker['Mb'] = float(line.split("\t")[2]) / 1000000 - marker['p_value'] = float(line.split("\t")[9]) + marker['p_value'] = float(line.split("\t")[10]) + marker['additive'] = float(line.split("\t")[7]) if math.isnan(marker['p_value']) or (marker['p_value'] <= 0): marker['lod_score'] = 0 #marker['lrs_value'] = 0 diff --git a/wqflask/wqflask/marker_regression/plink_mapping.py b/wqflask/wqflask/marker_regression/plink_mapping.py index fd91b6ca..5d675c38 100644 --- a/wqflask/wqflask/marker_regression/plink_mapping.py +++ b/wqflask/wqflask/marker_regression/plink_mapping.py @@ -9,11 +9,11 @@ import utility.logger logger = utility.logger.getLogger(__name__ ) def run_plink(this_trait, dataset, species, vals, maf): - plink_output_filename = webqtlUtil.genRandStr("%s_%s_"%(dataset.group.name, this_trait.name)) + plink_output_filename = webqtlUtil.genRandStr(f"{dataset.group.name}_{this_trait.name}_") gen_pheno_txt_file(dataset, vals) - plink_command = PLINK_COMMAND + ' --noweb --bfile %s/%s --no-pheno --no-fid --no-parents --no-sex --maf %s --out %s%s --assoc ' % ( - flat_files('mapping'), dataset.group.name, maf, TMPDIR, plink_output_filename) + + plink_command = f"{PLINK_COMMAND} --noweb --bfile {flat_files('mapping')}/{dataset.group.name} --no-pheno --no-fid --no-parents --no-sex --maf {maf} --out { TMPDIR}{plink_output_filename} --assoc " logger.debug("plink_command:", plink_command) os.system(plink_command) @@ -29,12 +29,12 @@ def gen_pheno_txt_file(this_dataset, vals): """Generates phenotype file for GEMMA/PLINK""" current_file_data = [] - with open("{}/{}.fam".format(flat_files('mapping'), this_dataset.group.name), "r") as outfile: + with open(f"{flat_files('mapping')}/{this_dataset.group.name}.fam", "r") as outfile: for i, line in enumerate(outfile): split_line = line.split() current_file_data.append(split_line) - with open("{}/{}.fam".format(flat_files('mapping'), this_dataset.group.name), "w") as outfile: + with open(f"{flat_files('mapping')}/{this_dataset.group.name}.fam","w") as outfile: for i, line in enumerate(current_file_data): if vals[i] == "x": this_val = -9 @@ -44,8 +44,8 @@ def gen_pheno_txt_file(this_dataset, vals): def gen_pheno_txt_file_plink(this_trait, dataset, vals, pheno_filename = ''): ped_sample_list = get_samples_from_ped_file(dataset) - output_file = open("%s%s.txt" % (TMPDIR, pheno_filename), "wb") - header = 'FID\tIID\t%s\n' % this_trait.name + output_file = open(f"{TMPDIR}{pheno_filename}.txt", "wb") + header = f"FID\tIID\t{this_trait.name}\n" output_file.write(header) new_value_list = [] @@ -65,7 +65,7 @@ def gen_pheno_txt_file_plink(this_trait, dataset, vals, pheno_filename = ''): for i, sample in enumerate(ped_sample_list): j = i+1 value = new_value_list[i] - new_line += '%s\t%s\t%s\n'%(sample, sample, value) + new_line += f"{sample}\t{sample}\t{value}\n" if j%1000 == 0: output_file.write(newLine) @@ -78,7 +78,7 @@ def gen_pheno_txt_file_plink(this_trait, dataset, vals, pheno_filename = ''): # get strain name from ped file in order def get_samples_from_ped_file(dataset): - ped_file= open("{}{}.ped".format(flat_files('mapping'), dataset.group.name), "r") + ped_file= open(f"{flat_files('mapping')}{dataset.group.name}.ped","r") line = ped_file.readline() sample_list=[] @@ -98,7 +98,7 @@ def parse_plink_output(output_filename, species): threshold_p_value = 1 - result_fp = open("%s%s.qassoc"% (TMPDIR, output_filename), "rb") + result_fp = open(f"{TMPDIR}{output_filename}.qassoc","rb") line = result_fp.readline() @@ -154,7 +154,7 @@ def parse_plink_output(output_filename, species): # function: convert line from str to list; # output: lineList list ####################################################### -def build_line_list(line=None): +def build_line_list(line=""): line_list = line.strip().split(' ')# irregular number of whitespaces between columns line_list = [item for item in line_list if item !=''] line_list = [item.strip() for item in line_list] diff --git a/wqflask/wqflask/marker_regression/qtlreaper_mapping.py b/wqflask/wqflask/marker_regression/qtlreaper_mapping.py index 78b1f7b0..8341ee55 100644 --- a/wqflask/wqflask/marker_regression/qtlreaper_mapping.py +++ b/wqflask/wqflask/marker_regression/qtlreaper_mapping.py @@ -17,22 +17,29 @@ def run_reaper(this_trait, this_dataset, samples, vals, json_data, num_perm, boo else: genofile_name = this_dataset.group.name - trait_filename = str(this_trait.name) + "_" + str(this_dataset.name) + "_pheno" + trait_filename =f"{str(this_trait.name)}_{str(this_dataset.name)}_pheno" gen_pheno_txt_file(samples, vals, trait_filename) - output_filename = this_dataset.group.name + "_GWA_" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6)) + output_filename = (f"{this_dataset.group.name}_GWA_"+ + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6)) + ) bootstrap_filename = None permu_filename = None opt_list = [] if boot_check and num_bootstrap > 0: - bootstrap_filename = this_dataset.group.name + "_BOOTSTRAP_" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6)) + bootstrap_filename = (f"{this_dataset.group.name}_BOOTSTRAP_" + + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6)) + ) opt_list.append("-b") - opt_list.append("--n_bootstrap " + str(num_bootstrap)) - opt_list.append("--bootstrap_output " + webqtlConfig.GENERATED_IMAGE_DIR + bootstrap_filename + ".txt") + opt_list.append(f"--n_bootstrap {str(num_bootstrap)}") + opt_list.append(f"--bootstrap_output {webqtlConfig.GENERATED_IMAGE_DIR}{bootstrap_filename}.txt") if num_perm > 0: - permu_filename = this_dataset.group.name + "_PERM_" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6)) + permu_filename =("{this_dataset.group.name}_PERM_" + + ''.join(random.choice(string.ascii_uppercase + + string.digits) for _ in range(6)) + ) opt_list.append("-n " + str(num_perm)) opt_list.append("--permu_output " + webqtlConfig.GENERATED_IMAGE_DIR + permu_filename + ".txt") if control_marker != "" and do_control == "true": @@ -40,13 +47,15 @@ def run_reaper(this_trait, this_dataset, samples, vals, json_data, num_perm, boo if manhattan_plot != True: opt_list.append("--interval 1") - reaper_command = REAPER_COMMAND + ' --geno {0}/{1}.geno --traits {2}/gn2/{3}.txt {4} -o {5}{6}.txt'.format(flat_files('genotype'), - genofile_name, - TEMPDIR, - trait_filename, - " ".join(opt_list), - webqtlConfig.GENERATED_IMAGE_DIR, - output_filename) + reaper_command = (REAPER_COMMAND + + ' --geno {0}/{1}.geno --traits {2}/gn2/{3}.txt {4} -o {5}{6}.txt'.format(flat_files('genotype'), + + genofile_name, + TEMPDIR, + trait_filename, + " ".join(opt_list), + webqtlConfig.GENERATED_IMAGE_DIR, + output_filename)) logger.debug("reaper_command:" + reaper_command) os.system(reaper_command) @@ -61,12 +70,13 @@ def run_reaper(this_trait, this_dataset, samples, vals, json_data, num_perm, boo suggestive = permu_vals[int(num_perm*0.37-1)] significant = permu_vals[int(num_perm*0.95-1)] - return marker_obs, permu_vals, suggestive, significant, bootstrap_vals, [output_filename, permu_filename, bootstrap_filename] + return (marker_obs, permu_vals, suggestive, significant, bootstrap_vals, + [output_filename, permu_filename, bootstrap_filename]) def gen_pheno_txt_file(samples, vals, trait_filename): """Generates phenotype file for GEMMA""" - with open("{}/gn2/{}.txt".format(TEMPDIR, trait_filename), "w") as outfile: + with open(f"{TEMPDIR}/gn2/{trait_filename}.txt","w") as outfile: outfile.write("Trait\t") filtered_sample_list = [] @@ -90,7 +100,7 @@ def parse_reaper_output(gwa_filename, permu_filename, bootstrap_filename): only_cm = False only_mb = False - with open("{}{}.txt".format(webqtlConfig.GENERATED_IMAGE_DIR, gwa_filename)) as output_file: + with open(f"{webqtlConfig.GENERATED_IMAGE_DIR}{gwa_filename}.txt") as output_file: for line in output_file: if line.startswith("ID\t"): if len(line.split("\t")) < 8: @@ -137,13 +147,13 @@ def parse_reaper_output(gwa_filename, permu_filename, bootstrap_filename): permu_vals = [] if permu_filename: - with open("{}{}.txt".format(webqtlConfig.GENERATED_IMAGE_DIR, permu_filename)) as permu_file: + with open(f"{webqtlConfig.GENERATED_IMAGE_DIR}{permu_filename}.txt") as permu_file: for line in permu_file: permu_vals.append(float(line)) bootstrap_vals = [] if bootstrap_filename: - with open("{}{}.txt".format(webqtlConfig.GENERATED_IMAGE_DIR, bootstrap_filename)) as bootstrap_file: + with open(f"{webqtlConfig.GENERATED_IMAGE_DIR}{bootstrap_filename}.txt") as bootstrap_file: for line in bootstrap_file: bootstrap_vals.append(int(line)) diff --git a/wqflask/wqflask/marker_regression/run_mapping.py b/wqflask/wqflask/marker_regression/run_mapping.py index fa61272f..891fcc66 100644 --- a/wqflask/wqflask/marker_regression/run_mapping.py +++ b/wqflask/wqflask/marker_regression/run_mapping.py @@ -138,7 +138,12 @@ class RunMapping(object): mapping_results_filename = self.dataset.group.name + "_" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6)) self.mapping_results_path = "{}{}.csv".format(webqtlConfig.GENERATED_IMAGE_DIR, mapping_results_filename) - if start_vars['manhattan_plot'] == "true": + if start_vars['manhattan_plot']: + self.color_scheme = "alternating" + if "color_scheme" in start_vars: + self.color_scheme = start_vars['color_scheme'] + if self.color_scheme == "single": + self.manhattan_single_color = start_vars['manhattan_single_color'] self.manhattan_plot = True else: self.manhattan_plot = False @@ -228,7 +233,7 @@ class RunMapping(object): self.output_files = start_vars['output_files'] if 'first_run' in start_vars: #ZS: check if first run so existing result files can be used if it isn't (for example zooming on a chromosome, etc) self.first_run = False - self.score_type = "-log(p)" + self.score_type = "-logP" self.manhattan_plot = True with Bench("Running GEMMA"): if self.use_loco == "True": @@ -327,7 +332,7 @@ class RunMapping(object): self.control_marker, self.manhattan_plot) elif self.mapping_method == "plink": - self.score_type = "-log(p)" + self.score_type = "-logP" self.manhattan_plot = True results = plink_mapping.run_plink(self.this_trait, self.dataset, self.species, self.vals, self.maf) #results = self.run_plink() @@ -414,13 +419,15 @@ class RunMapping(object): highest_chr = marker['chr'] if ('lod_score' in marker.keys()) or ('lrs_value' in marker.keys()): if 'Mb' in marker.keys(): - marker['display_pos'] = "Chr" + str(marker['chr']) + ": " + "{:.3f}".format(marker['Mb']) + marker['display_pos'] = "Chr" + str(marker['chr']) + ": " + "{:.6f}".format(marker['Mb']) elif 'cM' in marker.keys(): marker['display_pos'] = "Chr" + str(marker['chr']) + ": " + "{:.3f}".format(marker['cM']) else: marker['display_pos'] = "N/A" self.qtl_results.append(marker) + total_markers = len(self.qtl_results) + with Bench("Exporting Results"): export_mapping_results(self.dataset, self.this_trait, self.qtl_results, self.mapping_results_path, self.mapping_scale, self.score_type) @@ -484,13 +491,15 @@ class RunMapping(object): perm_results = self.perm_output, significant = significant_for_browser, browser_files = browser_files, - selected_chr = this_chr + selected_chr = this_chr, + total_markers = total_markers ) else: self.js_data = dict( chr_lengths = chr_lengths, browser_files = browser_files, - selected_chr = this_chr + selected_chr = this_chr, + total_markers = total_markers ) def run_rqtl_plink(self): @@ -539,8 +548,8 @@ def export_mapping_results(dataset, trait, markers, results_path, mapping_scale, output_file.write("Location: " + str(trait.chr) + " @ " + str(trait.mb) + " Mb\n") output_file.write("\n") output_file.write("Name,Chr,") - if score_type.lower() == "-log(p)": - score_type = "-log(p)" + if score_type.lower() == "-logP": + score_type = "-logP" if 'Mb' in markers[0]: output_file.write("Mb," + score_type) if 'cM' in markers[0]: diff --git a/wqflask/wqflask/search_results.py b/wqflask/wqflask/search_results.py index 8a5a7a80..c4ea2921 100644 --- a/wqflask/wqflask/search_results.py +++ b/wqflask/wqflask/search_results.py @@ -125,11 +125,14 @@ class SearchResultPage(object): trait_dict['mean'] = "N/A" trait_dict['additive'] = "N/A" if this_trait.mean != "" and this_trait.mean != None: - trait_dict['mean'] = '%.3f' % this_trait.mean - trait_dict['lrs_score'] = this_trait.LRS_score_repr + trait_dict['mean'] = f"{this_trait.mean:.3f}" + try: + trait_dict['lod_score'] = f"{float(this_trait.LRS_score_repr) / 4.61:.1f}" + except: + trait_dict['lod_score'] = "N/A" trait_dict['lrs_location'] = this_trait.LRS_location_repr if this_trait.additive != "": - trait_dict['additive'] = '%.3f' % this_trait.additive + trait_dict['additive'] = f"{this_trait.additive:.3f}" elif this_trait.dataset.type == "Geno": trait_dict['location'] = this_trait.location_repr elif this_trait.dataset.type == "Publish": @@ -142,12 +145,15 @@ class SearchResultPage(object): trait_dict['pubmed_text'] = this_trait.pubmed_text trait_dict['mean'] = "N/A" if this_trait.mean != "" and this_trait.mean != None: - trait_dict['mean'] = '%.3f' % this_trait.mean - trait_dict['lrs_score'] = this_trait.LRS_score_repr + trait_dict['mean'] = f"{this_trait.mean:.3f}" + try: + trait_dict['lod_score'] = f"{float(this_trait.LRS_score_repr) / 4.61:.1f}" + except: + trait_dict['lod_score'] = "N/A" trait_dict['lrs_location'] = this_trait.LRS_location_repr trait_dict['additive'] = "N/A" if this_trait.additive != "": - trait_dict['additive'] = '%.3f' % this_trait.additive + trait_dict['additive'] = f"{this_trait.additive:.3f}" # Convert any bytes in dict to a normal utf-8 string for key in trait_dict.keys(): if isinstance(trait_dict[key], bytes): diff --git a/wqflask/wqflask/show_trait/SampleList.py b/wqflask/wqflask/show_trait/SampleList.py index 37c1d6d5..ece485ae 100644 --- a/wqflask/wqflask/show_trait/SampleList.py +++ b/wqflask/wqflask/show_trait/SampleList.py @@ -8,6 +8,7 @@ from pprint import pformat as pf from utility import Plot from utility import Bunch + class SampleList(object): def __init__(self, dataset, @@ -34,13 +35,18 @@ class SampleList(object): # ZS: self.this_trait will be a list if it is a Temp trait if isinstance(self.this_trait, list): - if (counter <= len(self.this_trait) and - str(self.this_trait[counter-1]).upper() != 'X'): - sample = webqtlCaseData.webqtlCaseData( - name=sample_name, - value=float(self.this_trait[counter-1])) - else: - sample = webqtlCaseData.webqtlCaseData(name=sample_name) + sample = webqtlCaseData.webqtlCaseData(name=sample_name) + if counter <= len(self.this_trait): + if isinstance(self.this_trait[counter-1], (bytes, bytearray)): + if (self.this_trait[counter-1].decode("utf-8").lower() != 'x'): + sample = webqtlCaseData.webqtlCaseData( + name=sample_name, + value=float(self.this_trait[counter-1])) + else: + if (self.this_trait[counter-1].lower() != 'x'): + sample = webqtlCaseData.webqtlCaseData( + name=sample_name, + value=float(self.this_trait[counter-1])) else: # ZS - If there's no value for the sample/strain, # create the sample object (so samples with no value @@ -67,7 +73,8 @@ class SampleList(object): self.sample_list.append(sample) self.se_exists = any(sample.variance for sample in self.sample_list) - self.num_cases_exists = any(sample.num_cases for sample in self.sample_list) + self.num_cases_exists = any( + sample.num_cases for sample in self.sample_list) first_attr_col = self.get_first_attr_col() for sample in self.sample_list: @@ -101,7 +108,7 @@ class SampleList(object): FROM CaseAttribute, CaseAttributeXRefNew WHERE CaseAttributeXRefNew.CaseAttributeId = CaseAttribute.Id AND CaseAttributeXRefNew.InbredSetId = %s - ORDER BY CaseAttribute.Name''', (str(self.dataset.group.id),)) + ORDER BY lower(CaseAttribute.Name)''', (str(self.dataset.group.id),)) self.attributes = {} for attr, values in itertools.groupby(results.fetchall(), lambda row: (row.Id, row.Name)): @@ -110,7 +117,7 @@ class SampleList(object): self.attributes[key].name = name self.attributes[key].distinct_values = [ item.Value for item in values] - natural_sort(self.attributes[key].distinct_values) + self.attributes[key].distinct_values=natural_sort(self.attributes[key].distinct_values) all_numbers = True for value in self.attributes[key].distinct_values: try: @@ -150,7 +157,7 @@ class SampleList(object): except ValueError: pass - attribute_values[self.attributes[item.Id].name] = attribute_value + attribute_values[self.attributes[item.Id].name.lower()] = attribute_value self.sample_attribute_values[sample_name] = attribute_values def get_first_attr_col(self): @@ -162,7 +169,8 @@ class SampleList(object): return first_attr_col -def natural_sort(list, key=lambda s: s): + +def natural_sort(a_list, key=lambda s: s): """ Sort the list into natural alphanumeric order. """ @@ -170,4 +178,5 @@ def natural_sort(list, key=lambda s: s): def convert(text): return int(text) if text.isdigit() else text return lambda s: [convert(c) for c in re.split('([0-9]+)', key(s))] sort_key = get_alphanum_key_func(key) - list.sort(key=sort_key)
\ No newline at end of file + sorted_list = sorted(a_list, key=sort_key) + return sorted_list diff --git a/wqflask/wqflask/show_trait/show_trait.py b/wqflask/wqflask/show_trait/show_trait.py index edf9638c..4c6dd005 100644 --- a/wqflask/wqflask/show_trait/show_trait.py +++ b/wqflask/wqflask/show_trait/show_trait.py @@ -186,8 +186,6 @@ class ShowTrait(object): self.has_num_cases = has_num_cases(self.this_trait) - self.stats_table_width, self.trait_table_width = get_table_widths(self.sample_groups, self.has_num_cases) - #ZS: Needed to know whether to display bar chart + get max sample name length in order to set table column width self.num_values = 0 self.binary = "true" #ZS: So it knows whether to display the Binary R/qtl mapping method, which doesn't work unless all values are 0 or 1 @@ -206,6 +204,8 @@ class ShowTrait(object): sample_column_width = max_samplename_width * 8 + self.stats_table_width, self.trait_table_width = get_table_widths(self.sample_groups, sample_column_width, self.has_num_cases) + if self.num_values >= 5000: self.maf = 0.01 else: @@ -228,8 +228,8 @@ class ShowTrait(object): hddn = OrderedDict() if self.dataset.group.allsamples: - hddn['allsamples'] = ''.join(self.dataset.group.allsamples) - hddn['primary_samples'] = ''.join(self.primary_sample_names) + hddn['allsamples'] = ','.join(self.dataset.group.allsamples) + hddn['primary_samples'] = ','.join(self.primary_sample_names) hddn['trait_id'] = self.trait_id hddn['trait_display_name'] = self.this_trait.display_name hddn['dataset'] = self.dataset.name @@ -372,7 +372,7 @@ class ShowTrait(object): # We're checking a string here! assert isinstance(this_group, str), "We need a string type thing here" - if this_group[:3] == 'BXD' and this_group != "BXD-Harvested": + if this_group[:3] == 'BXD' and this_group != "BXD-Longevity": this_group = 'BXD' if this_group: @@ -547,12 +547,12 @@ def get_nearest_marker(this_trait, this_db): return result[0][0] -def get_table_widths(sample_groups, has_num_cases=False): +def get_table_widths(sample_groups, sample_column_width, has_num_cases=False): stats_table_width = 250 if len(sample_groups) > 1: stats_table_width = 450 - trait_table_width = 380 + trait_table_width = 300 + sample_column_width if sample_groups[0].se_exists: trait_table_width += 80 if has_num_cases: diff --git a/wqflask/wqflask/static/Congenic.png b/wqflask/wqflask/static/Congenic.png Binary files differnew file mode 100644 index 00000000..8cd489a4 --- /dev/null +++ b/wqflask/wqflask/static/Congenic.png diff --git a/wqflask/wqflask/static/images/Belknap_Fig1_1998.png b/wqflask/wqflask/static/images/Belknap_Fig1_1998.png Binary files differnew file mode 100644 index 00000000..46305fa1 --- /dev/null +++ b/wqflask/wqflask/static/images/Belknap_Fig1_1998.png diff --git a/wqflask/wqflask/static/images/Chrna1vsMyf6.gif b/wqflask/wqflask/static/images/Chrna1vsMyf6.gif Binary files differnew file mode 100644 index 00000000..881a08e8 --- /dev/null +++ b/wqflask/wqflask/static/images/Chrna1vsMyf6.gif diff --git a/wqflask/wqflask/static/images/Congenic.png b/wqflask/wqflask/static/images/Congenic.png Binary files differnew file mode 100644 index 00000000..8cd489a4 --- /dev/null +++ b/wqflask/wqflask/static/images/Congenic.png diff --git a/wqflask/wqflask/static/images/Normal_Plot.gif b/wqflask/wqflask/static/images/Normal_Plot.gif Binary files differnew file mode 100644 index 00000000..dc239f8e --- /dev/null +++ b/wqflask/wqflask/static/images/Normal_Plot.gif diff --git a/wqflask/wqflask/static/images/SilverFig3_2.png b/wqflask/wqflask/static/images/SilverFig3_2.png Binary files differnew file mode 100644 index 00000000..5b4b2c70 --- /dev/null +++ b/wqflask/wqflask/static/images/SilverFig3_2.png diff --git a/wqflask/wqflask/static/images/SilverFig3_6.png b/wqflask/wqflask/static/images/SilverFig3_6.png Binary files differnew file mode 100644 index 00000000..5b91d991 --- /dev/null +++ b/wqflask/wqflask/static/images/SilverFig3_6.png diff --git a/wqflask/wqflask/static/images/Winsorize1.png b/wqflask/wqflask/static/images/Winsorize1.png Binary files differnew file mode 100644 index 00000000..f3a65f29 --- /dev/null +++ b/wqflask/wqflask/static/images/Winsorize1.png diff --git a/wqflask/wqflask/static/images/Winsorize3.png b/wqflask/wqflask/static/images/Winsorize3.png Binary files differnew file mode 100644 index 00000000..a9ed95d6 --- /dev/null +++ b/wqflask/wqflask/static/images/Winsorize3.png diff --git a/wqflask/wqflask/static/images/edit.png b/wqflask/wqflask/static/images/edit.png Binary files differnew file mode 100644 index 00000000..571b08cd --- /dev/null +++ b/wqflask/wqflask/static/images/edit.png diff --git a/wqflask/wqflask/static/new/css/colorbox.css b/wqflask/wqflask/static/new/css/colorbox.css new file mode 100644 index 00000000..8b9fb388 --- /dev/null +++ b/wqflask/wqflask/static/new/css/colorbox.css @@ -0,0 +1,238 @@ +/* + Colorbox Core Style: + The following CSS is consistent between example themes and should not be altered. +*/ +#colorbox, +#cboxOverlay, +#cboxWrapper { + position: absolute; + top: 0; + left: 0; + z-index: 9999; + overflow: hidden; +} + +#cboxOverlay { + position: fixed; + width: 100%; + height: 100%; +} + +#cboxMiddleLeft, +#cboxBottomLeft { + clear: left; +} + +#cboxContent { + position: relative; +} + +#cboxLoadedContent { + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +#cboxTitle { + margin: 0; +} + +#cboxLoadingOverlay, +#cboxLoadingGraphic { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +#cboxPrevious, +#cboxNext, +#cboxClose, +#cboxSlideshow { + cursor: pointer; +} + +.cboxPhoto { + float: left; + margin: auto; + border: 0; + display: block; + max-width: none; + -ms-interpolation-mode: bicubic; +} + +.cboxIframe { + width: 100%; + height: 100%; + display: block; + border: 0; +} + +#colorbox, +#cboxContent, +#cboxLoadedContent { + box-sizing: content-box; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; +} + +/* + User Style: + Change the following styles to modify the appearance of Colorbox. They are + ordered & tabbed in a way that represents the nesting of the generated HTML. +*/ +#cboxOverlay { + background: #fff; +} + +#colorbox { + outline: 0; +} + +#cboxTopLeft { + width: 25px; + height: 25px; + background: url(images/border1.png) no-repeat 0 0; +} + +#cboxTopCenter { + height: 25px; + background: url(images/border1.png) repeat-x 0 -50px; +} + +#cboxTopRight { + width: 25px; + height: 25px; + background: url(images/border1.png) no-repeat -25px 0; +} + +#cboxBottomLeft { + width: 25px; + height: 25px; + background: url(images/border1.png) no-repeat 0 -25px; +} + +#cboxBottomCenter { + height: 25px; + background: url(images/border1.png) repeat-x 0 -75px; +} + +#cboxBottomRight { + width: 25px; + height: 25px; + background: url(images/border1.png) no-repeat -25px -25px; +} + +#cboxMiddleLeft { + width: 25px; + background: url(images/border2.png) repeat-y 0 0; +} + +#cboxMiddleRight { + width: 25px; + background: url(images/border2.png) repeat-y -25px 0; +} + +#cboxContent { + background: #fff; + overflow: hidden; +} + +.cboxIframe { + background: #fff; +} + +#cboxError { + padding: 50px; + border: 1px solid #ccc; +} + +#cboxLoadedContent { + margin-bottom: 20px; +} + +#cboxTitle { + position: absolute; + bottom: 0px; + left: 0; + text-align: center; + width: 100%; + color: #999; +} + +#cboxCurrent { + position: absolute; + bottom: 0px; + left: 100px; + color: #999; +} + +#cboxLoadingOverlay { + background: #fff url(images/loading.gif) no-repeat 5px 5px; +} + +/* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */ +#cboxPrevious, +#cboxNext, +#cboxSlideshow, +#cboxClose { + border: 0; + padding: 0; + margin: 0; + overflow: visible; + width: auto; + background: none; +} + +/* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */ +#cboxPrevious:active, +#cboxNext:active, +#cboxSlideshow:active, +#cboxClose:active { + outline: 0; +} + +#cboxSlideshow { + position: absolute; + bottom: 0px; + right: 42px; + color: #444; +} + +#cboxPrevious { + position: absolute; + bottom: 0px; + left: 0; + color: #444; +} + +#cboxNext { + position: absolute; + bottom: 0px; + left: 63px; + color: #444; +} + +#cboxClose { + position: absolute; + bottom: 0; + right: 0; + display: block; + color: #444; +} + +/* + The following fixes a problem where IE7 and IE8 replace a PNG's alpha transparency with a black fill + when an alpha filter (opacity change) is set on the element or ancestor element. This style is not applied to or needed in IE9. + See: http://jacklmoore.com/notes/ie-transparency-problems/ +*/ +.cboxIE #cboxTopLeft, +.cboxIE #cboxTopCenter, +.cboxIE #cboxTopRight, +.cboxIE #cboxBottomLeft, +.cboxIE #cboxBottomCenter, +.cboxIE #cboxBottomRight, +.cboxIE #cboxMiddleLeft, +.cboxIE #cboxMiddleRight { + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF, endColorstr=#00FFFFFF); +}
\ No newline at end of file diff --git a/wqflask/wqflask/static/new/css/markdown.css b/wqflask/wqflask/static/new/css/markdown.css new file mode 100644 index 00000000..859fe7fc --- /dev/null +++ b/wqflask/wqflask/static/new/css/markdown.css @@ -0,0 +1,108 @@ +#markdown { + padding: 20px; +} + +#markdown h2, +#markdown h3, +#markdown h4, +#markdown h5 { + font-weight: bold; +} + +#markdown img { + display: block; + margin-right: auto; + margin-left: auto; +} + +.github-btn-container { + margin: 20px 10px; + display: flex; + width: 90vw; + justify-content: flex-end; +} + +.github-btn { + display: flex; + justify-content: center; + border: 3px solid #357ebd; + background: lightgrey; + padding: 3px 4px; + width: 200px; + border-radius: 16px; +} + +.github-btn a { + align-self: center; + font-weight: bold; + color: #357ebd; +} + +.github-btn a img { + height: 40px; + width: 40px; + padding-left:5px; +} + + +.container { + width: 80vw; + margin: auto; + max-width: 80vw; + +} + +.container p { + font-size: 17px; + word-spacing: 0.2em; +} + +.graph-legend h1 { + text-align: center; +} + +.graph-legend, +#guix-graph, +#guix-svg-graph{ + width: 90%; + margin: 10px auto; +} + +#guix-graph { + border: solid 2px black; +} + +#guix-svg-graph img { + width: 100%; +} + +#markdown table { + width: 100%; +} + +#markdown td { + padding: 1em; + text-align: left; +} + +#markdown th { + text-align: center; +} + +#markdown table, +#markdown td, +#markdown th { + border: solid 2px black; +} + +#markdown td, +#markdown th { + padding-top: 8px; + padding-bottom: 8px; +} + +@media(max-width:650px) { + .container { + width: 100vw; + } +} diff --git a/wqflask/wqflask/static/new/css/marker_regression.css b/wqflask/wqflask/static/new/css/marker_regression.css index e0a5ceea..9f56b63d 100644 --- a/wqflask/wqflask/static/new/css/marker_regression.css +++ b/wqflask/wqflask/static/new/css/marker_regression.css @@ -48,10 +48,10 @@ table.dataTable thead th{ } table.dataTable thead .sorting_asc { - background-image: url("../packages/DataTables/images/sort_asc_disabled.png"); + background-image: url("/js/DataTables/images/sort_asc_disabled.png"); } table.dataTable thead .sorting_desc { - background-image: url("../packages/DataTables/images/sort_desc_disabled.png"); + background-image: url("/js/DataTables/images/sort_desc_disabled.png"); } table.dataTable thead th { diff --git a/wqflask/wqflask/static/new/css/show_trait.css b/wqflask/wqflask/static/new/css/show_trait.css index d8964f5d..27404801 100644 --- a/wqflask/wqflask/static/new/css/show_trait.css +++ b/wqflask/wqflask/static/new/css/show_trait.css @@ -25,10 +25,10 @@ table.dataTable thead th, table.dataTable tfoot th{ } table.dataTable thead .sorting_asc { - background-image: url("../packages/DataTables/images/sort_asc_disabled.png"); + background-image: url("/js/DataTables/images/sort_asc_disabled.png"); } table.dataTable thead .sorting_desc { - background-image: url("../packages/DataTables/images/sort_desc_disabled.png"); + background-image: url("/js/DataTables/images/sort_desc_disabled.png"); } table.dataTable thead th, table.dataTable tfoot { @@ -67,7 +67,7 @@ table.dataTable.cell-border tbody tr td:first-child { } .showtrait-main-div { - min-width: 700px; + min-width: 1100px; } table.dataTable tbody td.column_name-Checkbox { @@ -145,11 +145,11 @@ input.corr-location { display: inline; } -div.block-by-index-div { +div.block-div { margin-bottom: 10px; } -div.block-by-attribute-div { +div.block-div-2 { margin-top:10px; margin-bottom:10px; } diff --git a/wqflask/wqflask/static/new/css/trait_list.css b/wqflask/wqflask/static/new/css/trait_list.css new file mode 100644 index 00000000..b83655da --- /dev/null +++ b/wqflask/wqflask/static/new/css/trait_list.css @@ -0,0 +1,20 @@ +div.tool-button-container { + min-width: 950px; +} + +div.collection-table-options { + min-width: 1100px; +} + +div.show-hide-container { + margin-bottom: 5px; + margin-top: 10px; +} + +button.active { + background: #e5e5e5; + -webkit-box-shadow: inset 0px 0px 5px #c1c1c1; + -moz-box-shadow: inset 0px 0px 5px #c1c1c1; + box-shadow: inset 0px 0px 5px #c1c1c1; + outline: none; + }
\ No newline at end of file diff --git a/wqflask/wqflask/static/new/javascript/auto_hide_column.js b/wqflask/wqflask/static/new/javascript/auto_hide_column.js new file mode 100644 index 00000000..1a4dc039 --- /dev/null +++ b/wqflask/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/wqflask/wqflask/static/new/javascript/draw_probability_plot.js b/wqflask/wqflask/static/new/javascript/draw_probability_plot.js index 3d756303..1b944d4f 100644 --- a/wqflask/wqflask/static/new/javascript/draw_probability_plot.js +++ b/wqflask/wqflask/static/new/javascript/draw_probability_plot.js @@ -118,7 +118,6 @@ }; }; data = [make_data('samples_primary'), make_data('samples_other')]; - console.log("THE DATA IS:", data); 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>"); diff --git a/wqflask/wqflask/static/new/javascript/get_traits_from_collection.js b/wqflask/wqflask/static/new/javascript/get_traits_from_collection.js index 4ec62157..626357d4 100644 --- a/wqflask/wqflask/static/new/javascript/get_traits_from_collection.js +++ b/wqflask/wqflask/static/new/javascript/get_traits_from_collection.js @@ -2,10 +2,6 @@ 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; }; -console.log("before get_traits_from_collection"); - -//collection_list = null; - this_trait_data = null; selected_traits = {}; @@ -69,7 +65,7 @@ if ( ! $.fn.DataTable.isDataTable( '#collection_table' ) ) { collection_click = function() { var this_collection_url; - //console.log("Clicking on:", $(this)); + this_collection_url = $(this).find('.collection_name').prop("href"); this_collection_url += "&json"; collection_list = $("#collections_holder").html(); @@ -87,9 +83,7 @@ submit_click = function() { $('#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(); - console.log("this_trait is:", this_trait); this_dataset = $(this).parents('tr').find('.dataset').text(); - console.log("this_dataset is:", this_dataset); this_trait_url = "/trait/get_sample_data?trait=" + this_trait + "&dataset=" + this_dataset; return $.ajax({ dataType: "json", @@ -147,7 +141,7 @@ create_trait_data_csv = function(selected_traits) { } all_vals.push(this_trait_vals); } - console.log("all_vals:", all_vals); + trait_vals_csv = trait_names.join(","); trait_vals_csv += "\n"; for (index = _k = 0, _len2 = samples.length; _k < _len2; index = ++_k) { @@ -168,7 +162,7 @@ create_trait_data_csv = function(selected_traits) { trait_click = function() { var dataset, this_trait_url, trait; - console.log("Clicking on:", $(this)); + trait = $(this).parent().find('.trait').text(); dataset = $(this).parent().find('.dataset').text(); this_trait_url = "/trait/get_sample_data?trait=" + trait + "&dataset=" + dataset; @@ -182,7 +176,6 @@ trait_click = function() { trait_row_click = function() { var dataset, this_trait_url, trait; - console.log("Clicking on:", $(this)); trait = $(this).find('.trait').text(); dataset = $(this).find('.dataset').data("dataset"); this_trait_url = "/trait/get_sample_data?trait=" + trait + "&dataset=" + dataset; @@ -208,13 +201,17 @@ populate_cofactor_info = function(trait_info) { 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 { + } 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_description').html('PubMed: ' + trait_info['pubmed_text'] + '<br>' + trait_info['description']) + $('#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"); @@ -224,13 +221,17 @@ populate_cofactor_info = function(trait_info) { 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 { + } 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_description').html('PubMed: ' + trait_info['pubmed_text'] + '<br>' + trait_info['description']) + $('#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"); @@ -240,13 +241,17 @@ populate_cofactor_info = function(trait_info) { 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 { + } 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_description').html('PubMed: ' + trait_info['pubmed_text'] + '<br>' + trait_info['description']) + $('#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"); @@ -256,7 +261,6 @@ populate_cofactor_info = function(trait_info) { 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]; - console.log("IN GET TRAIT DATA") if ( $('input[name=allsamples]').length ) { samples = $('input[name=allsamples]').val().split(" "); } else { @@ -362,13 +366,11 @@ assemble_into_json = function(this_trait_vals) { }; 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; - console.log('in process_traits with trait_data:', trait_data); 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' class='btn btn-primary btn-small'> Submit </button>"; @@ -397,13 +399,11 @@ process_traits = function(trait_data, textStatus, jqXHR) { }; back_to_collections = function() { - collection_list_html = $('#collection_list_html').html() - $("#collections_holder").html(collection_list_html); + $("#collections_holder").html(collection_list); $(document).on("click", ".collection_line", collection_click); return $('#collections_holder').colorbox.resize(); }; -console.log("inside get_traits_from_collection"); $(".collection_line").on("click", collection_click); $("#submit").on("click", submit_click); if ($('#scatterplot2').length){ diff --git a/wqflask/wqflask/static/new/javascript/init_genome_browser.js b/wqflask/wqflask/static/new/javascript/init_genome_browser.js index 2552fb04..508f5bf2 100644 --- a/wqflask/wqflask/static/new/javascript/init_genome_browser.js +++ b/wqflask/wqflask/static/new/javascript/init_genome_browser.js @@ -1,5 +1,3 @@ -console.log("THE FILES:", js_data.browser_files) - snps_filename = "/browser_input?filename=" + js_data.browser_files[0] annot_filename = "/browser_input?filename=" + js_data.browser_files[1] diff --git a/wqflask/wqflask/static/new/javascript/initialize_show_trait_tables.js b/wqflask/wqflask/static/new/javascript/initialize_show_trait_tables.js index 5a4f151c..4362a75e 100644 --- a/wqflask/wqflask/static/new/javascript/initialize_show_trait_tables.js +++ b/wqflask/wqflask/static/new/javascript/initialize_show_trait_tables.js @@ -93,7 +93,7 @@ build_columns = function() { ); } - attr_keys = Object.keys(js_data.attributes).sort((a, b) => (js_data.attributes[a].name > js_data.attributes[b].name) ? 1 : -1) + attr_keys = Object.keys(js_data.attributes).sort((a, b) => (js_data.attributes[a].name.toLowerCase() > js_data.attributes[b].name.toLowerCase()) ? 1 : -1) for (i = 0; i < attr_keys.length; i++){ column_list.push( { diff --git a/wqflask/wqflask/static/new/javascript/lodheatmap.js b/wqflask/wqflask/static/new/javascript/lodheatmap.js index 965a1d53..b82c95ad 100644 --- a/wqflask/wqflask/static/new/javascript/lodheatmap.js +++ b/wqflask/wqflask/static/new/javascript/lodheatmap.js @@ -44,7 +44,9 @@ lodheatmap = function() { _ref = data.chrnames; for (_i = 0, _len = _ref.length; _i < _len; _i++) { chr = _ref[_i]; - xLR[chr[0]] = getLeftRight(data.posByChr[chr[0]]); + if (data.posByChr[chr[0]].length > 0){ + xLR[chr[0]] = getLeftRight(data.posByChr[chr[0]]); + } } zmin = 0; zmax = 0; @@ -144,7 +146,7 @@ lodheatmap = function() { }).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); + 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"); diff --git a/wqflask/wqflask/static/new/javascript/panelutil.js b/wqflask/wqflask/static/new/javascript/panelutil.js index 3c715c81..ea55a7cf 100644 --- a/wqflask/wqflask/static/new/javascript/panelutil.js +++ b/wqflask/wqflask/static/new/javascript/panelutil.js @@ -159,7 +159,6 @@ chrscales = function(data, width, chrGap, leftMargin, pad4heatmap, mappingScale) if (mappingScale == "morgan") { max_pos = d3.max(data.posByChr[chr[0]]) - console.log("max_pos:", max_pos) data.xscale[chr[0]] = d3.scale.linear().domain([chrStart[i], max_pos]).range([data.chrStart[i], data.chrEnd[i]]); } else { diff --git a/wqflask/wqflask/static/new/javascript/search_results.js b/wqflask/wqflask/static/new/javascript/search_results.js index 86660126..05dcfda5 100644 --- a/wqflask/wqflask/static/new/javascript/search_results.js +++ b/wqflask/wqflask/static/new/javascript/search_results.js @@ -1,42 +1,87 @@ +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() { - var add, change_buttons, checked_traits, deselect_all, invert, remove, removed_traits, select_all; + var add, checked_traits, deselect_all, invert, remove, removed_traits, select_all; checked_traits = null; select_all = function() { - console.log("selected_all"); - $(".trait_checkbox").each(function() { - $(this).prop('checked', true); - if (!$(this).closest('tr').hasClass('selected')) { - $(this).closest('tr').addClass('selected') - } - }); + 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(); }; deselect_all = function() { - $(".trait_checkbox").each(function() { - $(this).prop('checked', false); - if ($(this).closest('tr').hasClass('selected')) { - $(this).closest('tr').removeClass('selected') - } - }); + 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() { - $(".trait_checkbox").each(function() { - if ($(this).prop('checked') == true) { - $(this).prop('checked', false) - } - else { - $(this).prop('checked', true) - } - - if ($(this).closest('tr').hasClass('selected')) { - $(this).closest('tr').removeClass('selected') - } - else { - $(this).closest('tr').addClass('selected') - } - }); + 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(){ @@ -77,22 +122,6 @@ $(function() { change_buttons(); }); - $('.trait_checkbox:checkbox').change(function() { - change_buttons() - - if ($(this).is(":checked")) { - if (!$(this).closest('tr').hasClass('selected')) { - $(this).closest('tr').addClass('selected') - } - } - else { - if ($(this).closest('tr').hasClass('selected')) { - $(this).closest('tr').removeClass('selected') - } - } - - }); - add_to_collection = function() { var traits; traits = $("#trait_table input:checked").map(function() { @@ -117,25 +146,8 @@ $(function() { }; removed_traits = function() { - console.log('in removed_traits with checked_traits:', checked_traits); return checked_traits.closest("tr").fadeOut(); }; - change_buttons = function() { - var button, buttons, item, num_checked, text, _i, _j, _k, _l, _len, _len2, _len3, _len4, _results, _results2; - buttons = ["#add", "#remove"]; - num_checked = $('.trait_checkbox:checked').length; - 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); - } - } - }; submit_bnw = function() { trait_data = submit_traits_to_export_or_bnw("trait_table", "submit_bnw") @@ -157,18 +169,23 @@ $(function() { }); table_dict['headers'] = headers; - rows = []; - trait_table.find('tbody tr').each(function (i, tr) { - if (trait_table.find('input[name="searchResult"]:checked').length > 0) { - if ($(this).find('input[name="searchResult"]').is(':checked')){ - rows.push($(this).find('input[name="searchResult"]:checked').val()) - } - } - else { - rows.push($(this).find('input[name="searchResult"]').val()) + selected_rows = []; + all_rows = []; //ZS: 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) } - }); - table_dict['rows'] = rows; + } + + 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); @@ -253,8 +270,6 @@ $(function() { $("#add").click(add_to_collection); $("#submit_bnw").click(submit_bnw); $("#export_traits").click(export_traits); - $('.trait_checkbox, .btn').click(change_buttons); - let naturalAsc = $.fn.dataTableExt.oSort["natural-ci-asc"] let naturalDesc = $.fn.dataTableExt.oSort["natural-ci-desc"] diff --git a/wqflask/wqflask/static/new/javascript/show_trait.js b/wqflask/wqflask/static/new/javascript/show_trait.js index a34811f8..832dd1e4 100644 --- a/wqflask/wqflask/static/new/javascript/show_trait.js +++ b/wqflask/wqflask/static/new/javascript/show_trait.js @@ -94,33 +94,7 @@ add = function() { $('#add_to_collection').click(add); sample_lists = js_data.sample_lists; sample_group_types = js_data.sample_group_types; -d3.select("#select_compare_trait").on("click", (function(_this) { - return function() { - $('.scatter-matrix-container').remove(); - return open_trait_selection(); - }; -})(this)); -d3.select("#select_covariates").on("click", (function(_this) { - return function() { - return open_covariate_selection(); - }; -})(this)); -$("#remove_covariates").click(function () { - $("input[name=covariates]").val("") - $(".selected-covariates").val("") -}); -$(".select_covariates").click(function () { - open_covariate_selection(); -}); -$(".remove_covariates").click(function () { - $("input[name=covariates]").val("") - $(".selected-covariates").val("") -}); -d3.select("#clear_compare_trait").on("click", (function(_this) { - return function() { - return $('.scatter-matrix-container').remove(); - }; -})(this)); + open_trait_selection = function() { return $('#collections_holder').load('/collections/list?color_by_trait #collections_list', (function(_this) { return function() { @@ -456,15 +430,15 @@ edit_data_change = function() { if (is_number(sample_val) && sample_val !== "") { sample_val = parseFloat(sample_val); sample_sets[table].add_value(sample_val); - if (typeof var_nodes !== 'undefined'){ - sample_var = null; - } else { + try { sample_var = var_nodes[_j].childNodes[0].value if (is_number(sample_var)) { sample_var = parseFloat(sample_var) } else { sample_var = null; } + } catch { + sample_var = null; } sample_dict = { value: sample_val, @@ -479,6 +453,7 @@ edit_data_change = function() { } } } + } update_stat_values(sample_sets); @@ -524,6 +499,24 @@ on_corr_method_change = function() { }; $('select[name=corr_type]').change(on_corr_method_change); +on_dataset_change = function() { + let dataset_type = $('select[name=corr_dataset] option:selected').data('type'); + + if (dataset_type == "mrna_assay"){ + $('#min_expr_filter').show(); + $('#location_filter').show(); + } + else if (dataset_type == "pheno"){ + $('#min_expr_filter').show(); + $('#location_filter').hide(); + } + else { + $('#min_expr_filter').hide(); + $('#location_filter').show(); + } +} +$('select[name=corr_dataset]').change(on_dataset_change); + submit_special = function(url) { get_table_contents_for_form_submit("trait_data_form"); $("#trait_data_form").attr("action", url); @@ -568,14 +561,29 @@ create_value_dropdown = function(value) { populate_sample_attributes_values_dropdown = function() { var attribute_info, key, sample_attributes, selected_attribute, value, _i, _len, _ref, _ref1, _results; $('#attribute_values').empty(); - sample_attributes = {}; - attr_keys = Object.keys(js_data.attributes).sort(); - for (i=0; i < attr_keys.length; i++) { - attribute_info = js_data.attributes[attr_keys[i]]; - sample_attributes[attribute_info.name] = attribute_info.distinct_values; - } - selected_attribute = $('#exclude_menu').val().replace("_", " "); - _ref1 = sample_attributes[selected_attribute]; + sample_attributes = []; + + var attributes_as_list = Object.keys(js_data.attributes).map(function(key) { + return [key, js_data.attributes[key].name.toLowerCase()]; + }); + + attributes_as_list.sort(function(first, second) { + if (second[1] > first[1]){ + return -1 + } + if (first[1] > second[1]){ + return 1 + } + return 0 + }); + + for (i=0; i < attributes_as_list.length; i++) { + attribute_info = js_data.attributes[attributes_as_list[i][0]] + 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]; @@ -590,25 +598,39 @@ if (Object.keys(js_data.attributes).length){ populate_sample_attributes_values_dropdown(); } -$('#exclude_menu').change(populate_sample_attributes_values_dropdown); +$('#exclude_column').change(populate_sample_attributes_values_dropdown); block_by_attribute_value = function() { var attribute_name, cell_class, exclude_by_value; - attribute_name = $('#exclude_menu').val(); + + let exclude_group = $('#exclude_by_attr_group').val(); + let exclude_column = $('#exclude_column').val(); + + if (exclude_group === "other") { + var table_api = $('#samples_other').DataTable(); + } else { + var table_api = $('#samples_primary').DataTable(); + } + exclude_by_value = $('#attribute_values').val(); - cell_class = ".column_name-" + attribute_name; - return $(cell_class).each((function(_this) { - return function(index, element) { - var row; - if ($.trim($(element).text()) === exclude_by_value) { - row = $(element).parent('tr'); - return $(row).find(".trait-value-input").val("x"); - } - }; - })(this)); + + let val_nodes = table_api.column(3).nodes().to$(); + let exclude_val_nodes = table_api.column(attribute_start_pos + parseInt(exclude_column)).nodes().to$(); + + for (i = 0; i < exclude_val_nodes.length; i++) { + 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"; + } + } + + edit_data_change(); }; -$('#exclude_group').click(block_by_attribute_value); +$('#exclude_by_attr').click(block_by_attribute_value); + block_by_index = function() { - var end_index, error, index, index_list, index_set, index_string, start_index, _i, _j, _k, _len, _len1, _ref, _results; + 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(","); @@ -630,7 +652,7 @@ block_by_index = function() { index_list.push(index); } } - _results = []; + let block_group = $('#block_group').val(); if (block_group === "other") { table_api = $('#samples_other').DataTable(); @@ -645,14 +667,95 @@ block_by_index = function() { } }; +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 table_api = $('#samples_other').DataTable(); + } else { + var table_api = $('#samples_primary').DataTable(); + } + + let val_nodes = table_api.column(3).nodes().to$(); + if (filter_column == "value"){ + var filter_val_nodes = table_api.column(3).nodes().to$(); + } + else if (filter_column == "stderr"){ + var filter_val_nodes = table_api.column(5).nodes().to$(); + } + else if (!isNaN(filter_column)){ + var filter_val_nodes = table_api.column(attribute_start_pos + 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 { + var this_col_value = filter_val_nodes[i].childNodes[0].data; + } + 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"; + } + } + } + } +}; + +hide_no_value_filter = function( settings, data, dataIndex ) { + this_value = table_api.column(3).nodes().to$()[dataIndex].childNodes[0].value; + if (this_value == "x"){ + return false + } else { + return true + } +} + hide_no_value = function() { - return $('.value_se').each((function(_this) { - return function(_index, element) { - if ($(element).find('.trait-value-input').val() === 'x') { - return $(element).hide(); + 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) { + table_api = $('#' + table).DataTable(); + if (filter_active == "true"){ + $(this).val("Hide No Value") + table_api.draw(); + $(this).data("active", "false"); + } else { + $(this).val("Show No Value") + $.fn.dataTable.ext.search.push(hide_no_value_filter); + table_api.search(); + table_api.draw(); + $.fn.dataTable.ext.search.splice($.fn.dataTable.ext.search.indexOf(hide_no_value_filter, 1)); + $(this).data("active", "true"); } - }; - })(this)); + } + } }; $('#hide_no_value').click(hide_no_value); @@ -668,6 +771,7 @@ $('#block_outliers').click(block_outliers); reset_samples_table = function() { $('input[name="transform"]').val(""); $('span[name="transform_text"]').text("") + $('#hide_no_value').val("Hide No Value") tables = ['samples_primary', 'samples_other']; for (_i = 0, _len = tables.length; _i < _len; _i++) { table = tables[_i]; @@ -685,6 +789,7 @@ reset_samples_table = function() { this_node.value = this_node.attributes["data-value"].value; } } + table_api.draw(); } } }; @@ -1179,7 +1284,7 @@ if (js_data.num_values < 256) { margin: { l: left_margin, r: 30, - t: 30, + t: 100, b: bottom_margin } }; @@ -1528,6 +1633,12 @@ $('#block_by_index').click(function(){ block_by_index(); edit_data_change(); }); + +$('#filter_by_value').click(function(){ + filter_by_value(); + edit_data_change(); +}) + $('#exclude_group').click(edit_data_change); $('#block_outliers').click(edit_data_change); $('#reset').click(edit_data_change); diff --git a/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js b/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js index c0f36eaa..34582f21 100644 --- a/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js +++ b/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js @@ -147,7 +147,7 @@ var mapping_input_list = ['temp_uuid', 'trait_id', 'dataset', 'tool_used', 'form 'pair_scan', 'startMb', 'endMb', 'graphWidth', 'lrsMax', 'additiveCheck', 'showSNP', 'showGenes', 'viewLegend', 'haplotypeAnalystCheck', 'mapmethod_rqtl_geno', 'mapmodel_rqtl_geno', 'temp_trait', 'group', 'species', 'reaper_version', 'primary_samples'] -$(".rqtl_tab, #rqtl_geno_compute").on("click", (function(_this) { +$(".rqtl-tab, #rqtl_geno_compute").on("click", (function(_this) { return function() { if ($(this).hasClass('active') || $(this).attr('id') == "rqtl_geno_compute"){ var form_data, url; @@ -171,7 +171,7 @@ $(".rqtl_tab, #rqtl_geno_compute").on("click", (function(_this) { }; })(this)); -$(".gemma_tab, #gemma_compute").on("click", (function(_this) { +$(".gemma-tab, #gemma_compute").on("click", (function(_this) { return function() { if ($(this).hasClass('active') || $(this).attr('id') == "gemma_compute"){ var form_data, url; @@ -192,7 +192,7 @@ $(".gemma_tab, #gemma_compute").on("click", (function(_this) { }; })(this)); -$(".reaper_tab, #interval_mapping_compute").on("click", (function(_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; @@ -260,7 +260,7 @@ $("#mapmethod_rqtl_geno").change(function() { } }); -$("li.mapping_tab").click(function() { +$("li.mapping-tab").click(function() { if ($(this).hasClass("rqtl")){ $(".rqtl_description").css("display", "block"); } else { diff --git a/wqflask/wqflask/static/new/javascript/stats.js b/wqflask/wqflask/static/new/javascript/stats.js index 4df03412..6c443ab3 100644 --- a/wqflask/wqflask/static/new/javascript/stats.js +++ b/wqflask/wqflask/static/new/javascript/stats.js @@ -91,8 +91,6 @@ Stats = (function() { Stats.prototype.interquartile = function() { var iq, length, q1, q3; length = this.the_values.length; - console.log("in interquartile the_values are:", this.the_values); - console.log("length is:", 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)]); diff --git a/wqflask/wqflask/templates/admin/create_group.html b/wqflask/wqflask/templates/admin/create_group.html index 5a6929fb..21ef5653 100644 --- a/wqflask/wqflask/templates/admin/create_group.html +++ b/wqflask/wqflask/templates/admin/create_group.html @@ -80,9 +80,9 @@ {% endblock %} {% block js %} - <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.js') }}"></script> <script language="javascript" type="text/javascript" src="/static/new/javascript/group_manager.js"></script> - <script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/underscore.min.js') }}"></script> <script type="text/javascript" charset="utf-8"> </script> diff --git a/wqflask/wqflask/templates/admin/group_manager.html b/wqflask/wqflask/templates/admin/group_manager.html index c8ed6851..c0b99e75 100644 --- a/wqflask/wqflask/templates/admin/group_manager.html +++ b/wqflask/wqflask/templates/admin/group_manager.html @@ -2,7 +2,7 @@ {% block title %}Group Manager{% endblock %} {% block css %} <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" /> - <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/extensions/buttons.dataTables.css"> + <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTablesExtensions/buttonStyles/css/buttons.dataTables.min.css') }}" /> <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" /> {% endblock %} {% block content %} diff --git a/wqflask/wqflask/templates/admin/ind_user_manager.html b/wqflask/wqflask/templates/admin/ind_user_manager.html index e859b442..b821e5d5 100644 --- a/wqflask/wqflask/templates/admin/ind_user_manager.html +++ b/wqflask/wqflask/templates/admin/ind_user_manager.html @@ -103,7 +103,7 @@ {% block js %} - <script type="text/javascript" src="/static/packages/smart-time-ago/lib/timeago.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/timeago.min.js') }}"></script> <script> $('body').timeago(); </script> diff --git a/wqflask/wqflask/templates/admin/manage_user.html b/wqflask/wqflask/templates/admin/manage_user.html index 7afe075f..3ef90b90 100644 --- a/wqflask/wqflask/templates/admin/manage_user.html +++ b/wqflask/wqflask/templates/admin/manage_user.html @@ -2,7 +2,7 @@ {% block title %}View and Edit Group{% endblock %}
{% block css %}
<link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" />
- <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/extensions/buttons.dataTables.css">
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTablesExtensions/buttonStyles/css/buttons.dataTables.min.css') }}" />
<link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" />
{% endblock %}
{% block content %}
diff --git a/wqflask/wqflask/templates/admin/search_for_groups.html b/wqflask/wqflask/templates/admin/search_for_groups.html index f304a172..0e1ec720 100644 --- a/wqflask/wqflask/templates/admin/search_for_groups.html +++ b/wqflask/wqflask/templates/admin/search_for_groups.html @@ -63,7 +63,7 @@ {% endblock %} {% block js %} - <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.js') }}"></script> <script language="javascript" type="text/javascript" src="/static/new/javascript/group_manager.js"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script> diff --git a/wqflask/wqflask/templates/admin/set_group_privileges.html b/wqflask/wqflask/templates/admin/set_group_privileges.html index bc52788f..04842453 100644 --- a/wqflask/wqflask/templates/admin/set_group_privileges.html +++ b/wqflask/wqflask/templates/admin/set_group_privileges.html @@ -2,7 +2,7 @@ {% block title %}Set Group Privileges{% endblock %} {% block css %} <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" /> - <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/extensions/buttons.dataTables.css"> + <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTablesExtensions/buttonStyles/css/buttons.dataTables.min.css') }}" /> <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" /> {% endblock %} {% block content %} diff --git a/wqflask/wqflask/templates/admin/view_group.html b/wqflask/wqflask/templates/admin/view_group.html index 9e3cce7b..26692fe8 100644 --- a/wqflask/wqflask/templates/admin/view_group.html +++ b/wqflask/wqflask/templates/admin/view_group.html @@ -2,7 +2,7 @@ {% block title %}View and Edit Group{% endblock %} {% block css %} <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" /> - <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/extensions/buttons.dataTables.css"> + <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTablesExtensions/buttonStyles/css/buttons.dataTables.min.css') }}" /> <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" /> {% endblock %} {% block content %} diff --git a/wqflask/wqflask/templates/base.html b/wqflask/wqflask/templates/base.html index 0f4e5ef5..e368a4be 100644 --- a/wqflask/wqflask/templates/base.html +++ b/wqflask/wqflask/templates/base.html @@ -17,7 +17,7 @@ <link REL="stylesheet" TYPE="text/css" href="/static/packages/bootstrap/css/bootstrap.css" /> <link REL="stylesheet" TYPE="text/css" href="/static/packages/bootstrap/css/non-responsive.css" /> <link REL="stylesheet" TYPE="text/css" href="/static/packages/bootstrap/css/docs.css" /> - <link rel="stylesheet" type="text/css" href="/static/packages/colorbox/example4/colorbox.css" /> + <link rel="stylesheet" type="text/css" href="/static/new/css/colorbox.css" /> <!--<link rel="stylesheet" type="text/css" href="/static/new/css/main.css" />--> <link rel="stylesheet" type="text/css" href="/static/new/css/parsley.css" /> @@ -64,13 +64,14 @@ <li class=""> <a href="/help" class="dropdow-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Help <span class="caret"></a> <ul class="dropdown-menu"> - <li><a href="/references">References</a></li> + <li><a href="{{ url_for('references_blueprint.references') }}">References</a></li> <li><a href="/tutorials">Tutorials/Primers</a></li> - <li><a href="http://gn1.genenetwork.org/glossary.html">Glossary of Term</a></li> + <li><a href="{{ url_for('glossary_blueprint.glossary') }}">Glossary of Term</a></li> <li><a href="http://gn1.genenetwork.org/faq.html">FAQ</a></li> - <li><a href="/policies">Policies</a></li> - <li><a href="/links">Links</a></li> - <li><a href="/environments">Environments</a></li> + <li><a href="{{ url_for('policies_blueprint.policies') }}">Policies</a></li> + <li><a href="{{ url_for('links_blueprint.links') }}">Links</a></li> + <li><a href="{{ url_for('facilities_blueprint.facilities') }}">Facilities</a></li> + <li><a href="{{ url_for('environments_blueprint.environments') }}">Environments</a></li> <li><a href="/news">GN1 News</a></li> </ul> </li> @@ -159,9 +160,10 @@ <a href="http://www.senresearch.org">Saunak Sen</a>, <a href="mailto:zachary.a.sloan@gmail.com">Zachary Sloan</a>, <a href="mailto:acenteno@uthsc.edu">Arthur Centeno</a>, - and <a href="mailto:cfische7@uthsc.edu">Christian Fischer</a>. + <a href="mailto:cfische7@uthsc.edu">Christian Fischer</a> + and <a href="mailto:bonfacemunyoki@gmail.com">Bonface Munyoki</a>. </p> - <p>Design and code by Pjotr Prins, Zach Sloan, Arthur Centeno, Christan Fischer, Danny Arends, Sam Ockman, Lei Yan, Xiaodong Zhou, Christian Fernandez, + <p>Design and code by Pjotr Prins, Zach Sloan, Arthur Centeno, Christan Fischer, Bonface Munyoki, Danny Arends, Sam Ockman, Lei Yan, Xiaodong Zhou, Christian Fernandez, Ning Liu, Rudi Alberts, Elissa Chesler, Sujoy Roy, Evan G. Williams, Alexander G. Williams, Kenneth Manly, Jintao Wang, Robert W. Williams, and <!--<a href="http://genenetwork.org/credit.html">colleagues</a>.</p>--> <a href="/credits">colleagues</a>.</p> @@ -236,7 +238,7 @@ <!--</div>--> </div> - <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> + <script src="{{ url_for('js', filename='jquery/jquery.min.js') }}" type="text/javascript"></script> <script src="/static/packages/bootstrap/js/bootstrap.min.js"></script> <script> //http://stackoverflow.com/questions/11521763/bootstrap-scrollspy-not-working @@ -248,14 +250,15 @@ } }) </script> - <script src="/static/new/js_external/jquery.cookie.js"></script> + <script src="{{ url_for('js', filename='jquery-cookie/jquery.cookie.js') }}" type="text/javascript"></script> <script type="text/javascript" src="/static/new/js_external/json2.js"></script> - <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js" type="text/javascript"></script> + <script src="{{ url_for('js', filename='jquery-ui/jquery-ui.min.js') }}" type="text/javascript"></script> - <script language="javascript" type="text/javascript" src="/static/packages/colorbox/jquery.colorbox.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='colorbox/jquery.colorbox-min.js') }}"></script> <!--<script type="text/javascript" src="/static/new/javascript/login.js"></script>--> - <script type="text/javascript" src="/static/new/js_external/parsley.min.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/parsley.min.js') }}"></script> + {% block js %} {% endblock %} diff --git a/wqflask/wqflask/templates/collections/add.html b/wqflask/wqflask/templates/collections/add.html index 62b6abb5..b4e5385b 100644 --- a/wqflask/wqflask/templates/collections/add.html +++ b/wqflask/wqflask/templates/collections/add.html @@ -50,4 +50,7 @@ <script> $('#add_form').parsley(); + $('#add_form').on('submit', function(){ + parent.jQuery.colorbox.close(); + }); </script> diff --git a/wqflask/wqflask/templates/collections/list.html b/wqflask/wqflask/templates/collections/list.html index 9e0c0f07..2ff7b2fd 100644 --- a/wqflask/wqflask/templates/collections/list.html +++ b/wqflask/wqflask/templates/collections/list.html @@ -66,10 +66,10 @@ {% endblock %} {% block js %} - <script type="text/javascript" src="/static/packages/smart-time-ago/lib/timeago.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/timeago.min.js') }}"></script> <script type="text/javascript" src="/static/new/javascript/search_results.js"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script> - <script language="javascript" type="text/javascript" src="/static/new/js_external/jszip.min.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='jszip/jszip.min.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/natural.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/buttons/js/dataTables.buttons.min.js') }}"></script> <script> diff --git a/wqflask/wqflask/templates/collections/not_logged_in.html b/wqflask/wqflask/templates/collections/not_logged_in.html index a4c8747e..49b0e07d 100644 --- a/wqflask/wqflask/templates/collections/not_logged_in.html +++ b/wqflask/wqflask/templates/collections/not_logged_in.html @@ -5,7 +5,7 @@ {{ header("Not logged in") }} - <div id "collections_holder" class="container"> + <div id="collections_holder" class="container"> <div class="page-header"> <h1>Please log in in order to use this feature.</h1> </div> @@ -16,7 +16,7 @@ {% endblock %} {% block js %} - <script type="text/javascript" src="/static/packages/smart-time-ago/lib/timeago.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/timeago.min.js') }}"></script> <script> $('body').timeago(); </script> diff --git a/wqflask/wqflask/templates/collections/view.html b/wqflask/wqflask/templates/collections/view.html index d1a97310..66945ed7 100644 --- a/wqflask/wqflask/templates/collections/view.html +++ b/wqflask/wqflask/templates/collections/view.html @@ -4,6 +4,7 @@ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" /> <link rel="stylesheet" type="text/css" href="{{ url_for('js', filename='DataTablesExtensions/buttonStyles/css/buttons.dataTables.min.css') }}"> <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" /> + <link rel="stylesheet" type="text/css" href="/static/new/css/trait_list.css" /> {% endblock %} {% block content %} <!-- Start of body --> @@ -16,7 +17,7 @@ </h1> <h3>This collection has {{ '{}'.format(numify(trait_obs|count, "record", "records")) }}</h3> - <div> + <div class="tool-button-container"> <form id="collection_form" action="/delete" method="post"> <input type="hidden" name="uc_id" id="uc_id" value="{{ uc.id }}" /> <input type="hidden" name="collection_name" id="collection_name" value="{{ collection_name }}" /> @@ -27,61 +28,29 @@ {{ this_trait.name }}:{{ this_trait.dataset.name }}:{{ data_hmac('{}:{}'.format(this_trait.name, this_trait.dataset.name)) }}, {% endfor %}" > - <button id="corr_matrix" class="btn btn-primary submit_special" data-url="/corr_matrix" title="Correlation Matrix" > - Correlations - </button> - - <button id="network_graph" class="btn btn-primary submit_special" data-url="/network_graph" title="Network Graph" > - Networks - </button> - - <button id="send_to_webgestalt" class="btn btn-primary submit_special" data-url="/webgestalt_page" title="WebGestalt" > - WebGestalt - </button> - - <button id="send_to_geneweaver" class="btn btn-primary submit_special" data-url="/geneweaver_page" title="GeneWeaver" > - GeneWeaver - </button> - - <button id="send_to_bnw" class="btn btn-primary submit_special" data-url="/bnw_page" title="Bayesian Network" > - BNW - </button> - - <button id="wgcna_setup" class="btn btn-primary submit_special" data-url="/wgcna_setup" title="WGCNA Analysis" > - WGCNA - </button> - - <button id="ctl_setup" class="btn btn-primary submit_special" data-url="/ctl_setup" title="CTL Analysis" > - CTL Maps - </button> - - <button id="heatmap" class="btn btn-primary submit_special" data-url="/heatmap" title="Heatmap" > - MultiMap - </button> - - <button id="comp_bar_chart" class="btn btn-primary submit_special" data-url="/comparison_bar_chart" title="Comparison Bar Chart" > - Comparison Bar Chart - </button> + {% include 'tool_buttons.html' %} </form> </div> <div> <br /> - <form id="export_form" method="POST" action="/export_traits_csv"> - <button class="btn btn-default" id="select_all" type="button"><span class="glyphicon glyphicon-ok"></span> Select All</button> - <button class="btn btn-default" id="invert" type="button"><span class="glyphicon glyphicon-ok"></span> Invert</button> - <button class="btn btn-success" id="add" disabled="disabled" type="button"><i class="icon-plus-sign"></i> Copy</button> - <input type="hidden" name="database_name" id="database_name" value="None"> - <input type="hidden" name="export_data" id="export_data" value=""> - <input type="hidden" name="file_name" id="file_name" value="collection_table"> - <button class="btn btn-default" id="export_traits">Download</button> - <input type="text" id="searchbox" class="form-control" style="width: 200px; display: inline; padding-bottom: 9px;" placeholder="Search Table For ..."> - <input type="text" id="select_top" class="form-control" style="width: 200px; display: inline; padding-bottom: 9px;" placeholder="Select Top ..."> - <button class="btn btn-default" id="deselect_all" type="button"><span class="glyphicon glyphicon-remove"></span> Deselect</button> - <button id="remove" class="btn btn-danger" data-url="/collections/remove" disabled="disabled" type="button"><i class="icon-minus-sign"></i> Delete Rows</button> - <button id="delete" class="btn btn-danger submit_special" data-url="/collections/delete" title="Delete this collection" > Delete Collection</button> - </form> + <div class="collection-table-options"> + <form id="export_form" method="POST" action="/export_traits_csv"> + <button class="btn btn-default" id="select_all" type="button"><span class="glyphicon glyphicon-ok"></span> Select All</button> + <button class="btn btn-default" id="invert" type="button"><span class="glyphicon glyphicon-ok"></span> Invert</button> + <button class="btn btn-success" id="add" type="button" disabled><i class="icon-plus-sign"></i> Copy</button> + <input type="hidden" name="database_name" id="database_name" value="None"> + <input type="hidden" name="export_data" id="export_data" value=""> + <input type="hidden" name="file_name" id="file_name" value="collection_table"> + <button class="btn btn-default" id="export_traits">Download</button> + <input type="text" id="searchbox" class="form-control" style="width: 200px; display: inline; padding-bottom: 9px;" placeholder="Search Table For ..."> + <input type="text" id="select_top" class="form-control" style="width: 200px; display: inline; padding-bottom: 9px;" placeholder="Select Top ..."> + <button class="btn btn-default" id="deselect_all" type="button"><span class="glyphicon glyphicon-remove"></span> Deselect</button> + <button id="remove" class="btn btn-danger" data-url="/collections/remove" type="button" disabled><i class="icon-minus-sign"></i> Delete Rows</button> + <button id="delete" class="btn btn-danger submit_special" data-url="/collections/delete" title="Delete this collection" > Delete Collection</button> + </form> + </div> <div style="margin-top: 10px; margin-bottom: 5px;"> <b>Show/Hide Columns:</b> </div> @@ -97,19 +66,16 @@ <th data-export="Description">Description</th> <th data-export="Location">Location</th> <th data-export="Mean">Mean</th> - <th data-export="Max LRS">High P <a href="http://genenetwork.org//glossary.html#L" target="_blank"><sup style="font-size: small; color: #FF0000;"> ?</sup></a></th> + <th data-export="Max LRS">High P <a href="{{ url_for('glossary_blueprint.glossary') }}#L" target="_blank"><sup style="font-size: small; color: #FF0000;"> ?</sup></a></th> <th data-export="Peak Location">Peak Location</th> - <th data-export="Add. Eff.">Effect Size <a href="http://genenetwork.org//glossary.html#A" target="_blank"><sup style="font-size: small; color: #FF0000;"> ?</sup></a></th> + <th data-export="Add. Eff.">Effect Size <a href="{{ url_for('glossary_blueprint.glossary') }}#A" target="_blank"><sup style="font-size: small; color: #FF0000;"> ?</sup></a></th> </tr> </thead> <tbody> {% for this_trait in trait_obs %} <TR id="trait:{{ this_trait.name }}:{{ this_trait.dataset.name }}"> - <TD align="center" style="padding: 0px;"> - <INPUT TYPE="checkbox" NAME="searchResult" class="checkbox trait_checkbox" - VALUE="{{ data_hmac('{}:{}'.format(this_trait.name, this_trait.dataset.name)) }}"> - </TD> + <TD align="center" style="padding: 0px;"><INPUT TYPE="checkbox" NAME="searchResult" class="checkbox trait_checkbox" VALUE="{{ data_hmac('{}:{}'.format(this_trait.name, this_trait.dataset.name)) }}"></TD> <TD data-export="{{ loop.index }}" align="right">{{ loop.index }}</TD> <TD title="{{ this_trait.dataset.fullname }}" data-export="{{ this_trait.dataset.fullname }}">{{ this_trait.dataset.fullname }}</TD> <TD data-export="{{ this_trait.name }}"> @@ -162,7 +128,7 @@ {% endblock %} {% block js %} - <script language="javascript" type="text/javascript" src="/static/new/js_external/jszip.min.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='jszip/jszip.min.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/md5.min.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/natural.js') }}"></script> @@ -175,15 +141,21 @@ <script language="javascript" type="text/javascript"> $(document).ready( function () { - - $('#trait_table tr').click(function(event) { - if (event.target.type !== 'checkbox') { - $(':checkbox', this).trigger('click'); - } - }); - - console.time("Creating table"); $('#trait_table').dataTable( { + 'drawCallback': function( settings ) { + $('#trait_table 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")){ + $(this).removeClass("selected") + } else { + $(this).addClass("selected") + } + change_buttons() + }); + }, "columns": [ { "orderDataType": "dom-checkbox", @@ -217,7 +189,7 @@ "paging": false, "orderClasses": true } ); - console.timeEnd("Creating table"); + submit_special = function(url) { $("#collection_form").attr("action", url); diff --git a/wqflask/wqflask/templates/comparison_bar_chart.html b/wqflask/wqflask/templates/comparison_bar_chart.html index f791457f..d77e0515 100644 --- a/wqflask/wqflask/templates/comparison_bar_chart.html +++ b/wqflask/wqflask/templates/comparison_bar_chart.html @@ -1,7 +1,7 @@ {% extends "base.html" %} {% block title %}Comparison Bar Chart{% endblock %} {% block css %} - <link rel="stylesheet" type="text/css" href="/static/new/css/d3-tip.min.css" /> + <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='d3-tip/d3-tip.css') }}" /> <link rel="stylesheet" type="text/css" href="/static/new/css/panelutil.css" /> {% endblock %} {% block content %} <!-- Start of body --> @@ -31,8 +31,8 @@ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='d3js/d3.min.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='d3-tip/d3-tip.js') }}"></script> <script language="javascript" type="text/javascript" src="/static/new/javascript/panelutil.js"></script> - <script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script> - <script type="text/javascript" src="/static/new/js_external/plotly-latest.min.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/underscore.min.js') }}"></script> + <script type="text/javascript" src="{{ url_for('js', filename='plotly/plotly.min.js') }}"></script> <script language="javascript" type="text/javascript" src="/static/new/javascript/comparison_bar_chart.js"></script> {% endblock %}
\ No newline at end of file diff --git a/wqflask/wqflask/templates/corr_scatterplot.html b/wqflask/wqflask/templates/corr_scatterplot.html index 1fd5cd15..f44350ab 100644 --- a/wqflask/wqflask/templates/corr_scatterplot.html +++ b/wqflask/wqflask/templates/corr_scatterplot.html @@ -81,9 +81,9 @@ <div id="cofactor_color_selector" style="margin-bottom: 10px; display:none;"> <hr> <b>Cofactor Color Range:</b> - <input class="chartupdatedata" name="color2" type="hidden" id="cocolorfrom" value="#D9D9D9"> + <input class="chartupdatedata" name="color2" type="hidden" id="cocolorfrom" value="#0000FF"> <button class="chartupdatedata jscolor {valueElement: 'cocolorfrom'}">Low</button> - <input class="chartupdatedata" name="color1" type="hidden" id="cocolorto" value="#000000"> + <input class="chartupdatedata" name="color1" type="hidden" id="cocolorto" value="#FF0000"> <button class="chartupdatedata jscolor {valueElement: 'cocolorto'}">High</button> <hr> </div> @@ -118,17 +118,17 @@ {% endif %} <ul class="nav nav-tabs"> - <li class="active"> + <li {% if method == 'pearson' %}class="active"{% endif %}> <a href="#tp1" data-toggle="tab">Pearson</a> </li> - <li> + <li {% if method == 'spearman' %}class="active"{% endif %}> <a href="#tp2" data-toggle="tab">Spearman Rank</a> </li> </ul> <div class="tab-content" style="min-width: 800px;"> - <div class="tab-pane active" id="tp1"> + <div class="tab-pane {% if method == 'pearson' %}active{% endif %}" id="tp1"> <br> <div id="scatterplot2"></div> <br> @@ -243,7 +243,7 @@ </div> </div> - <div class="tab-pane" id="tp2"> + <div class="tab-pane {% if method == 'spearman' %}active{% endif %}" id="tp2"> <br> <div id="srscatterplot2"></div> <br> @@ -349,11 +349,11 @@ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='d3js/d3.min.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/underscore.min.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='d3-tip/d3-tip.js') }}"></script> - <script language="javascript" type="text/javascript" src="/static/new/js_external/jscolor.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='jscolor/jscolor.js') }}"></script> <script language="javascript" type="text/javascript" src="/static/new/javascript/panelutil.js"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/natural.js') }}"></script> <!--<script language="javascript" type="text/javascript" src="/static/new/javascript/get_traits_from_collection.js"></script>--> - <script type="text/javascript" src="/static/new/js_external/plotly-latest.min.js"></script> + <script type="text/javascript" src="{{ url_for('js', filename='plotly/plotly.min.js') }}"></script> <script language="javascript" type="text/javascript" src="/static/new/javascript/draw_corr_scatterplot.js"></script> {% endblock %} diff --git a/wqflask/wqflask/templates/correlation_matrix.html b/wqflask/wqflask/templates/correlation_matrix.html index d556f31a..8275f1dd 100644 --- a/wqflask/wqflask/templates/correlation_matrix.html +++ b/wqflask/wqflask/templates/correlation_matrix.html @@ -1,10 +1,11 @@ {% extends "base.html" %} +{% block title %}Correlation Matrix{% endblock %} {% block css %} <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" /> <link rel="stylesheet" type="text/css" href="/static/new/css/corr_matrix.css" /> <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" /> <link rel="stylesheet" type="text/css" href="/static/new/css/panelutil.css" /> - <link rel="stylesheet" type="text/css" href="/static/new/css/d3-tip.min.css" /> + <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='d3-tip/d3-tip.css') }}" /> {% endblock %} {% block content %} @@ -32,6 +33,7 @@ {% endfor %} </tr> {% for trait in traits %} + {% set outer_loop = loop.index %} <tr> <td align="center"><input type="checkbox" class="checkbox" style="margin-left: 3px; margin-right: 1px;"></td> <td align="right" style="padding-right: 4px;" > @@ -51,7 +53,11 @@ {% if result[0].name == trait.name and result[0].dataset == trait.dataset %} <td nowrap="ON" align="center" bgcolor="#cccccc" style="padding: 3px; line-height: 1.1;"><a href="/show_trait?trait_id={{ trait.name }}&dataset={{ trait.dataset.name }}"><font style="font-size: 12px; color: #3071a9; font-weight: bold;" ><em>n</em><br>{{ result[2] }}</font></a></td> {% else %} - <td nowrap="ON" align="middle" class="corr_cell" style="padding: 3px; line-height: 1.1;"><a href="/corr_scatter_plot?dataset_1={% if trait.dataset.name == 'Temp' %}Temp_{{ trait.dataset.group.name }}{% else %}{{ trait.dataset.name }}{% endif %}&dataset_2={% if result[0].dataset.name == 'Temp' %}Temp_{{ result[0].dataset.group.name }}{% else %}{{ result[0].dataset.name }}{% endif %}&trait_1={{ trait.name }}&trait_2={{ result[0].name }}"><font style="font-size: 12px; color: #3071a9; font-weight: bold;" ><span class="corr_value">{{ '%0.2f' % result[1] }}</span><br>{{ result[2] }}</font></a></td> + {% if result[1] == 0 %} + <td nowrap="ON" align="middle" bgcolor="#eeeeee" style="padding: 3px; line-height: 1.1;">N/A</td> + {% else %} + <td nowrap="ON" align="middle" class="corr_cell" style="padding: 3px; line-height: 1.1;"><a href="/corr_scatter_plot?method={% if loop.index > outer_loop %}spearman{% else %}pearson{% endif %}&dataset_1={% if trait.dataset.name == 'Temp' %}Temp_{{ trait.dataset.group.name }}{% else %}{{ trait.dataset.name }}{% endif %}&dataset_2={% if result[0].dataset.name == 'Temp' %}Temp_{{ result[0].dataset.group.name }}{% else %}{{ result[0].dataset.name }}{% endif %}&trait_1={{ trait.name }}&trait_2={{ result[0].name }}"><font style="font-size: 12px; color: #3071a9; font-weight: bold;" ><span class="corr_value">{{ '%0.2f' % result[1] }}</span><br>{{ result[2] }}</font></a></td> + {% endif %} {% endif %} {% endfor %} </tr> @@ -59,6 +65,12 @@ </tbody> </table> <br> +<form method="post" target="_blank" action="/export_corr_matrix" id="matrix_export_form"> + <input type="hidden" name="export_filepath" value="{{ export_filepath }}"> + <input type="hidden" name="export_filename" value="{{ export_filename }}"> + <button class="btn btn-default" id="export">Download <span class="glyphicon glyphicon-download"></span></button> +</form> +<br> {% if pca_works == "True" %} <h2>PCA Traits</h2> <div style="margin-bottom: 20px; overflow:hidden;"> @@ -129,7 +141,7 @@ <script type="text/javascript" src="{{ url_for('js', filename='d3js/d3.min.js') }}"></script> <script type="text/javascript" src="{{ url_for('js', filename='d3-tip/d3-tip.js') }}"></script> - <script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/underscore.min.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/md5.min.js') }}"></script> <script type="text/javascript" src="/static/new/javascript/panelutil.js"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='chroma/chroma.min.js') }}"></script> @@ -168,6 +180,14 @@ "paging": false, "orderClasses": true } ); + + export_corr_matrix = function() { + $('#matrix_export_form').attr('action', '/export_corr_matrix'); + return $('#matrix_export_form').submit(); + } + + $('#export').click(export_corr_matrix); + </script> {% endblock %} diff --git a/wqflask/wqflask/templates/correlation_page.html b/wqflask/wqflask/templates/correlation_page.html index 134f15be..6188c0e7 100644 --- a/wqflask/wqflask/templates/correlation_page.html +++ b/wqflask/wqflask/templates/correlation_page.html @@ -2,9 +2,11 @@ {% block title %}Correlation Results{% endblock %} {% block css %} <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" /> - <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" /> <link rel="stylesheet" type="text/css" href="{{ url_for('js', filename='DataTablesExtensions/buttonsBootstrap/css/buttons.bootstrap.css') }}" /> <link rel="stylesheet" type="text/css" href="{{ url_for('js', filename='DataTablesExtensions/buttonStyles/css/buttons.dataTables.min.css') }}"> + <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css"> + <link rel="stylesheet" type="text/css" href="/static/new/css/trait_list.css" /> + <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" /> {% endblock %} {% block content %} <div class="container" style="min-width: 1250px;"> @@ -30,66 +32,33 @@ {% for this_trait in trait_list %} {{ this_trait.name }}:{{ this_trait.dataset }}, {% endfor %}" > - - <button id="corr_matrix" class="btn btn-primary submit_special" data-url="/corr_matrix" title="Correlation Matrix" > - Correlations - </button> - - <button id="network_graph" class="btn btn-primary submit_special" data-url="/network_graph" title="Network Graph" > - Networks - </button> - - <button id="send_to_webgestalt" class="btn btn-primary submit_special" data-url="/webgestalt_page" title="WebGestalt" > - WebGestalt - </button> - - <button id="send_to_geneweaver" class="btn btn-primary submit_special" data-url="/geneweaver_page" title="GeneWeaver" > - GeneWeaver - </button> - - <button id="send_to_bnw" class="btn btn-primary submit_special" data-url="/bnw_page" title="Bayesian Network" > - BNW - </button> - - <button id="wgcna_setup" class="btn btn-primary submit_special" data-url="/wgcna_setup" title="WGCNA Analysis" > - WGCNA - </button> - - <button id="ctl_setup" class="btn btn-primary submit_special" data-url="/ctl_setup" title="CTL Analysis" > - CTL Maps - </button> - - <button id="heatmap" class="btn btn-primary submit_special" data-url="/heatmap" title="Heatmap" > - MultiMap - </button> - - <button id="comp_bar_chart" class="btn btn-primary submit_special" data-url="/comparison_bar_chart" title="Comparison Bar Chart" > - Comparison Bar Chart - </button> - + {% include 'tool_buttons.html' %} </form> </div> <br /> <div> <form id="export_form" method="POST" action="/export_traits_csv"> <button class="btn btn-default" id="select_all" type="button"><span class="glyphicon glyphicon-ok"></span> Select All</button> + <button class="btn btn-default" id="invert" type="button"><span class="glyphicon glyphicon-adjust"></span> Invert</button> <button class="btn btn-success" id="add" type="button" disabled><span class="glyphicon glyphicon-plus-sign"></span> Add</button> <input type="hidden" name="database_name" id="database_name" value="None"> <input type="hidden" name="export_data" id="export_data" value=""> <input type="hidden" name="file_name" id="file_name" value="{{ this_trait.name }}_{{ dataset.name }}_correlation"> - <button class="btn btn-default" id="export_traits">Download CSV</button> <input type="text" id="searchbox" class="form-control" style="width: 200px; display: inline;" placeholder="Search Table For ..."> <input type="text" id="select_top" class="form-control" style="width: 200px; display: inline;" placeholder="Select Top ..."> <button class="btn btn-default" id="deselect_all" type="button"><span class="glyphicon glyphicon-remove"></span> Deselect</button> <button id="redraw" class="btn btn-default" type="button">Reset Columns</button> </form> <br /> + <div id="export_options"></div> {% if target_dataset.type != "Publish" %} <br /> - <button id="more_options" class="btn btn-primary">More Options...</button> + <div style="float: left; clear: left; margin-top: 10px; margin-bottom: 20px;"> + <button id="more_options" class="btn btn-primary">More Options...</button> + </div> <br /> <br /> - <div id="filter_options" style="display: none;"> + <div id="filter_options" style="display: none; float: left; clear: left;"> <span style="border: 1px dashed #999999; padding: 8px; background-color: #ddf; font-size: 12px;"> <button id="select_traits" class="btn btn-primary" style="font-size: 12px; padding: 2px 3px;">Select Traits</button> with r > <input type="text" name="r_greater_select" value="-1.0" size="6" maxlength="10"> @@ -112,10 +81,37 @@ </div> {% endif %} </div> - <div style="margin-bottom: 5px;"> - <b>Show/Hide Columns:</b> + <div class="show-hide-container" style="float: left; clear: left;"> + <b>Show/Hide Columns:</b> + <br> + {% if target_dataset.type == 'ProbeSet' %} + <button class="toggle-vis" data-column="3">Symbol</button> + <button class="toggle-vis" data-column="4">Description</button> + <button class="toggle-vis" data-column="5">Location</button> + <button class="toggle-vis" data-column="6">Mean</button> + <button class="toggle-vis" data-column="7">Peak LOD</button> + <button class="toggle-vis" data-column="8">Peak Location</button> + <button class="toggle-vis" data-column="9">Effect Size</button> + {% elif target_dataset.type == 'Publish' %} + <button class="toggle-vis" data-column="3">Abbreviation</button> + <button class="toggle-vis" data-column="4">Description</button> + <button class="toggle-vis" data-column="5">Mean</button> + <button class="toggle-vis" data-column="6">Authors</button> + <button class="toggle-vis" data-column="7">Year</button> + <button class="toggle-vis" data-column="8">Sample {% if corr_method == 'pearson' %}r{% else %}rho{% endif %}</button> + <button class="toggle-vis" data-column="9">N</button> + <button class="toggle-vis" data-column="10">Sample p({% if corr_method == 'pearson' %}r{% else %}rho{% endif %})</button> + <button class="toggle-vis" data-column="11">Peak LOD</button> + <button class="toggle-vis" data-column="12">Peak Location</button> + <button class="toggle-vis" data-column="13">Effect Size</button> + {% else %} + <button class="toggle-vis" data-column="3">Location</button> + <button class="toggle-vis" data-column="4">Sample {% if corr_method == 'pearson' %}r{% else %}rho{% endif %}</button> + <button class="toggle-vis" data-column="5">N</button> + <button class="toggle-vis" data-column="6">Sample p({% if corr_method == 'pearson' %}r{% else %}rho{% endif %})</button> + {% endif %} </div> - <div style="width: 100%; min-width: {% if target_dataset.type == "ProbeSet" %}1700px{% elif target_dataset.type == "Publish" %}1600px{% else %}600px{% endif %};"> + <div style="width: 100%; {% if target_dataset.type == "ProbeSet" %}min-width: 1700px;{% elif target_dataset.type == "Publish" %}min-width: 1600px;{% else %}width: 650px;{% endif %}"> <table id="trait_table" class="table-hover table-striped cell-border" style="float: left;"> <thead> <tr> @@ -127,77 +123,7 @@ </thead> <tbody> - {% for trait in correlation_results %} - <tr> - <td><INPUT TYPE="checkbox" NAME="searchResult" class="checkbox trait_checkbox" style="padding-right: 0px;" VALUE="{{ data_hmac('{}:{}'.format(trait.name, trait.dataset.name)) }}"></td> - <td data-export="{{ loop.index }}" style="padding-left: 8px; padding-right: 0px; padding-top: 4px; align: right;">{{ loop.index }}</td> - <td data-export="{{ trait.name }}"> - <a href="{{ url_for('show_trait_page', - trait_id = trait.name, - dataset = trait.dataset.name - )}}"> - {{ trait.name }} - </a> - </td> - {% if target_dataset.type == 'ProbeSet' %} - <td data-export="{{ trait.symbol }}">{{ trait.symbol }}</td> - <td data-export="{{ trait.description_display }}">{{ trait.description_display }}</TD> - <td data-export="{{ trait.location_repr }}" style="white-space: nowrap;">{{ trait.location_repr }}</td> - <td data-export="{{ '%0.3f' % trait.mean|float }}" align="right">{{ '%0.3f' % trait.mean|float }}</td> - <td data-export="{{ '%0.3f'|format(trait.sample_r) }}"" align="right"><a target="_blank" href="corr_scatter_plot?dataset_1={% if dataset.name == 'Temp' %}Temp_{{ dataset.group.name }}{% else %}{{ dataset.name }}{% endif %}&dataset_2={% if trait.dataset.name == 'Temp' %}Temp_{{ trait.dataset.group.name }}{% else %}{{ trait.dataset.name }}{% endif %}&trait_1={{ this_trait.name }}&trait_2={{ trait.name }}">{{ '%0.3f'|format(trait.sample_r) }}</a></td> - <td data-export="{{ trait.num_overlap }}" align="right">{{ trait.num_overlap }}</td> - <td data-export="{{ '%0.3e'|format(trait.sample_p) }}" align="right">{{ '%0.3e'|format(trait.sample_p) }}</td> - {% if trait.lit_corr == "" or trait.lit_corr == 0.000 %} - <td data-export="--" align="right">--</td> - {% else %} - <td data-export="{{ '%0.3f'|format(trait.lit_corr) }}" align="right">{{ '%0.3f'|format(trait.lit_corr) }}</td> - {% endif %} - {% if trait.tissue_corr == "" or trait.tissue_corr == 0.000 %} - <td data-export="--" align="right">--</td> - <td data-export="--" align="right">--</td> - {% else %} - <td data-export="{{ '%0.3f'|format(trait.tissue_corr) }}" align="right">{{ '%0.3f'|format(trait.tissue_corr) }}</td> - <td data-export="{{ '%0.3e'|format(trait.tissue_pvalue) }}" align="right">{{ '%0.3e'|format(trait.tissue_pvalue) }}</td> - {% endif %} - <td data-export={% if trait.LRS_score_repr != "N/A" %}"{{ '%0.1f' % trait.LRS_score_repr|float }}"{% else %}"N/A"{% endif %} align="right">{% if trait.LRS_score_repr != "N/A" %}{{ '%0.1f' % trait.LRS_score_repr|float }}{% else %}N/A{% endif %}</td> - <td data-export="{{ trait.LRS_location_repr }}" align="right">{{ trait.LRS_location_repr }}</td> - <td data-export={% if trait.additive != "" %}"{{ '%0.3f' % trait.additive|float }}"{% else %}"N/A"{% endif %} align="right">{% if trait.additive != "" %}{{ '%0.3f' % trait.additive|float }}{% else %}N/A{% endif %}</td> - {% elif target_dataset.type == "Publish" %} - {% if trait.abbreviation %} - <td title="{{ trait.abbreviation }}" data-export="{{ trait.abbreviation }}">{% if trait.abbreviation|length > 20 %}{{ trait.abbreviation[:20] }}...{% else %}{{ trait.abbreviation }}{% endif %}</td> - {% else %} - <td data-export="N/A">N/A</td> - {% endif %} - <td data-export="{{ trait.description_display }}">{% if trait.description_display|length > 70 %}{{ trait.description_display[:70] }}...{% else %}{{ trait.description_display }}{% endif %}</td> - {% if trait.authors %} - {% set authors_list = trait.authors.split(',') %} - <td data-export="{{ trait.authors }}">{% if authors_list|length > 6 %}{{ authors_list[:6]|join(', ') }}, et al.{% else %}{{ trait.authors }}{% endif %}</td> - {% else %} - <td data-export="N/A">N/A</td> - {% endif %} - <td data-export="{{ trait.pubmed_text }}"> - {% if trait.pubmed_text != "N/A" %} - <a href="{{ trait.pubmed_link }}"> - {{ trait.pubmed_text }} - </a> - {% else %} - {{ trait.pubmed_text }} - {% endif %} - </td> - <td data-export="{{ '%0.3f'|format(trait.sample_r) }}"" align="right"><a target="_blank" href="corr_scatter_plot?dataset_1={% if dataset.name == 'Temp' %}Temp_{{ dataset.group.name }}{% else %}{{ dataset.name }}{% endif %}&dataset_2={{ trait.dataset.name }}&trait_1={{ this_trait.name }}&trait_2={{ trait.name }}">{{ '%0.3f'|format(trait.sample_r) }}</a></td> - <td data-export="{{ trait.num_overlap }}" align="right">{{ trait.num_overlap }}</td> - <td data-export="{{ '%0.3e'|format(trait.sample_p) }}" align="right">{{ '%0.3e'|format(trait.sample_p) }}</td> - <td data-export="{{ trait.LRS_score_repr }}" align="right">{{ trait.LRS_score_repr }}</td> - <td data-export="{{ trait.LRS_location_repr }}" align="right">{{ trait.LRS_location_repr }}</td> - <td data-export={% if trait.additive != "" %}"{{ '%0.3f' % trait.additive|float }}"{% else %}"N/A"{% endif %} align="right">{% if trait.additive != "" %}{{ '%0.3f' % trait.additive|float }}{% else %}N/A{% endif %}</td> - {% elif target_dataset.type == "Geno" %} - <td data-export="{{ trait.location_repr }}" align="right">{{ trait.location_repr }}</TD> - <td data-export="{{ '%0.3f'|format(trait.sample_r) }}"" align="right"><a target="_blank" href="corr_scatter_plot?dataset_1={% if dataset.name == 'Temp' %}Temp_{{ dataset.group.name }}{% else %}{{ dataset.name }}{% endif %}&dataset_2={{ trait.dataset.name }}&trait_1={{ this_trait.name }}&trait_2={{ trait.name }}">{{ '%0.3f'|format(trait.sample_r) }}</a></td> - <td data-export="{{ trait.num_overlap }}" align="right">{{ trait.num_overlap }}</td> - <td data-export="{{ '%0.3e'|format(trait.sample_p) }}" align="right">{{ '%0.3e'|format(trait.sample_p) }}</td> - {% endif %} - </tr> - {% endfor %} + <td colspan="100%" align="center"><br><b><font size="15">Loading...</font></b><br></td> </tbody> </table> </div> @@ -209,12 +135,15 @@ <script type="text/javascript" src="/static/new/javascript/search_results.js"></script> <script language="javascript" type="text/javascript" src="/static/new/js_external/jszip.min.js"></script> - <script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script> - + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/underscore.min.js') }}"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='jszip/jszip.min.js') }}"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/underscore.min.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/buttons/js/dataTables.buttons.min.js') }}"></script> - <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/buttons/js/buttons.colVis.min.js') }}"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/buttons/js/buttons.html5.min.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/natural.js') }}"></script> + <script language="javascript" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/js/all.min.js"></script> + <script language="javascript" type="text/javascript" src="https://cdn.datatables.net/scroller/2.0.2/js/dataTables.scroller.min.js"></script> <script type="text/javascript" charset="utf-8"> var table_json = {{ json_results | safe }} @@ -294,193 +223,351 @@ {% endif %} $(document).ready( function () { - - $('#trait_table tr').click(function(event) { - if (event.target.type !== 'checkbox') { - $(':checkbox', this).trigger('click'); - } - }); - - function change_buttons() { - buttons = ["#add", "#remove"]; - num_checked = $('.trait_checkbox:checked').length; - 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); - } - } - if ($(this).is(":checked")) { - if (!$(this).closest('tr').hasClass('selected')) { - $(this).closest('tr').addClass('selected') - } - } - else { - if ($(this).closest('tr').hasClass('selected')) { - $(this).closest('tr').removeClass('selected') - } - } - } - - console.time("Creating table"); - - {% if target_dataset.type == "ProbeSet" %} table_conf = { - "drawCallback": function( settings ) { - $('#trait_table tr').click(function(event) { - if (event.target.type !== 'checkbox') { - $(':checkbox', this).trigger('click'); - } - }); - $('.trait_checkbox:checkbox').on("change", change_buttons); - }, buttons: [ - { - extend: 'columnsToggle', - columns: function( idx, data, node ) { - if (idx != 0) { - return true; - } else { - return false; - } - }, - postfixButtons: [ 'colvisRestore' ] + { + extend: 'csvHtml5', + text: 'Download <span class="glyphicon glyphicon-download"></span>', + className: 'btn btn-default', + exportOptions: { + columns: 'th:not(:first-child)' } + } + ], + 'drawCallback': function( settings ) { + $('#trait_table 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")){ + $(this).removeClass("selected") + } else { + $(this).addClass("selected") + } + }); + $('.trait_checkbox:checkbox').on("change", change_buttons); + }, + "data": table_json, + "columns": [ + { + 'data': null, + 'width': "25px", + 'orderDataType': "dom-checkbox", + 'orderSequence': [ "desc", "asc"], + 'render': function(data, type, row, meta) { + return '<input type="checkbox" name="searchResult" class="checkbox trait_checkbox" value="' + data.hmac + '">' + } + }, + { + 'title': "Index", + 'type': "natural", + 'width': "30px", + 'data': "index" + }, + { + 'title': "Record", + 'type': "natural-minus-na", + 'data': null, + 'width': "60px", + 'render': function(data, type, row, meta) { + return '<a target="_blank" href="/show_trait?trait_id=' + data.trait_id + '&dataset=' + data.dataset + '">' + data.trait_id + '</a>' + } + }{% if target_dataset.type == 'ProbeSet' %}, + { + 'title': "Symbol", + 'type': "natural", + 'width': "120px", + 'data': "symbol" + }, + { + 'title': "Description", + 'type': "natural", + 'data': null, + 'render': function(data, type, row, meta) { + try { + return decodeURIComponent(escape(data.description)) + } catch(err){ + return escape(data.description) + } + } + }, + { + 'title': "Location", + 'type': "natural-minus-na", + 'width': "125px", + 'data': "location" + }, + { + 'title': "Mean", + 'type': "natural-minus-na", + 'width': "40px", + 'data': "mean", + 'orderSequence': [ "desc", "asc"] + }, + { + 'title': "Sample {% if corr_method == 'pearson' %}r{% else %}rho{% endif %}", + 'type': "natural-minus-na", + 'width': "40px", + 'data': null, + 'orderSequence': [ "desc", "asc"], + 'render': function(data, type, row, meta) { + if (data.sample_r != "N/A") { + return "<a target\"_blank\" href=\"corr_scatter_plot?method={% if corr_method == 'spearman' %}spearman{% else %}pearson{% endif %}&dataset_1={% if dataset.name == 'Temp' %}Temp_{{ dataset.group.name }}{% else %}{{ dataset.name }}{% endif %}&dataset_2=" + data.dataset + "&trait_1={{ this_trait.name }}&trait_2=" + data.trait_id + "\">" + data.sample_r + "</a>" + } else { + return data.sample_r + } + } + }, + { + 'title': "N", + 'type': "natural-minus-na", + 'width': "40px", + 'data': "num_overlap", + 'orderSequence': [ "desc", "asc"] + }, + { + 'title': "Sample p({% if corr_method == 'pearson' %}r{% else %}rho{% endif %})", + 'type': "scientific", + 'width': "65px", + 'data': "sample_p", + 'orderSequence': [ "desc", "asc"] + }, + { + 'title': "Lit {% if corr_method == 'pearson' %}r{% else %}rho{% endif %}", + 'type': "natural-minus-na", + 'width': "40px", + 'data': "lit_corr", + 'orderSequence': [ "desc", "asc"] + }, + { + 'title': "Tissue {% if corr_method == 'pearson' %}r{% else %}rho{% endif %}", + 'type': "natural-minus-na", + 'width': "40px", + 'data': "tissue_corr", + 'orderSequence': [ "desc", "asc"] + }, + { + 'title': "Tissue p({% if corr_method == 'pearson' %}r{% else %}rho{% endif %})", + 'type': "natural-minus-na", + 'width': "40px", + 'data': "tissue_pvalue", + 'orderSequence': [ "desc", "asc"] + }, + { + 'title': "Peak <a href=\"{{ url_for('glossary_blueprint.glossary') }}#LRS\" target=\"_blank\" style=\"color: white;\"> <i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i></a>LOD", + 'type': "natural-minus-na", + 'data': "lod_score", + 'width': "60px", + 'orderSequence': [ "desc", "asc"] + }, + { + 'title': "Peak Location", + 'type': "natural-minus-na", + 'width': "125px", + 'data': "lrs_location" + }, + { + 'title': "Effect Size<a href=\"http://gn1.genenetwork.org/glossary.html#A\" target=\"_blank\" style=\"color: white;\"> <i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i></a>", + 'type': "natural-minus-na", + 'data': "additive", + 'width': "85px", + 'orderSequence': [ "desc", "asc"] + }{% elif target_dataset.type == 'Publish' %}, + { + 'title': "Abbreviation", + 'type': "natural", + 'width': "200px", + 'data': null, + 'render': function(data, type, row, meta) { + try { + return decodeURIComponent(escape(data.abbreviation_display)) + } catch(err){ + return data.abbreviation_display + } + } + }, + { + 'title': "Description", + 'type': "natural", + 'data': null, + 'render': function(data, type, row, meta) { + try { + return decodeURIComponent(escape(data.description)) + } catch(err){ + return data.description + } + } + }, + { + 'title': "Mean", + 'type': "natural-minus-na", + 'width': "40px", + 'data': "mean", + 'orderSequence': [ "desc", "asc"] + }, + { + 'title': "Authors", + 'type': "natural", + 'width': "400px", + 'data': null, + 'render': function(data, type, row, meta) { + try { + return decodeURIComponent(escape(data.authors_display)) + } catch(err){ + return data.authors_display + } + } + }, + { + 'title': "Year", + 'type': "natural-minus-na", + 'data': null, + 'width': "80px", + 'render': function(data, type, row, meta) { + if (data.pubmed_id != "N/A"){ + return '<a href="' + data.pubmed_link + '">' + data.pubmed_text + '</a>' + } else { + return data.pubmed_text + } + }, + 'orderSequence': [ "desc", "asc"] + }, + { + 'title': "Sample {% if corr_method == 'pearson' %}r{% else %}rho{% endif %}", + 'type': "natural-minus-na", + 'width': "40px", + 'data': null, + 'orderSequence': [ "desc", "asc"], + 'render': function(data, type, row, meta) { + if (data.sample_r != "N/A") { + return "<a target\"_blank\" href=\"corr_scatter_plot?method={% if corr_method == 'spearman' %}spearman{% else %}pearson{% endif %}&dataset_1={% if dataset.name == 'Temp' %}Temp_{{ dataset.group.name }}{% else %}{{ dataset.name }}{% endif %}&dataset_2=" + data.dataset + "&trait_1={{ this_trait.name }}&trait_2=" + data.trait_id + "\">" + data.sample_r + "</a>" + } else { + return data.sample_r + } + } + }, + { + 'title': "N", + 'type': "natural-minus-na", + 'width': "40px", + 'data': "num_overlap", + 'orderSequence': [ "desc", "asc"] + }, + { + 'title': "Sample p({% if corr_method == 'pearson' %}r{% else %}rho{% endif %})", + 'type': "scientific", + 'width': "65px", + 'data': "sample_p", + 'orderSequence': [ "desc", "asc"] + }, + { + 'title': "Peak <a href=\"{{ url_for('glossary_blueprint.glossary') }}#LRS\" target=\"_blank\" style=\"color: white;\"> <i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i></a>LOD", + 'type': "natural-minus-na", + 'data': "lod_score", + 'width': "60px", + 'orderSequence': [ "desc", "asc"] + }, + { + 'title': "Peak Location", + 'type': "natural-minus-na", + 'width': "125px", + 'data': "lrs_location" + }, + { + 'title': "Effect Size<a href=\"http://gn1.genenetwork.org/glossary.html#A\" target=\"_blank\" style=\"color: white;\"> <i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i></a>", + 'type': "natural-minus-na", + 'data': "additive", + 'width': "85px", + 'orderSequence': [ "desc", "asc"] + }{% elif target_dataset.type == 'Geno' %}, + { + 'title': "Location", + 'type': "natural-minus-na", + 'width': "120px", + 'data': "location" + }, + { + 'title': "Sample {% if corr_method == 'pearson' %}r{% else %}rho{% endif %}", + 'type': "natural-minus-na", + 'width': "40px", + 'data': null, + 'orderSequence': [ "desc", "asc"], + 'render': function(data, type, row, meta) { + if (data.sample_r != "N/A") { + return "<a target\"_blank\" href=\"corr_scatter_plot?method={% if corr_method == 'spearman' %}spearman{% else %}pearson{% endif %}&dataset_1={% if dataset.name == 'Temp' %}Temp_{{ dataset.group.name }}{% else %}{{ dataset.name }}{% endif %}&dataset_2=" + data.dataset + "&trait_1={{ this_trait.name }}&trait_2=" + data.trait_id + "\">" + data.sample_r + "</a>" + } else { + return data.sample_r + } + } + }, + { + 'title': "N", + 'type': "natural-minus-na", + 'width': "40px", + 'data': "num_overlap", + 'orderSequence': [ "desc", "asc"] + }, + { + 'title': "Sample p({% if corr_method == 'pearson' %}r{% else %}rho{% endif %})", + 'type': "scientific", + 'width': "65px", + 'data': "sample_p", + 'orderSequence': [ "desc", "asc"] + }{% endif %} ], "columnDefs": [ { "targets": 0, "orderable": false } ], - "columns": [ - { "type": "natural" }, - { "type": "natural" }, - { "type": "natural" }, - { "type": "natural" }, - { "type": "natural", "width": "15%" }, - { "type": "natural" }, - { "type": "natural" }, - { "orderDataType": "dom-innertext", 'orderSequence': [ "desc", "asc"] }, - { "type": "natural" }, - { "type": "scientific" }, - { "type": "numeric-html", 'orderSequence': [ "desc", "asc"] }, - { "type": "numeric-html", 'orderSequence': [ "desc", "asc"] }, - { "type": "scientific" }, - { "type": "natural-minus-na" }, - { "type": "natural-minus-na" }, - { "type": "natural-minus-na" } - ], - "createdRow": function ( row, data, index ) { - $('td', row).eq(4).attr('title', $('td', row).eq(4).text()); - if ($('td', row).eq(4).text().length > 40) { - $('td', row).eq(4).text($('td', row).eq(4).text().substring(0, 40)); - $('td', row).eq(4).text($('td', row).eq(4).text() + '...') - } - }, + {% if target_dataset.type == 'Geno' %} + "order": [[6, "asc" ]], + {% elif target_dataset.type == 'Publish' %} + "order": [[10, "asc" ]], + {% else %} "order": [[9, "asc" ]], - "sDom": "Btir", - "iDisplayLength": -1, - "autoWidth": false, - "deferRender": true, + {% endif %} + "sDom": "itir", + "autoWidth": true, "bSortClasses": false, - "paging": false, - "orderClasses": true + "scrollY": "100vh", + "scroller": true, + "scrollCollapse": true } - {% elif target_dataset.type == "Publish" %} - table_conf = { - "drawCallback": function( settings ) { - $('#trait_table tr').click(function(event) { - if (event.target.type !== 'checkbox') { - $(':checkbox', this).trigger('click'); - } - }); - $('.trait_checkbox:checkbox').on("change", change_buttons); - }, - "buttons": [ - { - extend: 'columnsToggle', - columns: function( idx, data, node ) { - if (idx != 0) { - return true; - } else { - return false; - } - }, - postfixButtons: [ 'colvisRestore' ] - } - ], - "columnDefs": [ - { "targets": 0, "orderable": false } - ], - "columns": [ - { "type": "natural" }, - { "type": "natural" }, - { "type": "natural" }, - { "type": "natural" }, - { "type": "natural", "width": "20%" }, - { "type": "natural", "width": "12%" }, - { "type": "natural-minus-na" }, - { "orderDataType": "dom-innertext", 'orderSequence': [ "desc", "asc"] }, - { "type": "natural" }, - { "type": "scientific" }, - { "type": "natural-minus-na" }, - { "type": "natural-minus-na" }, - { "type": "natural-minus-na" } - ], - "order": [[9, "asc" ]], - "sDom": "Btir", - "iDisplayLength": -1, - "autoWidth": false, - "deferRender": true, - "bSortClasses": false, - "paging": false, - "orderClasses": true, - } - {% elif target_dataset.type == "Geno" %} - table_conf = { - "paging": false, - buttons: [ - { - extend: 'columnsToggle', - columns: function( idx, data, node ) { - if (idx != 0) { - return true; - } else { - return false; - } - }, - postfixButtons: [ 'colvisRestore' ] - } - ], - "columnDefs": [ - { "targets": 0, "orderable": false } - ], - "columns": [ - { "type": "natural" }, - { "type": "natural" }, - { "type": "natural" }, - { "type": "natural" }, - { "orderDataType": "dom-innertext", 'orderSequence': [ "desc", "asc"] }, - { "type": "natural-minus-na" }, - { "type": "scientific" } - ], - "order": [[6, "asc" ]], - "sDom": "Btir", - "autoWidth": false, - "bDeferRender": true, - "scrollY": "800px", - "scrollCollapse": false - } - {% endif %} + trait_table = $('#trait_table').DataTable(table_conf); + + trait_table.buttons().container().appendTo('#export_options') - the_table = $('#trait_table').DataTable(table_conf); + $('.buttons-csv').removeClass('dt-button') - console.timeEnd("Creating table"); + trait_table.on( 'order.dt search.dt draw.dt', function () { + trait_table.column(1, {search:'applied', order:'applied'}).nodes().each( function (cell, i) { + cell.innerHTML = i+1; + } ); + } ).draw(); + + $('.toggle-vis').on('click', function (e) { + e.preventDefault(); + + // Get the column API object + var column = trait_table.column( $(this).attr('data-column') ); + + // Toggle the visibility + column.visible( ! column.visible() ); + + if (column.visible()){ + $(this).removeClass("active"); + } else { + $(this).addClass("active"); + } + } ); + + $('#redraw').on('click', function (e) { + e.preventDefault(); + trait_table.columns().visible( true ); + $('.toggle-vis.active').removeClass('active'); + }); submit_special = function(url) { $("#correlation_form").attr("action", url); @@ -498,7 +585,7 @@ $("#select_traits").click(function() { console.log("redrawing") - the_table.draw(); + trait_table.draw(); }); }); </script> diff --git a/wqflask/wqflask/templates/ctl_results.html b/wqflask/wqflask/templates/ctl_results.html index e374eb4e..6f009183 100644 --- a/wqflask/wqflask/templates/ctl_results.html +++ b/wqflask/wqflask/templates/ctl_results.html @@ -1,7 +1,7 @@ {% extends "base.html" %} {% block css %} <link rel="stylesheet" type="text/css" href="/static/new/css/network_graph.css" /> - <link rel="stylesheet" type="text/css" href="/js/cytoscape-panzoom/cytoscape.js-panzoom.css" /> + <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='cytoscape-panzoom/cytoscape.js-panzoom.css') }}"> <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='qtip2/jquery.qtip.min.css') }}"> <style> /* The Cytoscape Web container must have its dimensions set. */ @@ -64,13 +64,13 @@ gn2_url = "{{ gn2_url | safe }}" </script> - <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='qtip2/jquery.qtip.min.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/underscore.min.js') }}"></script> - <script language="javascript" type="text/javascript" src="/js/cytoscape/cytoscape.min.js"></script> - <script language="javascript" type="text/javascript" src="/js/cytoscape-panzoom/cytoscape-panzoom.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='cytoscape/cytoscape.min.js') }}"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='cytoscape-panzoom/cytoscape-panzoom.js') }}"></script> <!-- should be using cytoscape-popper for tips, see docs --> - <script language="javascript" type="text/javascript" src="/js/cytoscape-qtip/cytoscape-qtip.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='cytoscape-qtip/cytoscape-qtip.js') }}"></script> <!-- Loads flash - who wants that? diff --git a/wqflask/wqflask/templates/docedit.html b/wqflask/wqflask/templates/docedit.html index b87c5b41..50bb96c0 100644 --- a/wqflask/wqflask/templates/docedit.html +++ b/wqflask/wqflask/templates/docedit.html @@ -16,7 +16,7 @@ {{content|safe}} </textarea> <button class="submit_changes" style="margin-top: 20px;">Submit Changes</button> - <script src="/static/packages/ckeditor/ckeditor.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='ckeditor/ckeditor.js') }}"></script> <script type="text/javascript"> CKEDITOR.replace('ckcontent', { height: '650px', diff --git a/wqflask/wqflask/templates/environment.html b/wqflask/wqflask/templates/environment.html new file mode 100644 index 00000000..89e805ce --- /dev/null +++ b/wqflask/wqflask/templates/environment.html @@ -0,0 +1,160 @@ +{% extends "base.html" %} + +{% block title %}Glossary{% endblock %} + +{% block css %} +<link rel="stylesheet" type="text/css" href="/static/new/css/markdown.css" /> +{% endblock %} + +{% block content %} + +<div id="markdown" class="container"> + + <div class="cls-table-style">{{ rendered_markdown|safe }} </div> +</div> + +{% if svg_data %} + +<div class="graph-legend"> + <h1>Chord dependency Graph of Genenetwork2</h1> + Graph generated from <a href="http://git.genenetwork.org/guix-bioinformatics/guix-bioinformatics/src/branch/master/gn/packages/genenetwork.scm">genenetwork.scm</a>. You can zoom in and out within the bounding box. +</div> + +<div id="guix-graph"></div> + +<!-- Display the svg graph --> + +<div id="guix-svg-graph"> + <h1>The dependency graph is shown below</h1> + + <p>To explore this image SVG you may want to open it in new browser page and zoom in. Or use an SVG viewing application.</p> + + <img alt="Dependency graph of the tools needed to build python3-genenetwork2" src="{{url_for('environments_blueprint.svg_graph')}}"/> +</div> +{% endif %} + +{% endblock %} + +{% block js %} + +{% if svg_data %} +<script language="javascript" type="text/javascript" src="{{ url_for('js', filename='d3js/d3.min.js') }}"></script> +<script type="text/javascript"> + {{ svg_data|safe }} + // based on http://bl.ocks.org/mbostock/1046712 under GPLv3 + // Adapted from: https://elephly.net/graph.html + var outerRadius = (nodeArray.length * 10) / 2, + innerRadius = outerRadius - 100, + width = outerRadius * 2, + height = outerRadius * 2, + colors = d3.scale.category20c(), + matrix = []; + + function neighborsOf (node) { + return links.filter(function (e) { + return e.source === node; + }).map(function (e) { + return e.target; + }); + } + + function zoomed () { + zoomer.attr("transform", + "translate(" + d3.event.translate + ")" + + "scale(" + d3.event.scale + ")"); + } + + function fade (opacity, root) { + return function (g, i) { + root.selectAll("g path.chord") + .filter(function (d) { + return d.source.index != i && d.target.index != i; + }) + .transition() + .style("opacity", opacity); + }; + } + + // Now that we have all nodes in an object we can replace each reference + // with the actual node object. + links.forEach(function (link) { + link.target = nodes[link.target]; + link.source = nodes[link.source]; + }); + + // Construct a square matrix for package dependencies + nodeArray.forEach(function (d, index, arr) { + var source = index, + row = matrix[source]; + if (!row) { + row = matrix[source] = []; + for (var i = -1; ++i < arr.length;) row[i] = 0; + } + neighborsOf(d).forEach(function (d) { row[d.index]++; }); + }); + + // chord layout + var chord = d3.layout.chord() + .padding(0.01) + .sortSubgroups(d3.descending) + .sortChords(d3.descending) + .matrix(matrix); + + var arc = d3.svg.arc() + .innerRadius(innerRadius) + .outerRadius(innerRadius + 20); + + var zoom = d3.behavior.zoom() + .scaleExtent([0.1, 10]) + .on("zoom", zoomed); + + var svg = d3.select("#guix-graph").append("svg") + .attr("width", "100%") + .attr("height", "100%") + .attr('viewBox','0 0 '+Math.min(width,height)+' '+Math.min(width,height)) + .attr('preserveAspectRatio','xMinYMin') + .call(zoom); + + var zoomer = svg.append("g"); + + var container = zoomer.append("g") + .attr("transform", "translate(" + outerRadius + "," + outerRadius + ")"); + + // Group for arcs and labels + var g = container.selectAll(".group") + .data(chord.groups) + .enter().append("g") + .attr("class", "group") + .on("mouseout", fade(1, container)) + .on("mouseover", fade(0.1, container)); + + // Draw one segment per package + g.append("path") + .style("fill", function (d) { return colors(d.index); }) + .style("stroke", function (d) { return colors(d.index); }) + .attr("d", arc); + + // Add circular labels + g.append("text") + .each(function (d) { d.angle = (d.startAngle + d.endAngle) / 2; }) + .attr("dy", ".35em") + .attr("transform", function (d) { + return "rotate(" + (d.angle * 180 / Math.PI - 90) + ")" + + "translate(" + (innerRadius + 26) + ")" + + (d.angle > Math.PI ? "rotate(180)" : ""); + }) + .style("text-anchor", function (d) { return d.angle > Math.PI ? "end" : null; }) + .text(function (d) { return nodeArray[d.index].label; }); + + // Draw chords from source to target; color by source. + container.selectAll(".chord") + .data(chord.chords) + .enter().append("path") + .attr("class", "chord") + .style("stroke", function (d) { return d3.rgb(colors(d.source.index)).darker(); }) + .style("fill", function (d) { return colors(d.source.index); }) + .attr("d", d3.svg.chord().radius(innerRadius)); +</script> +{% endif %} + +{% endblock %} diff --git a/wqflask/wqflask/templates/environments.html b/wqflask/wqflask/templates/environments.html deleted file mode 100644 index 5ef91a95..00000000 --- a/wqflask/wqflask/templates/environments.html +++ /dev/null @@ -1,83 +0,0 @@ -{% extends "base.html" %} - -{% block title %}Environments{% endblock %} - -{% block content %} -<div class="container"> - <h3>System Properties</h3> - <table class="table table-bordered table-striped table-hover" style="width: 800px;"> - <tbody> - <tr><td colspan="4">Operating System</td></tr> - <tr> - <td style="text-align: right;">Ubuntu</td> - <td>12.04.5 LTS 64-bit</td> - <td><a target="_blank" href="http://www.ubuntu.com/">http://www.ubuntu.com/</a></td> - <td>Free software licenses (mainly GPL)</td> - </tr> - <tr><td colspan="4">Database</td></tr> - <tr> - <td style="text-align: right;">MySQL</td> - <td>5.5.40</td> - <td><a target="_blank" href="http://www.mysql.com/">http://www.mysql.com/</a></td> - <td>GPL (version 2) or proprietary</td> - </tr> - <tr><td colspan="4">Python</td></tr> - <tr> - <td style="text-align: right;">Python</td> - <td>2.7.3</td> - <td><a target="_blank" href="http://www.python.org/">http://www.python.org/</a></td> - <td>Python Software Foundation License</td> - </tr> - <tr> - <td style="text-align: right;">Flask</td> - <td>0.9</td> - <td><a target="_blank" href="http://flask.pocoo.org/">http://flask.pocoo.org/</a></td> - <td>BSD</td> - </tr> - <tr> - <td style="text-align: right;">Jinja2</td> - <td>2.6</td> - <td><a target="_blank" href="http://jinja.pocoo.org/">http://jinja.pocoo.org/</a></td> - <td>BSD</td> - </tr> - <tr> - <td style="text-align: right;">NumPy</td> - <td>1.7.0</td> - <td><a target="_blank" href="http://www.numpy.org/">http://www.numpy.org/</a></td> - <td>BSD-new</td> - </tr> - <tr> - <td style="text-align: right;">SciPy</td> - <td>0.11.0</td> - <td><a target="_blank" href="http://www.scipy.org/">http://www.scipy.org/</a></td> - <td>BSD-new</td> - </tr> - <tr><td colspan="4">JavaScript / CSS</td></tr> - <tr> - <td style="text-align: right;">jQuery</td> - <td>1.10.2</td> - <td><a target="_blank" href="http://jquery.com/">http://jquery.com/</a></td> - <td>MIT</td> - </tr> - <tr> - <td style="text-align: right;">Bootstrap</td> - <td>2.3.1</td> - <td><a target="_blank" href="http://getbootstrap.com/">http://getbootstrap.com/</a></td> - <td>MIT License (Apache License 2.0 prior to 3.1.0)</td> - </tr> - <tr> - <td style="text-align: right;">DataTables</td> - <td>1.9.4</td> - <td><a target="_blank" href="http://www.datatables.net/">http://www.datatables.net/</a></td> - <td>MIT</td> - </tr> - <tr> - <td style="text-align: right;">CKEditor</td> - <td>4.4.5</td> - <td><a target="_blank" href="http://ckeditor.com/">http://ckeditor.com/</a></td> - <td>GPL, LGPL and MPL</td> - </tr> - </tbody> - </table> -</div> -{% endblock %} diff --git a/wqflask/wqflask/templates/facilities.html b/wqflask/wqflask/templates/facilities.html new file mode 100644 index 00000000..56b127f9 --- /dev/null +++ b/wqflask/wqflask/templates/facilities.html @@ -0,0 +1,24 @@ +{% extends "base.html" %} + +{% block title %}Facilities{% endblock %} + +{% block css %} +<link rel="stylesheet" type="text/css" href="/static/new/css/markdown.css" /> +{% endblock %} + +{% block content %} + + <div class="github-btn-container"> + <div class="github-btn"> + <a href="https://github.com/genenetwork/gn-docs/blob/master/general/help/facilities.md"> + Edit Text + <img src="/static/images/edit.png"> + </a> + </div> +</div> +<div id="markdown" class="container"> + {{ rendered_markdown|safe }} + +</div> + +{% endblock %}
\ No newline at end of file diff --git a/wqflask/wqflask/templates/glossary.html b/wqflask/wqflask/templates/glossary.html new file mode 100644 index 00000000..aaee7c5a --- /dev/null +++ b/wqflask/wqflask/templates/glossary.html @@ -0,0 +1,23 @@ +{% extends "base.html" %} + +{% block title %}Glossary{% endblock %} + +{% block css %} +<link rel="stylesheet" type="text/css" href="/static/new/css/markdown.css" /> +{% endblock %} + +{% block content %} + +<div class="github-btn-container"> + <div class="github-btn"> + <a href="https://github.com/genenetwork/gn-docs/blob/master/general/glossary/glossary.md"> + Edit Text + <img src="/static/images/edit.png"> + </a> + </div> +</div> +<div id="markdown" class="container"> + + {{ rendered_markdown|safe }} +</div> +{% endblock %} diff --git a/wqflask/wqflask/templates/gsearch_gene.html b/wqflask/wqflask/templates/gsearch_gene.html index d2c78d65..6fd0abe8 100644 --- a/wqflask/wqflask/templates/gsearch_gene.html +++ b/wqflask/wqflask/templates/gsearch_gene.html @@ -48,7 +48,7 @@ {% block js %} <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/md5.min.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script> - <script language="javascript" type="text/javascript" src="/static/new/js_external/jszip.min.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='jszip/jszip.min.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/natural.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/colReorder/js/dataTables.colReorder.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/colResize/dataTables.colResize.js') }}"></script> @@ -215,7 +215,7 @@ 'orderSequence': [ "desc", "asc"] }, { - 'title': "Max<br>LRS<a href=\"http://genenetwork.org//glossary.html#LRS\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>", + 'title': "Max<br>LRS<a href=\"{{ url_for('glossary_blueprint.glossary') }}#LRS\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>", 'type': "natural-minus-na", 'data': "LRS_score_repr", 'orderSequence': [ "desc", "asc"] @@ -227,7 +227,7 @@ 'data': "max_lrs_text" }, { - 'title': "Additive<br>Effect<a href=\"http://genenetwork.org//glossary.html#A\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>", + 'title': "Additive<br>Effect<a href=\"{{ url_for('glossary_blueprint.glossary') }}#A\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>", 'type': "natural-minus-na", 'width': "50px", 'data': "additive", @@ -262,9 +262,9 @@ '<th>Description</th>' + '<th>Location</th>' + '<th>Mean</th>' + - '<th>Max LRS <a href="http://genenetwork.org//glossary.html#LRS" target="_blank" style="color: white;"><sup>?</sup></a></th>' + + '<th>Max LRS <a href="{{ url_for('glossary_blueprint.glossary') }}#LRS" target="_blank" style="color: white;"><sup>?</sup></a></th>' + '<th>Max LRS Location</th>' + - '<th>Additive Effect <a href="http://genenetwork.org//glossary.html#A" target="_blank" style="color: white;"><sup>?</sup></a></th>' + + '<th>Additive Effect <a href="{{ url_for('glossary_blueprint.glossary') }}#A" target="_blank" style="color: white;"><sup>?</sup></a></th>' + '</tr>' + '</tfoot>' ); diff --git a/wqflask/wqflask/templates/gsearch_pheno.html b/wqflask/wqflask/templates/gsearch_pheno.html index c44231f3..0dc6fe5f 100644 --- a/wqflask/wqflask/templates/gsearch_pheno.html +++ b/wqflask/wqflask/templates/gsearch_pheno.html @@ -48,7 +48,7 @@ {% block js %} <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/md5.min.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script> - <script language="javascript" type="text/javascript" src="/static/new/js_external/jszip.min.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='jszip/jszip.min.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/natural.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/colReorder/js/dataTables.colReorder.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/colResize/dataTables.colResize.js') }}"></script> @@ -218,7 +218,7 @@ 'orderSequence': [ "desc", "asc"] }, { - 'title': "Max LRS<a href=\"http://genenetwork.org//glossary.html#LRS\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>", + 'title': "Max LRS<a href=\"{{ url_for('glossary_blueprint.glossary') }}#LRS\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>", 'type': "natural-minus-na", 'data': "LRS_score_repr", 'orderSequence': [ "desc", "asc"] @@ -230,7 +230,7 @@ 'data': "max_lrs_text" }, { - 'title': "Additive Effect<a href=\"http://genenetwork.org//glossary.html#A\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>", + 'title': "Additive Effect<a href=\"{{ url_for('glossary_blueprint.glossary') }}#A\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>", 'type': "natural-minus-na", 'data': "additive", 'orderSequence': [ "desc", "asc"] diff --git a/wqflask/wqflask/templates/heatmap.html b/wqflask/wqflask/templates/heatmap.html index 497838dd..92754266 100644 --- a/wqflask/wqflask/templates/heatmap.html +++ b/wqflask/wqflask/templates/heatmap.html @@ -1,7 +1,7 @@ {% extends "base.html" %} {% block title %}Heatmap{% endblock %} {% block css %} - <link rel="stylesheet" type="text/css" href="/static/new/css/d3-tip.min.css" /> + <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='d3-tip/d3-tip.css') }}" /> <link rel="stylesheet" type="text/css" href="/static/new/css/panelutil.css" /> {% endblock %} {% block content %} <!-- Start of body --> @@ -39,6 +39,6 @@ <script language="javascript" type="text/javascript" src="/static/new/javascript/lod_chart.js"></script> <script language="javascript" type="text/javascript" src="/static/new/javascript/curvechart.js"></script> <script language="javascript" type="text/javascript" src="/static/new/javascript/iplotMScanone_noeff.js"></script> - <script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/underscore.min.js') }}"></script> {% endblock %}
\ No newline at end of file diff --git a/wqflask/wqflask/templates/index_page.html b/wqflask/wqflask/templates/index_page.html index f8720d39..12c28e72 100644 --- a/wqflask/wqflask/templates/index_page.html +++ b/wqflask/wqflask/templates/index_page.html @@ -140,7 +140,7 @@ chromosome 1 between 25 and 30 Mb.</li> <li><b>MEAN=(15 16) LRS=(23 46)</b> in the <b>Combined</b> field finds - highly expressed genes (15 to 16 log2 units) AND with peak <a href="http://www.genenetwork.org/glossary.html#L">LRS</a> + highly expressed genes (15 to 16 log2 units) AND with peak <a href="{{ url_for('glossary_blueprint.glossary') }}#L">LRS</a> linkage between 23 and 46.</li> <li><b>RANGE=(1.5 2.5)</b> in the <b>Any</b> field finds traits with values with a specified fold-range (minimum = 1). @@ -157,12 +157,12 @@ <a href="http://amigo.geneontology.org/amigo/medial_search?q=GO%3A0045202">Gene Ontology</a>.</li> <li><b>GO:0045202 LRS=(9 99 Chr4 122 155) cisLRS=(9 999 10)</b> - finds synapse-associated genes with <a href="http://www.genenetwork.org/glossary.html#E"> + finds synapse-associated genes with <a href="{{ url_for('glossary_blueprint.glossary') }}#E"> cis eQTL</a> on Chr 4 from 122 and 155 Mb with LRS scores between 9 and 999.</li> <li><b>RIF=diabetes LRS=(9 999 Chr2 100 105) transLRS=(9 999 10)</b> - finds diabetes-associated transcripts with peak <a href="http://www.genenetwork.org/glossary.html#E"> + finds diabetes-associated transcripts with peak <a href="{{ url_for('glossary_blueprint.glossary') }}#E"> trans eQTLs</a> on Chr 2 between 100 and 105 Mb with LRS scores between 9 and 999.</li> </ul> diff --git a/wqflask/wqflask/templates/index_page_orig.html b/wqflask/wqflask/templates/index_page_orig.html index 6b3bec9a..7efbdccf 100755 --- a/wqflask/wqflask/templates/index_page_orig.html +++ b/wqflask/wqflask/templates/index_page_orig.html @@ -177,7 +177,7 @@ Gene Ontology</a>.</li> <li><b>RIF=diabetes LRS=(9 999 Chr2 100 105) transLRS=(9 999 10)</b> - finds diabetes-associated transcripts with peak <a href="http://gn1.genenetwork.org/glossary.html#E"> + finds diabetes-associated transcripts with peak <a href="{{ url_for('glossary_blueprint.glossary') }}#E"> trans eQTLs</a> on Chr 2 between 100 and 105 Mb with LRS scores between 9 and 999.</li> </ul> @@ -326,7 +326,7 @@ } </script> - <script type="text/javascript" src="/twitter/js/twitterFetcher_min.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='javascript-twitter-post-fetcher/js/twitterFetcher_min.js') }}"></script> <script type="text/javascript"> var configProfile = { diff --git a/wqflask/wqflask/templates/links.html b/wqflask/wqflask/templates/links.html index 6ff7fc6c..6e91adae 100644 --- a/wqflask/wqflask/templates/links.html +++ b/wqflask/wqflask/templates/links.html @@ -1,451 +1,24 @@ {% extends "base.html" %} -{% block title %}Links{% endblock %} -{% block content %} - -<Table width= "100%" cellSpacing=0 cellPadding=5><TR> - <!-- Body Start from Here --> - <TD vAlign=top width="100%" height=200> - - -<P class="title">Links for Exploring Networks of Genes and Phenotypes </P> - - -<Blockquote class="subtitle">GeneNetwork and WebQTL have integrated links to the following resources</Blockquote> -<Blockquote> -<Blockquote>GN PARTNERS, DEVELOPMENT SITES, AND MIRRORS</Blockquote> -<UL> -<LI><a href="http://genenetwork.helmholtz-hzi.de">German Helmholtz Foundation GeneNetwork</a> at the <A HREF="http://www.helmholtz-hzi.de/en/" target="_empty">Helmholtz Centre for Infection Research (HZI)</A>, Braunschweig Germany, in the <a href="hzi.de/en/research/research_groups/experimental_mouse_genetics/experimental_mouse_genetics/team/" target="_empty">research group</A> of Dr. Klaus Schughart. - -<LI><a href="http://genenetwork.epfl.ch" target="_empty">Swiss GeneNetwork</A> in the Laboratory of Integrative Systems Physiology lead by Dr. Johan Auwerx at the EPFL in Lausanne (initiated Nov 9, 2009) - -<LI><a href="http://www.genenetwork.waimr.uwa.edu.au">Australian GeneNetwork</a> mirror and development sites, Centre for Diabetes Research, University of Western Australia, in the research group of Dr. Grant Morahan <!--was http://130.95.9.19/--> (initiated May 2007) - -<LI><a href="http://webqtl.bic.nus.edu.sg/">Singapore GeneNetwork</a> mirror site at the National University of Singapore, Bioinformatics Center, Dr. Mark De Silva (initiated Oct 2009) - -<LI><a href="http://gn.genetics.ucla.edu" target="_empty">California GeneNetwork</A> mirror site in the Department of Genetics, University of California at Los Angeles, in the research group of Dr. A. Jake Lusis (initiated Aug 2008) - -<LI><a href="http://gnat.versailles.inra.fr/" target="_empty">INRA IJPB, Versailles</A> mirror site in the VAST lab of Dr. Olivier Loudet, Plant Breeding and Genetics Unit (initiated Dec 2008) - - -<LI><a href="http://xzhou3.memphis.edu/" target="_empty">University of Memphis</A> mirror sites in the Bioinformatics Program and research group of Drs. Ramin Homayouni and Mohammed Yazin (initiated June 2009) - -<LI><a href="http://www.computablegenomix.com/">Computable Genomix </a> and the <A HREF="https://grits.eecs.utk.edu/sgo/sgo.html" target="_empty">Semantic Gene Organizer</A> systems are the source of GeneNetwork literature correlation data sets. - -<BR><BR><BR> -<LI><a href="http://genenetwork.org/share/annotations/">Custom Microarray Annotation Files</a> used by GeneNetwork -</UL> -</Blockquote> - -<BR> - -<Blockquote class="subtitle">KEY RESOURCES CONNECTED WITH GENENETWORK</Blockquote> -<Blockquote> -<UL> -<LI><a href="http://mus.well.ox.ac.uk/mouse/HS/" target="_empty">Wellcome Trust Oxford Mouse Resource Portal</a> -<LI><a href="http://www.sanger.ac.uk/mouseportal/" target="_empty">WTSI Mouse Resource Portal</a> - -<LI><a href="http://www.sanger.ac.uk/cgi-bin/modelorgs/mousegenomes/lookseq/index.pl?show=1:10000000-10000000,paired_pileup&win=100&lane=129S1.bam&width=700" target="_empty">Sanger Mouse Sequencing Portal</a> (David Adams and colleagues) - -<LI><a href="http://www.grissom.gr/stranger/StRAnGER.php" target="_empty">StRAnGER</a> Gene Ontology and KEGG pathway analyzer - -<LI><a href="http://phenogen.ucdenver.edu/PhenoGen/index.jsp" target="_empty">PhenoGen Informatics</a> -<LI><a href="http://www.brain-map.org/welcome.do" target="_empty">The Allen Mouse Brain Atlas</a> -<LI><a href="http://amigo.geneontology.org/cgi-bin/amigo/go.cgi" target="_empty">AmiGO</a> -<LI><a href="http://syndb.cbi.pku.edu.cn/" target="_empty">Synapse DB</a> -<LI><a href="https://www.pantherdb.org" target="_empty">ABI Panther</a> -<LI><a href="http://biogps.gnf.org" target="_empty">BioGPS</A> <font>and its predecessor </font> <a href="http://symatlas.gnf.org/SymAtlas/" target="_empty">SymAtlas</A> -<LI><a href="http://mouse.perlegen.com/mouse/download.html -" target="_empty">Perlegen/NIEHS Mouse Sequence Data</A> -<LI><a href="http://www.ontologicaldiscovery.org/" target="_empty">Ontological Discovery Environment</a> -<LI><a href="https://shad.eecs.utk.edu/sgo/sgo.html" target="_empty">Semantic Gene Organizer</a> -<LI><a href="http://genome.ucsc.edu/" target="_empty">UCSC Genome Browser</A> and <a href="http://genome.brc.mcw.edu/" target="_empty">mirror</A> -<LI><a href="http://www.ensembl.org/Mus_musculus/index.html" target="_empty">Ensembl</A> -<LI><a href="http://www.ncbi.nlm.nih.gov/gquery/gquery.fcgi?itool=toolbar" target="_empty">NCBI</A> -<LI><a href="http://phenome.jax.org/pub-cgi/phenome/mpdcgi?rtn=docs/home" target="_empty">Mouse Phenome Database</A> and the <a href="http://phenome.jax.org/pub-cgi/phenome/mpdcgi?rtn=snps/list_pre" target="_empty">MPP SNP Browser</A> -<LI><a href="http://bioinfo.vanderbilt.edu/webgestalt/" target="_empty">WebGestalt</A> -<LI><a href="http://grappa.eecs.utk.edu" target="_empty">GrAPPA</A> Clique-based clustering tool -</UL> -</Blockquote> - -<BR> -<Blockquote class="subtitle">Resources for Analysis of Single Genes, SNPs, mRNAs, and Proteins</Blockquote> -<Blockquote> -<Blockquote> -<a href="http://harvester.fzk.de/harvester/" target="_empty">Harvester</a> retrieves summary data on any one of 57,000 proteins from several bioinformatic resources. -<SMALL>[Added Dec 22, 2004; last site review Sept 19, 2008 by RWW.]</SMALL> -</Blockquote> - -<Blockquote> -<a href="http://mus.well.ox.ac.uk/cgi/gscan/wwwqtl.cgi" target="_empty">GSCAN</a>: the Oxford Wellcome Trust Genome Viewer retrieves mapping data for many mouse experimental mapping populations including the Heterogenous Stock, the Pre-Collaborative Cross mice, and Mouse Diversity Panel. -<SMALL>[Added Oct 13, 2010; last site review Oct 13, 2010 by RWW.]</SMALL> -</Blockquote> - - - - -<Blockquote> -<a href="http://nif-apps-stage.neuinfo.org/nif/nifgwt.html" target="_empty">NIF</a>: The Neuroscience Information Framework retrieves summary from a wide variety of neuroscience and bioinformatic resources. -<SMALL>[Added Dec 3, 2009; last site review Dec 3, 2009 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://genomics.senescence.info/" target="_empty">Genomics of aging resources</a>. A collection of databases and tools designed to help researchers understand the genetics of human ageing through a combination of functional genomics and evolutionary biology. -<SMALL>[Added Feb 28, 2010; last site review Feb 28, 2010 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.hgmd.cf.ac.uk/ac/index.php" target="_empty">Human Disease Gene Database</a> from Cardiff (requires log in) -<SMALL>[Added Nov 5, 2009; last site review Nov 5, 2009 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.snp-nexus.org/" target="_empty">SNPnexus</a> database of human SNPs is designed to simplify and assist in the selection of functionally relevant SNPs for large-scale genotyping studies of multifactorial disorders.<SMALL>[Added Jan 15, 2010; last site review Jan 15, 2010 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.snpedia.com/index.php/SNPedia" target="_empty">SNPedia</a> is a wiki investigating human genetics. We share information about the effects of variations in DNA, citing peer-reviewed scientific publications. It is used by Promethease to analyze and help explain your DNA.<SMALL>[Added Jan 15, 2010; last site review Jan 15, 2010 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="https://www.genoglyphix.com/ggx_browser/search/ -" target="_empty">Genoglyphix Browser</a> includes extensive data on human copy number variants as well as maps of low copy number repeat regions. -<SMALL>[Added Nov 5, 2009; last site review Nov 5, 2009 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.hprd.org/query" target="_empty">Human Protein Reference DB</a>: a manually curated resource with data on 20,000 proteins. Very effective interface and rich data. -<SMALL>[Added Oct 30, 2005; last site review Sept 19, 2008 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://xmap.picr.man.ac.uk" target="_empty">x:map</a> is a terrific visual display tool for exploring Affymetrix Exon array data sets for mouse and human transcriptomes. -<SMALL>[Added April 18, 2008; last site review Sept 19, 2008 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.pdg.cnb.uam.es/UniPub/iHOP/" target="_empty">iHOP</a> retrieves PubMed sentences that report interactions between a reference gene and associate genes and proteins. It allows the assembly of complex graphs that plot the literature interactions of genes. Effective interface for humans and machines. -<SMALL>[Added Dec 25, 2004; last site review Sept 19, 2008 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.proteinatlas.org/" target="_empty">Human Protein Atlas</a> displays expression and localization of proteins in a large variety of normal human tissues and cancer cells as high resolution images of immunohistochemically stained tissues and cell lines. -<SMALL>[Added Sept 22, 2007; last site review Sept 22, 2007 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.gopubmed.com/" target="_empty">GoPubMed</a> is a simple tool that searches PubMed and sorts the results by GO and MeSH terms. -<SMALL>[Added July 5, 2007 by RWW; last site review Sept 19, 2008 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.ncbi.nih.gov/IEB/Research/Acembly/index.html?human" target="_empty">AceView</a> and the <a href="http://www.ebi.ac.uk/astd/main.html" target="_empty">Alternative Splicing and Transcript Diversity database</A> provide excellent resources for systematic information about the many alternative transcripts produced from single genes. -<SMALL>[Added Jan 1, 2005; last site review Sept 19, 2008 by RWW.]</SMALL> -</Blockquote> - -<Blockquote> -<a href="http://www.informatics.jax.org/menus/allsearch_menu.shtml" target="_empty">MGI</a> and <a href="http://rgd.mcw.edu/tool-entry.shtml" target="_empty">RGD</a> are reference sites for mouse and rat genetics, respectively. -<SMALL>[Added Dec 22, 2004; last site review Sept 19, 2008 by RWW.]</SMALL> -</Blockquote> - - -<Blockquote> -<a href="http://www.dsi.univ-paris5.fr/genatlas/" target="_empty">GenAtlas</a> provides summary data for approximately 19300 human genes and has a useful link that will fetch 10 Kb of upstream sequence for promoter analysis. -[Added Jan 9, 2005; last site review Sept 19, 2008 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://polly.wustl.edu/promolign/main.html" target="_empty">PromoLign</a> aligns homologous regions of mouse and human promoters and highlights SNPs and transcription factor binding sites. Check the quick tutorial to see how to extract key data. This site requires an SVG plugin that may not be supported by some browsers and operating systems. -[Added May 10, 2005; FAILED: last site review Sept 19, 2008 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://gai.nci.nih.gov/cgi-bin/GeneViewer.cgi?" target="_empty">CGAP SNP Viewer</a> allows users to view SNPs in the context of transcripts, ORFs and protein motifs for either human or mouse genes. Try the <I>Ahr</I> gene in mouse as an example. -<SMALL>[Added April 10, 2006; last site review Sept 19, 2008 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://syndb.cbi.pku.edu.cn/" target="_empty">Synapse Database</a> (SynDB) is a comprehensive database of genes and proteins associated with the neuronal or neuromuscular synapse. Many <B>Trait Data and Analysis</B> pages provide links to SynDB. -<SMALL>[Added May 29, 2005; last site review Sept 19, 2008 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://crb118.med.upenn.edu/syn/dev/syndb/main.php" target="_empty">Synapse Database</a> at University of Pennsylvania is a comprehensive database of roughly 200 genes and proteins associated with the synapse. -<SMALL>[Added Nov 26, 2006; last site review Sept 19, 2008 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://biosingapore.org/index.php/Databases_and_tools" target="_empty">Singapore</a> Bio Databases and Tool. -<SMALL>[Added Dec 22, 2004; Dragon Genome Explorer site FAILED last site review, changed link; Sept 19, 2008 by RWW.]</SMALL> -</Blockquote> -<Blockquote> - <a href="http://mutdb.org/AnnoSNP/" target="_empty" >MutDB</a> and <a href="http://www.snps3d.org/modules.php?name=Search&op=advanced%20search" target="_empty">SNPs3D</a> provide great data on functional SNPs in human genes. To analyze the functional impact of non-synonymous SNPs you will also find <a href="http://snpanalyzer.uthsc.edu/" target="_empty" >SNP Analyzer</a> useful because it evaluates SNP impact in terms of the whole protein structural context. -<SMALL>[Added Dec 22, 2004; last site review Sept 19, 2008 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://moult.umbi.umd.edu/mouse2004/modules.php?name=Targets" target="_empty" >Alternative Splicing</a> Project provides great summaries and output graphs on splice variants in human, mouse, and Drosophila. -<SMALL>[Added Nov 8, 2005; last site review Sept 19, 2008 by RWW.]</SMALL> -</Blockquote> -</Blockquote> - -<BR> - -<Blockquote class="subtitle">Resources on Imprinting and Parental Origin Effects</Blockquote> -<Blockquote> -<Blockquote> -<a href="http://www.geneimprint.org/site/genes-by-species" target="_empty">Geneimprint</a> is a portal into the burgeoning field of genomic imprinting, collecting relevant articles and reviews, press reports, video and audio lectures, and genetic information -<SMALL>[Added June 23, 2010 by RWW; last site review June 23, 2010 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://igc.otago.ac.nz/Search.html" target="_empty">Catalogue of Parent of Origin Effects</a> provides a list of imprinted and putatively imprinted genes with commentary by Ian Morison (University of Otago, New Zealand). Database was last updated in 2008. -<SMALL>[Added June 23, 2010 by RWW; last site review June 23, 2010 by RWW.]</SMALL> -</Blockquote> -</Blockquote> - -<BR> - -<Blockquote class="subtitle">Resources for the Spatial Analysis of Gene and Protein Expression</Blockquote> -<Blockquote> -<Blockquote> -<a href="http://bioinformatics.ubc.ca/resources/links_directory/?subcategory_id=101 -" target="_empty">UBC Bioinformatic and Gene Expression Links</a> is a very extensive and well curated collection of on-line resources for the analysis of biological data sets. -<SMALL>[Added May 24, 2007 by RWW; last site review Sept 19, 2008 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -The <a href="http://mamep.molgen.mpg.de/mamep/search.php?searchtype=simple" target="_empty">mamep GeneExpression Links</a> image database of whole-mounted in situ hybridization of mid-gestation mouse embryos. Try entering the symbol <I>Ptch1</I>. -<SMALL>[Added May 28, 2007 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -The <a href="http://www.genes2cognition.org/genetics.html" target="_empty">Genes to Cognition</a> databases have a focus on proteins expressed in several key cellular compartments related to synpase function. -<SMALL>[Added Aug 9, 2007 by RWW.]</SMALL> -</Blockquote> - -<Blockquote> -<a href="http://www.cdtdb.brain.riken.jp/CDT/CDTSearch.jsp" target="_empty">Cerebellar Development Transcriptome Database</a>. Expression data for the mouse cerebellum, both microarray and in situ. -<SMALL>[Added Sept 1, 2010; last site review Sept 1, 2010 by RWW.]</SMALL> -</Blockquote> - - -<Blockquote> -Several excellent resources can be used to explore patterns of gene expression primarily in C57BL/6J mice. This strain is one of the parents of the BXD, AXB/BXA, BXH, and CXB genetic reference populations that are key resources in the Gene Network and its companion site, the <a href="http://www.mbl.org" target="_empty" >Mouse Brain Library</A>. -<UL> -<LI><a href="http://www.stjudebgem.org/web/search/keyword/searchByKeyWordForm.php" target="_empty">BGEM</a> and <a href="http://www.ncbi.nlm.nih.gov/projects/gensat/" target="_empty">GENSAT</a> provide images of gene expression in brains of embryos, neonates, and adult mice (roughly 2008 genes as of July 2005). -<BR> -<BR> -<LI><a href="http://www.genepaint.org/Frameset.html" target="_empty">GenePaint</a> and <a href="http://www.geneatlas.org/gene/search/searchgene.jsp" target="_empty">GeneAtlas</a> are companion sites that also provide expression data in embryos, neonates, and adults at high spatial resolution. GeneAtlas has excellent but slow image searching and matching capabilities. -<BR> -<BR> -<LI><a href="http://www.brain-map.org/index.jsp" target="_empty">Allen Brain Atlas</a> has expression data for ~12000 transcripts (adult males in the sagittal plane). -<BR> -<BR> -<LI><a href="http://genex.hgu.mrc.ac.uk/Emage/database/emageIntro.html" target="_empty">EMAP</a> (Edinburgh Mouse Atlas Project) provides data on expression of ~800 genes during development (in situ, immunohistochemistry, and reporter knock-in expression patterns). Most data are from wholemounts between Theiler stages 11 and 20 (embryonic days E7 to E13). EMAP can be used as a Java WebStart application. -<BR> -<BR> -<LI><a href="http://www.mouseatlas.org/data/mouse/project_tissue_view" target="_empty">Mouse Atlas of Gene Expression</a> is a massive SAGE library. The Atlas has quantified the normal state for many tissues by determining the number and identity of genes expressed throughout development. The scope of the project encompasses multiple stages of development of C57BL/6J mouse, from the single cell zygote to the adult, and includes an extensive initial collection of 200 tissues. DiscoverySpace is a WebStart application for use with The Mouse Atlas of Gene Expression. -<BR> -<BR> -<LI><a href="http://mahoney.chip.org/mahoney/database.html" target="_empty">Mahoney</a> Center maintains a rich image collection for ~1000 transcription factors expressed in brain (developmental stages, coronal plane). -<SMALL>[Added Dec 22, 2004; sites reviewed last on Sept 26, 2005 by RWW.]</SMALL> -<BR> -<BR> -</UL> -</Blockquote> -</Blockquote> - -<BR> - -<Blockquote class="subtitle">Resources for the Analysis of Sets and Networks of Transcripts, Genes, Proteins, and SNPs</Blockquote> -<Blockquote> -<Blockquote> -<a href="http://www.genemania.org/full.jsf" target="_empty">GeneMANIA</a> helps you predict the function of your favourite genes and gene sets. Powerful and fast computational methods and a great use of Cytoscape Web. (<A HREF="http://nar.oxfordjournals.org/cgi/content/full/38/suppl_2/W214" target="_empty">2010 PDF</A>). -<SMALL>[Added July 1, 2010; last site review Aug 8, 2010 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://toppgene.cchmc.org/" target="_empty">ToppGene Suite</a> A one-stop portal for gene list enrichment analysis and candidate gene prioritization based on functional annotations and protein interactions network -<SMALL>[Added Jan 16, 2010; last site review Jan 16, 2010 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.wikipathways.org/index.php/WikiPathways" target="_empty">WikiPathways</a> (WGCNA) is an open, public platform dedicated to the curation of biological pathways by and for the scientific community. -<SMALL>[Added Nov 12, 2009; last site review Nov 12, 2009 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.pathwaycommons.org/pc/" target="_empty">Pathway Commons</a> (WGCNA) is a search tool to find and visualize public biological pathway information. This site collates from several major sites. -<SMALL>[Added Nov 12, 2009; last site review Nov 12, 2009 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.sanger.ac.uk/cgi-bin/modelorgs/mousegenomes/snps.pl" target="_empty">Sanger Mouse Genome Project SNP Finder</a> provides access to SNP and indels generated by sequencing 17 strains of mice (plus C57BL/6J). Marvelous. -<SMALL>[Added Nov 18, 2009; last site review Nov 18, 2009 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.genetics.ucla.edu/labs/horvath/CoexpressionNetwork/" target="_empty">Weighted Gene Coexpression Network Analysis</a> (WGCNA) is a collection of R functions to perform weighted correlation network analysis that includes functions for network construction, module detection, gene selection, calculations of topological properties, data simulation, visualization, and interfacing with external software. See the recent paper on <A HREF="http://www.biomedcentral.com/1471-2105/9/559">WGCNA</A>. -<SMALL>[Added Aug 21, 2009; last site review Aug 21, 2009 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.genome.jp/" target="_empty">GenomeNet</a> is a terrific site for the analysis of molecular networks. Download the very effective <a href="http://www.genome.jp/download/" target="_empty">KegArray</A> 0.2.6beta package (May 2005) for exploratory data analysis of microarray data set. This package is as good as most commerical software and includes with built-in linkage to the KEGG databases. Versions are available for Mac OS X and Windows. -<SMALL>[Added Jan 3, 2005; last site review Aug 5, 2005 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.bioinf.ebc.ee/EP/EP/" target="_empty">Expression Profiler at http://ep.ebi.ac.uk/</a> is a set of tools for clustering, analysis and visualization of gene expression and other genomic data. Tools in the Expression Profiler allow you to perform cluster analysis, pattern discovery, pattern visualization, study and search Gene Ontology categories, generate sequence logos, extract regulatory sequences, study protein interactions, as well as to link analysis results to external tools and databases. -<SMALL>[Added May 20, 2008; last site review May 20, 2008 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.thebiogrid.org/" target="_empty">BioGRID</a>: the Biological General Repository for Interaction Datasets is a freely accessible database of protein and genetic interactions from Mt. Sinai, Toronto. -<SMALL>[Added July 28, 2007; last site review July 28, 2007 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://cismols.cchmc.org/" target="_empty">CisMols Analyzer</a> at Cincinnati Children's Hospital (Aronow and colleagues) is a server and database for the analysis of cis element co-occurences in the promoters of a list of genes. The <a href="http://polydoms.cchmc.org/polydoms/" target="_empty">PolyDoms Analyzer</a> is a tool for scanning through gene lists for those members of a pathway, ontolog, or disease that contain potentially harmful protein-coding SNPs. <a href="http://genometrafac.cchmc.org/" target="_empty">GenomeTraFaC</a> is a comparative genomics-based resource for initial characterization of gene models and the identification of putative cis-regulatory regions of RefSeq Gene Orthologs. -<SMALL>[Added Sept 23, 2006; last site review Sept 23, 2006 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://compbio.uthsc.edu/miRSNP/" target="_empty">PolymiRTS</a> database that searches for microRNA (miRNA) targets in transcripts that overlap SNPs. This database will also search for genes with associated phenotype variants that may have variants in miRNA target sequence (Yan Cui, Lei Bao and colleagues). - <SMALL>[Added Sept 23, 2006; last site review Sept 23, 2006 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.broad.mit.edu/gsea/msigdb/msigdb_index.html" target="_empty">MSigDB</a>: The Molecular Signature Database is part of the Broad Institute Gene Set Enrichment Analysis suite. MSigDB contains large numbers of static and partly annotated sets of genes/transcripts. Registration is not actually required to download data sets. - <SMALL>[Added Jan 18, 2007; last site review Jan 18, 2007 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://inia.uchsc.edu/INIA/index.jsp" target="_empty">C-INIA</a> MAGIC-B microarray knowledgebase from the Department of Pharmacology, University of Colorado, Denver, part of the NIAAA INIA project. Extensive public and privated brain array data sets in a powerful analytic web environment. - <SMALL>[Added May 31, 2007 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.genmapp.org/introduction.asp" target="_empty">GenMAPP 2.0</a> (2004), the Gene Map Annotation and Pathway Prolifer, is a free Windows application (simple registration required) with which you can visualize expression and other genomic data sets on maps of biological pathways. Very flexible suite of programs that you can also use to make custom gene annotation maps (and more). -<SMALL>[Added Aug 5, 2005; last site review Aug 5, 2005 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://bind.ca/" target="_empty">BIND</a> and <a href="http://string.embl.de/" target="_empty">STRING</a> and <a href="http://www.ebi.ac.uk/intact/index.jsp" target="_empty">IntAct</a> are great sites that provide access to well curated data on protein-protein interactions. BIND and IntAct focus on experimentally verified interactions whereas STRING and preBIND incorporate inferred interaction based on other data types, including gene expression. Links to BIND and STRING have been added to the Trait Data and Analysis forms on the GeneNetwork BETA site. -<SMALL>[Added Aug 21, 2005; last site reviews Aug 27, 2005 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://ai.stanford.edu/~erans/cancer/index.html" target="_empty">Microarray Module Maps</a> is a great site that databases a large number of coexpression modules defined using many cancer array studies. -<SMALL>[Added Aug 26, 2005; last site review Aug 26, 2005 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.geneontology.org/GO.tools.microarray.shtml" target="_empty">The Gene Ontology Consortium</a> maintains a well annotated list of open resources for the analysis of large expression data sets and gene ontologies. Note that there are several different lists, each with valuable links. -<SMALL>[Added July 15, 2005; last site review July 15, 2005 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.prioritizer.nl/" target="_empty">Prioritizer</a>: Prioritizer is a stand-alone Java program that uses a functional human gene network, available at <a href="http://www.genenetwork.nl" target="_empty">www.genenetwork.nl</a>, to prioritize positional candidate genes that reside within susceptibility loci, by assuming that real disease genes, residing within different loci are functionally closely related within the gene network.</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.bioinformatics.ic.ac.uk/eqtl/" target="_empty">eQTL Explorer</a> is a Java WebStart application that has also been designed for the calculation and display of QTL maps for large rat data sets, particuarly those generated using the HXB strains. Locations of QTLs for both mRNA traits and conventional physiological traits are displayed on chromosome ideograms. High precision QTL maps can also be generated. A password is required to gain access to the primary data files. -<SMALL>[Added January 7, 2006; last site review Jan 7, 2006 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://cliquego.uthsc.edu/" target="_empty">Clique-GO Analysis</a> is a novel tool for extracting cliques of coregulated transcripts. The current data requires Affymetrix U74Av2 probe set IDs as input. Try "103370_at" (the gene <I>Lin7c</I>) as an example. -<SMALL>[Added Jan 4, 2005; last site review Jan 4, 2005 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.bioinformatics.ubc.ca/pavlidis/lab/software.html" target="_empty">Gemma and ErmineJ</a> are powerful resources for analysis and metaanalysis of gene expression data sets at UBC. Pavlidis and colleagues also provide updated <A HREF="http://bioinformatics.ubc.ca/microannots/ -">GO data</A> for common microarray platforms. -<SMALL>[Added Jan 4, 2005; last site review June 7, 2007 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.cytoscape.org/index.php" target="_empty">Cytoscape</a> is one of several <a href="http://sbml.org/index.psp" target="_empty">SBML</a>-compatible open source programs for visualizing molecular interaction networks and overlaying these networks with gene expression profiles and other data sets to generate and test specific hypotheses. -<SMALL>[Added Jan 5, 2005; last site review Jan 5, 2005 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://cgap.nci.nih.gov/Pathways/Pathway_Searcher" target="_empty">Pathway Searcher</a> provides fast access to gene/protein interaction pathways. An intuitive interface. -<SMALL>[Added Dec 30, 2004; last site review Dec 30, 2004 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://genome.ucsc.edu/cgi-bin/hgNear" target="_empty">Gene Sorter</a> is a tool for generating and sorting sets of genes using a wide variety of information integrated into UCSC's Genome Brower. -<SMALL>[Added Dec 31, 2004; last site review Dec 31, 2004 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.cisreg.ca/cgi-bin/oPOSSUM/opossum" target="_empty">oPPOSUM</a> is a tool for finding over-represented transcription factor binding sites in lists of mouse and human genes. It handles about 100 out of greater than 600 TFBSs. -<SMALL>[Added Jan 27, 2005; last site review Nov 21, 2005 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://motif.genome.jp/" target="_empty">MOTIF</a> and <a href="http://www.dbi.tju.edu/dbi/tools/paint/index.php?op=FnetBuilder" target="_empty">PAINT</a> search for motifs in submitted sequences or lists of genes. Paint makes use of the TRANSFAC Pro database. -<SMALL>[Added Dec 22, 2004; last site review Dec 25, 2004 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://arrowsmith.psych.uic.edu/arrowsmith_uic/index.html" target="_empty">Arrowsmith</a> provides a fast way to evaluate known interactions or common mechanisms between two genes or proteins. It carries out a sophisticated comparison of the current PubMed database. -<SMALL>[Added Dec 22, 2004; last site review June 7, 2007 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.chilibot.net/" target="_empty">Chilibot</a> applies natural-language processing to the PubMed database to hunt for directed relationships among pairs or sets of genes, proteins, and keywords. <SMALL>[Added Dec 30, 2004; last site review Aug 13, 2009 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -Mouse Imprinting Resources: -<a href="http://www.mgu.har.mrc.ac.uk/research/imprinting" target="_empty">The Harwell Mouse Imprinting Resource</a>, -<a href="http://www.geneimprint.com/" target="_empty">Duke University - Jirtle's Laboratory</a>, -<a href="http://fantom2.gsc.riken.go.jp/imprinting/" target="_empty">RIKEN Candidate Imprinted Transcript Maps</a>, and -<a href="http://igc.otago.ac.nz/home.html">Imprinted Gene Catalogue - University of Otago</a>. -<SMALL>[Added Oct 20, 2006; last site review Oct 20, 2006 by RWW.]</SMALL> -</Blockquote> -</Blockquote> - -<BR> - -<Blockquote class="subtitle">Resources for the Analysis of Phenotypes in Genetic Reference Populations</Blockquote> -<Blockquote> -<Blockquote> -<a href="http://www.mbl.org/NewMBL_MySQL/tmbl.php" target="_empty">MBL</a> is a extensive image database of brain sections from genetic reference populations of mice, including the BXD, AXB, CXB, BXH strains included in WebQTL. The MBL is a companion database of WebQTL. -<SMALL>[Added Dec 22, 2004; last site review Aug 6, 2005 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://snp.ucsd.edu/mouse/" target="_empty">MPAD</a> Mouse Phenome Association Database v 1.0, by Eleazar Eskin and Hyun Min Kang. This resource performs genome-wide association mapping. Phenotype data sets are derived from the Mouse Phenome Project set of standard mouse strains. The permutation procedures account for the genetic relations among these strains and provide much more appropriate genome-wide significance thresholds than previous mouse association mapping methods. -<SMALL>[Added Nov 19, 2006; last site review Nov 19, 2006 by RWW. Link broken June 2007 probably due to move from UCSD to UCLA; check with EE.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://gscan.well.ox.ac.uk/gs/wwwqtl.cgi#" target="_empty">GScan</a> at the Wellcome Trust, Oxford, is a sophisticated viewer and analysis tool with which to explore the genetic control of diverse phenotypes (including array data) generated using heterogeneous stock mice (Flint, Mott, and colleagues). -<SMALL>[Added May 28, 2007 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://phenome.jax.org/pub-cgi/phenome/mpdcgi?rtn=docs/home" target="_empty">Phenome Project</a> provides access to a wide variety of phenotype data many common and wild inbred strains of mice. -<SMALL>[Added Dec 22, 2004; last site review Dec 25, 2004 by RWW.]</SMALL> -</Blockquote> -</Blockquote> - -<BR> - -<Blockquote class="subtitle">QTL Mapping Resources</Blockquote> -<Blockquote> -<Blockquote> -<a href="http://compbio.uthsc.edu/QSB/" target="_empty">QSB</a>: QSB is a stand-alone JAVA program with a sophisticated GUI developed for genetical genomics or systems genetics, an emerging field that combines quantitative genetics and genomics. QSB stands for QTL mapping, Sequence polymorphism analysis (or SNP analysis) and Bayesian network analysis. QSB takes marker and array data from a segregating population as input and identifies significant QTLs and then evaluated networks of candidate genes associated with these QTLs. -<SMALL>[Added July 29, 2005; last site review Jan 7, 2006 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://omicspace.riken.jp/PosMed" target="_empty">Positional Medline (PosMed)</A> is a knowledge-based ranking system of candidate genes within QTL intervals for human, mouse, rat, Arabidopsis, and rice. -<SMALL>[Added Nov 4, 2009; last site review Nov 4, 2009 by RWW.]</SMALL> -</Blockquote> -<Blockquote><a href="http://omicspace.riken.jp" target="_empty">Genome - Phenome Superbrain Project</a> integrates various databases to build a comprehensive computerized encyclopedia of omic sciences in several species, including mouse, rat, human, and arabidopsis, etc. The goal is to evolve this intelligent system into a form of artificial intelligence that can solve a researcher's problems by exploiting a vast amount of information accumulated in documents and published data ranging from genomes to phenomes. <SMALL>[Added Sept 13, 2007; last site review Sept12, 2007 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://qtlreaper.sourceforge.net/" target="_empty">QTL Reaper</a> is software, written in C and compiled as a Python module, for rapidly scanning microarray expression data for QTLs. It is essentially the batch-oriented version of WebQTL. It requires, as input, expression data from members of a set of recombinant inbred lines and genotype information for the same lines. It searches for an association between each expression trait and all genotypes and evaluates that association by a permutation test. For the permutation test, it performs only as many permutations as are necessary to define the empirical P-value to a reasonable precision. It also performs bootstrap resampling to estimate the confidence region for the location of a putative QTL. -<SMALL>[Added Jan 27, 2005; last site review Jan 27, 2005 by KFM.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://ibi.zju.edu.cn/software/qtlnetwork/" target="_empty">QTLNetwork 2.0</a> is a software package ofr mapping QTLs with epistatic and GXE interaction effects in experimental populations including double-haploid, recombinant inbred, backcross, F2, IF2 and BxFy populations. The program provides graphical presentations of QTL mapping results. The software is programmed by C++ programming language under Microsoft Visual C++ 6.0 environment. It works with Microsoft Windows operating systems, including Windows 95/98, NT, 2000, XP, 2003server. A new version of QTLNetwork is under developing, and its functions will be extended to include linkage group construction and marker-assisted virtual breeding.<SMALL>[Added June 21, 2007.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.broad.mit.edu/personal/claire/MouseHapMap/Inbred.htm" target="_empty">MouseHapMap</a> project genotypes from Mark Daly and colleagues. Approximately 140,000 SNPs across 49 strains. Updated Feb 2006.used to explore the Oxford Wellcome Heterogeneous stock QTL mapping project population. It currently includes mapping data for 100+ phenotypes typed across 2000 animals and 13,000 SNPs. -<SMALL>[Added May 10, 2006; last site review May 10, 2006 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -A valuable list of <a href="http://www.stat.wisc.edu/%7Eyandell/qtl/software/" target="_empty">Software for QTL Data Analysis</a> and <B>Gene Expression Microarray Software</B> is managed by Brian Yandell at University of Wisconsin. -<SMALL>[Added May 16, 2006; last site review May 16, 2006 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://gscan.well.ox.ac.uk/gs/wwwqtl.cgi" target="_empty">GSCAN DB</a> is a browser used to explore the Oxford Wellcome Heterogeneous stock QTL mapping project population. It currently includes mapping data for 100+ phenotypes typed across 2000 animals and 13,000 SNPs. -<SMALL>[Added May 10, 2006; last site review May 10, 2006 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://www.well.ox.ac.uk/mouse/INBREDS/" target="_empty">The Wellcome Trust-CTC SNP Data Set</a> consists of high density SNP data for approximately 490 strains of mice at 13,377 SNPs. These data fiels were processed slightly to generate many of the mouse mapping files used in WebQTL. -<SMALL>[Added Sept 27, 2005; last site review Sept 27, 2005 by RWW.]</SMALL> -</Blockquote> -<Blockquote> -<a href="http://mouse.perlegen.com/mouse/summary_reports.html" target="_empty">The NIEHS-Perlegen Mouse Strain Resequencing Project</a> provides links to SNP data for up to 15 strains of mice. Very high density data for many chromosomes. These data are integrated to some extent in the GeneNetwork. -<SMALL>[Added Sept 25, 2005; last site review Sept 25, 2005 by RWW.]</SMALL> -</Blockquote> -</Blockquote> +{% block title %}Links{% endblock %} -<BR> +{% block css %} +<link rel="stylesheet" type="text/css" href="/static/new/css/markdown.css" /> +{% endblock %} -<Blockquote class="subtitle">Affymetrix Array Annotation Resources</Blockquote> -<Blockquote> -<Blockquote> -<a href="http://research.stowers-institute.org/efg/ScientificSoftware/Applications/Affy/Annotations/" target="_empty">Affy MOE430A and MOE430B Annotation</a> files are explained more clearly that Affymetrix has ever done by Earl F Glynn at the Stowers Institute. (efg@stowers-insitute.org). -<SMALL>[Added July 17, 2006; last site review June 7, 2007 by RWW. This Oct 7, 2005 file caused Grace Wheeler's Mac internet connection to break.]</SMALL> -</Blockquote> -</Blockquote> +{% block content %} -<BR> +<div class="github-btn-container"> + <div class="github-btn "> + <a href="https://github.com/genenetwork/gn-docs/blob/master/general/links/links.md"> + Edit Text + <img src="/static/images/edit.png"> + </a> + </div> +</div> -<Blockquote class="subtitle">Information about this HTML page: </Blockquote> -<Blockquote> -<Blockquote><P><P>This text originally generated by RWW, Dec 21, 2004. Updated by EJC, Feb 27, 2005; by RWW, July 15, Sept 25. -<P>Management of GeneNetwork access and trait <A HREF="http://www.genenetwork.org/manager.html">pages</A>. -</Blockquote> -</Blockquote> - - </TD> - </TR></TABLE> +<div id="markdown" class="container"> + {{ rendered_markdown|safe }} -{% endblock %} +</div> +{% endblock %}
\ No newline at end of file diff --git a/wqflask/wqflask/templates/loading.html b/wqflask/wqflask/templates/loading.html index 9b335dfe..94e17724 100644 --- a/wqflask/wqflask/templates/loading.html +++ b/wqflask/wqflask/templates/loading.html @@ -38,7 +38,7 @@ </div> </div> </form> -<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> +<script src="{{ url_for('js', filename='jquery/jquery.min.js') }}" type="text/javascript"></script> <script src="/static/packages/bootstrap/js/bootstrap.min.js"></script> <script type="text/javascript"> diff --git a/wqflask/wqflask/templates/mapping_results.html b/wqflask/wqflask/templates/mapping_results.html index e68a792a..985d542c 100644 --- a/wqflask/wqflask/templates/mapping_results.html +++ b/wqflask/wqflask/templates/mapping_results.html @@ -4,7 +4,7 @@ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" /> <link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" /> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous"> - <link rel="stylesheet" type="text/css" href="/static/packages/purescript_genome_browser/css/purescript-genetics-browser.css" /> + <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='purescript-genome-browser/css/purescript-genetics-browser.css') }}" /> <link rel="stylesheet" type="text/css" href="/static/new/css/marker_regression.css" /> @@ -40,6 +40,9 @@ <input type="hidden" name="use_loco" value="{{ use_loco }}"> <input type="hidden" name="selected_chr" value="{{ selectedChr }}"> <input type="hidden" name="manhattan_plot" value="{{ manhattan_plot }}"> + {% if manhattan_plot == True %} + <input type="hidden" name="color_scheme" value="alternating"> + {% endif %} <input type="hidden" name="num_perm" value="{{ nperm }}"> <input type="hidden" name="perm_info" value=""> <input type="hidden" name="perm_strata" value="{{ perm_strata }}"> @@ -55,7 +58,7 @@ <input type="hidden" name="wanted_inputs" value=""> <input type="hidden" name="form_url" value="/run_mapping"> - <div class="container"> + <div class="container" style="min-width: 1400px;"> <div class="col-xs-5"> <h2>Map Viewer: Whole Genome</h2><br> <b>Population:</b> {{ dataset.group.species|capitalize }} {{ dataset.group.name }}<br> @@ -77,7 +80,7 @@ <table> <tr> <td><b>Chr: </b></td> - <td> + <td style="padding: 5px;"> <select name="chromosomes" size="1"> {% for chr in ChrList %} <option value="{{ chr[1] }}" {% if (chr[1] + 1) == selectedChr %}selected{% endif %}>{{ chr[0] }}</option> @@ -87,7 +90,7 @@ </td> </tr> <tr> - <td><b>View: </b></td> + <td ><b>View: </b></td> <td style="padding: 5px;"> <input type="text" name="startMb" size="7" value="{% if startMb != -1 %}{{ startMb }}{% endif %}"> to <input type="text" name="endMb" size="7" value="{% if endMb != -1 %}{{ endMb }}{% endif %}"> </td> @@ -99,7 +102,7 @@ <input type="radio" name="LRSCheck" value="LRS" {% if LRS_LOD == "LRS" %}checked{% endif %}>LRS </label> <label class="radio-inline"> - <input type="radio" name="LRSCheck" value="{% if LRS_LOD == "-log(p)" %}-log(p){% else %}LOD{% endif %}" {% if LRS_LOD == "LOD" or LRS_LOD == "-log(p)" %}checked{% endif %}>{% if LRS_LOD == "-log(p)" %}-log(p){% else %}LOD{% endif %} + <input type="radio" name="LRSCheck" value="{% if LRS_LOD == "-logP" %}-logP{% else %}LOD{% endif %}" {% if LRS_LOD == "LOD" or LRS_LOD == "-logP" %}checked{% endif %}>{% if LRS_LOD == "-logP" %}-logP{% else %}LOD{% endif %} </label> <a href="http://genenetwork.org/glossary.html#LOD" target="_blank"> <sup style="color:#f00"> ?</sup> @@ -114,11 +117,31 @@ </tr> <tr> <td><b>Width: </b></td> - <td> + <td style="padding: 5px;"> <input type="text" name="graphWidth" value="{% if graphWidth is defined %}{{ graphWidth }}{% else %}1600{% endif %}" size="5"><span style="font-size: 12px;"> pixels (minimum=900)</span> </td> </tr> </table> + {% if manhattan_plot == True and selectedChr == -1 %} + <table style="margin-top: 10px;"> + <tr> + <td> + <b>Manhattan Plot Color Scheme: </b> + </td> + <td> + <select id="color_scheme"> + <option value="alternating" {% if color_scheme == "alternating" %}selected{% endif %}>Alternating</option> + <option value="varied" {% if color_scheme == "varied" %}selected{% endif %}>Varied by Chr</option> + <option value="single" {% if color_scheme == "single" %}selected{% endif %}>Single Color</option> + </select> + </td> + <td> + <input name="manhattan_single_color" type="hidden" id="point_color" value={% if manhattan_single_color %}{{ manhattan_single_color }}{% else %}"#D9D9D9"{% endif %}> + <button style="display: none; margin-left: 5px;" id="point_color_picker" class="jscolor {valueElement: 'point_color'}">Choose Color</button> + </td> + </tr> + </table> + {% endif %} </div> <div class="col-xs-4" style="padding: 0px;"> {% if (mapping_method == "reaper" or mapping_method == "rqtl_geno") and nperm > 0 %} @@ -225,7 +248,7 @@ <button class="btn btn-default" id="select_all"><span class="glyphicon glyphicon-ok"></span> Select All</button> <button class="btn btn-default" id="deselect_all"><span class="glyphicon glyphicon-remove"></span> Deselect All</button> <button class="btn btn-default" id="invert"><span class="glyphicon glyphicon-resize-vertical"></span> Invert</button> - <button class="btn btn-success" id="add" disabled><span class="glyphicon glyphicon-plus-sign"></span> Add</button> + {% if geno_db_exists == "True" %}<button class="btn btn-success" id="add" disabled><span class="glyphicon glyphicon-plus-sign"></span> Add</button>{% endif %} <br /> <br /> <div id="table_container" style="width:{% if 'additive' in trimmed_markers[0] %}600{% else %}550{% endif %}px;"> @@ -235,8 +258,8 @@ <th></th> <th>Row</th> <th>Marker</th> - {% if LRS_LOD == "-log(p)" %} - <th><div style="text-align: right;">–log(p)</div></th> + {% if LRS_LOD == "-logP" %} + <th><div style="text-align: right;">–logP</div></th> {% else %} <th><div style="text-align: right;">{{ LRS_LOD }}</div></th> {% endif %} @@ -259,7 +282,7 @@ </td> <td align="right">{{ loop.index }}</td> <td>{% if geno_db_exists == "True" %}<a href="/show_trait?trait_id={{ marker.name }}&dataset={{ dataset.group.name }}Geno">{{ marker.name }}</a>{% else %}{{ marker.name }}{% endif %}</td> - {% if LRS_LOD == "LOD" or LRS_LOD == "-log(p)" %} + {% if LRS_LOD == "LOD" or LRS_LOD == "-logP" %} {% if 'lod_score' in marker %} <td align="right">{{ '%0.2f' | format(marker.lod_score|float) }}</td> {% else %} @@ -327,13 +350,16 @@ <script type="text/javascript" src="{{ url_for('js', filename='js_alt/underscore.min.js') }}"></script> <script type="text/javascript" src="{{ url_for('js', filename='underscore-string/underscore.string.min.js') }}"></script> <script type="text/javascript" src="{{ url_for('js', filename='d3-tip/d3-tip.js') }}"></script> - <script type="text/javascript" src="/static/new/js_external/plotly-latest.min.js"></script> + <script type="text/javascript" src="{{ url_for('js', filename='plotly/plotly.min.js') }}"></script> + {% if manhattan_plot == True and selectedChr == -1 %} + <script type="text/javascript" src="/static/new/js_external/jscolor.js"></script> + {% endif %} <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script> <script language="javascript" type="text/javascript" src="https://cdn.datatables.net/buttons/1.0.0/js/dataTables.buttons.min.js"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/scientific.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/natural.js') }}"></script> - <script language="javascript" type="text/javascript" src="/static/packages/purescript_genome_browser/js/purescript-genetics-browser.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='purescript-genome-browser/js/purescript-genetics-browser.js') }}"></script> <script> js_data = {{ js_data | safe }} @@ -349,6 +375,20 @@ console.time("Creating table"); {% if selectedChr == -1 %} $('#trait_table').DataTable( { + "drawCallback": function( settings ) { + $('#trait_table 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")){ + $(this).removeClass("selected") + } else { + $(this).addClass("selected") + } + {% if geno_db_exists == "True" %}change_buttons(check_node=1){% endif %} + }); + }, "columns": [ { "type": "natural", "width": "5%" }, { "type": "natural", "width": "8%" }, @@ -362,8 +402,11 @@ "targets": 0, "orderable": false } ], + "language": { + "info": "Showing from _START_ to _END_ of " + js_data.total_markers + " records", + }, "order": [[1, "asc" ]], - "sDom": "RZtir", + "sDom": "iRZtir", "iDisplayLength": -1, "autoWidth": false, "deferRender": true, @@ -423,7 +466,7 @@ var mapping_input_list = ['temp_uuid', 'trait_id', 'dataset', 'tool_used', 'form_url', 'method', 'transform', 'trimmed_markers', 'selected_chr', 'chromosomes', 'mapping_scale', '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', 'control_marker_db', 'do_control', 'genofile', + 'LRSCheck', 'covariates', 'maf', 'use_loco', 'manhattan_plot', 'color_scheme', 'manhattan_single_color', 'control_marker', 'control_marker_db', 'do_control', 'genofile', 'pair_scan', 'startMb', 'endMb', 'graphWidth', 'lrsMax', 'additiveCheck', 'showSNP', 'showGenes', 'viewLegend', 'haplotypeAnalystCheck', 'mapmethod_rqtl_geno', 'mapmodel_rqtl_geno', 'temp_trait', 'group', 'species', 'reaper_version', 'primary_samples', 'n_samples'] @@ -449,10 +492,21 @@ remap = function() { $('input[name=selected_chr]').val($('select[name=chromosomes]').val()); + $('input[name=color_scheme]').val($('select#color_scheme').val()); $('#marker_regression_form').attr('action', '/loading'); return $('#marker_regression_form').submit(); }; + {% if manhattan_plot == True and selectedChr == -1 %} + $('#color_scheme').change(function(){ + if ($(this).val() == "single"){ + $('#point_color_picker').show(); + } else { + $('#point_color_picker').hide(); + } + }); + {% endif %} + {% if mapping_method != "gemma" and mapping_method != "plink" %} $('#download_perm').click(function(){ perm_info_dict = { diff --git a/wqflask/wqflask/templates/network_graph.html b/wqflask/wqflask/templates/network_graph.html index be3d0402..2941cb80 100644 --- a/wqflask/wqflask/templates/network_graph.html +++ b/wqflask/wqflask/templates/network_graph.html @@ -1,7 +1,7 @@ {% extends "base.html" %} {% block css %} <link rel="stylesheet" type="text/css" href="/static/new/css/network_graph.css" /> - <link rel="stylesheet" type="text/css" href="/js/cytoscape-panzoom/cytoscape.js-panzoom.css" /> + <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='cytoscape-panzoom/cytoscape.js-panzoom.css') }}"> <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='qtip2/jquery.qtip.min.css') }}"> <style> /* The Cytoscape Web container must have its dimensions set. */ @@ -139,15 +139,14 @@ elements_list = {{ elements | safe }} gn2_url = "{{ gn2_url | safe }}" </script> - - <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='qtip2/jquery.qtip.min.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/underscore.min.js') }}"></script> - <script language="javascript" type="text/javascript" src="/js/cytoscape/cytoscape.min.js"></script> - <script language="javascript" type="text/javascript" src="/js/cytoscape-panzoom/cytoscape-panzoom.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='cytoscape/cytoscape.min.js') }}"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='cytoscape-panzoom/cytoscape-panzoom.js') }}"></script> <!-- should be using cytoscape-popper for tips, see docs --> - <script language="javascript" type="text/javascript" src="/js/cytoscape-qtip/cytoscape-qtip.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='cytoscape-qtip/cytoscape-qtip.js') }}"></script> <!-- Loads flash - who wants that? diff --git a/wqflask/wqflask/templates/new_security/forgot_password_step2.html b/wqflask/wqflask/templates/new_security/forgot_password_step2.html index 473fa377..5dc424e5 100644 --- a/wqflask/wqflask/templates/new_security/forgot_password_step2.html +++ b/wqflask/wqflask/templates/new_security/forgot_password_step2.html @@ -21,6 +21,6 @@ {% block js %} {% include "new_security/_scripts.html" %} - <script type="text/javascript" src="/static/new/js_external/zxcvbn/zxcvbn-async.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='zxcvbn-async/zxcvbn-async.min.js') }}"></script> <script type="text/javascript" src="/static/new/javascript/password_strength.js"></script> {% endblock %} diff --git a/wqflask/wqflask/templates/new_security/password_reset.html b/wqflask/wqflask/templates/new_security/password_reset.html index 7110dc79..4e3ea59f 100644 --- a/wqflask/wqflask/templates/new_security/password_reset.html +++ b/wqflask/wqflask/templates/new_security/password_reset.html @@ -74,6 +74,6 @@ {% block js %} {% include "new_security/_scripts.html" %} - <script type="text/javascript" src="/static/new/js_external/zxcvbn/zxcvbn-async.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='zxcvbn-async/zxcvbn-async.min.js') }}"></script> <script type="text/javascript" src="/static/new/javascript/password_strength.js"></script> {% endblock %} diff --git a/wqflask/wqflask/templates/new_security/register_user.html b/wqflask/wqflask/templates/new_security/register_user.html index 325d8aa5..2506f4ee 100644 --- a/wqflask/wqflask/templates/new_security/register_user.html +++ b/wqflask/wqflask/templates/new_security/register_user.html @@ -101,6 +101,6 @@ {% block js %} {% include "new_security/_scripts.html" %} - <script type="text/javascript" src="/static/new/js_external/zxcvbn/zxcvbn-async.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='zxcvbn-async/zxcvbn-async.min.js') }}"></script> <script type="text/javascript" src="/static/new/javascript/password_strength.js"></script> {% endblock %} diff --git a/wqflask/wqflask/templates/new_security/registered.html b/wqflask/wqflask/templates/new_security/registered.html index e71d5598..eaed3ed0 100644 --- a/wqflask/wqflask/templates/new_security/registered.html +++ b/wqflask/wqflask/templates/new_security/registered.html @@ -20,6 +20,6 @@ {% block js %} {% include "new_security/_scripts.html" %} - <script type="text/javascript" src="/static/new/js_external/zxcvbn/zxcvbn-async.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='zxcvbn-async/zxcvbn-async.min.js') }}"></script> <script type="text/javascript" src="/static/new/javascript/password_strength.js"></script> {% endblock %} diff --git a/wqflask/wqflask/templates/new_security/thank_you.html b/wqflask/wqflask/templates/new_security/thank_you.html index 459bd66a..f492fb51 100644 --- a/wqflask/wqflask/templates/new_security/thank_you.html +++ b/wqflask/wqflask/templates/new_security/thank_you.html @@ -19,6 +19,6 @@ {% block js %} {% include "new_security/_scripts.html" %} - <script type="text/javascript" src="/static/new/js_external/zxcvbn/zxcvbn-async.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='zxcvbn-async/zxcvbn-async.min.js') }}"></script> <script type="text/javascript" src="/static/new/javascript/password_strength.js"></script> {% endblock %} diff --git a/wqflask/wqflask/templates/new_security/verification_still_needed.html b/wqflask/wqflask/templates/new_security/verification_still_needed.html index 3aa24e37..91768eb9 100644 --- a/wqflask/wqflask/templates/new_security/verification_still_needed.html +++ b/wqflask/wqflask/templates/new_security/verification_still_needed.html @@ -22,6 +22,6 @@ {% block js %} {% include "new_security/_scripts.html" %} - <script type="text/javascript" src="/static/new/js_external/zxcvbn/zxcvbn-async.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='zxcvbn-async/zxcvbn-async.min.js') }}"></script> <script type="text/javascript" src="/static/new/javascript/password_strength.js"></script> {% endblock %} diff --git a/wqflask/wqflask/templates/pair_scan_results.html b/wqflask/wqflask/templates/pair_scan_results.html index f1646af7..b31e3b7a 100644 --- a/wqflask/wqflask/templates/pair_scan_results.html +++ b/wqflask/wqflask/templates/pair_scan_results.html @@ -4,7 +4,7 @@ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" /> <link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" /> <link rel="stylesheet" type="text/css" href="/static/packages/TableTools/media/css/TableTools.css" /> - <link rel="stylesheet" type="text/css" href="/static/new/css/d3-tip.min.css" /> + <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='d3-tip/d3-tip.css') }}" /> <link rel="stylesheet" type="text/css" href="/static/new/css/panelutil.css" /> {% endblock %} @@ -64,11 +64,11 @@ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='d3js/d3.min.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='d3-tip/d3-tip.js') }}"></script> - <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/scientific.js') }}"></script> <script language="javascript" type="text/javascript" src="/static/packages/DT_bootstrap/DT_bootstrap.js"></script> <script language="javascript" type="text/javascript" src="/static/packages/TableTools/media/js/TableTools.min.js"></script> - <script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/underscore.min.js') }}"></script> {% endblock %}
\ No newline at end of file diff --git a/wqflask/wqflask/templates/policies.html b/wqflask/wqflask/templates/policies.html index 83b6b3c0..e36c9e08 100644 --- a/wqflask/wqflask/templates/policies.html +++ b/wqflask/wqflask/templates/policies.html @@ -1,18 +1,23 @@ {% extends "base.html" %} -{% block title %}Policies{% endblock %} + +{% block title %}Links{% endblock %} + +{% block css %} +<link rel="stylesheet" type="text/css" href="/static/new/css/markdown.css" /> +{% endblock %} + {% block content %} -<Table width= "100%" cellSpacing=0 cellPadding=5><TR> -<!-- Body Start from Here --> -<TD valign="top" height="200" width="100%"> - <P class="title">WebQTL Conditions of Use</P> - <UL> - <LI><A HREF="conditionsofUse.html">WebQTL Usage Conditions and Limitations</A><P></P> - <LI><A HREF="dataSharing.html">WebQTL Data Sharing Policy</A><P></P> - <LI><A HREF="statusandContact.html">Status and investigators to contact on data use and publication</A><P></P> - </UL> - <P></P> -</TD> -</TR></TABLE> + <div class="github-btn-container"> + <div class="github-btn "> + <a href="https://github.com/genenetwork/gn-docs/blob/master/general/policies/policies.md"> + Edit Text + <img src="/static/images/edit.png"> + </a> + </div> +</div> +<div id="markdown" class="container"> + {{ rendered_markdown|safe }} +</div> {% endblock %}
\ No newline at end of file diff --git a/wqflask/wqflask/templates/reference.html b/wqflask/wqflask/templates/reference.html deleted file mode 100644 index d95d22e3..00000000 --- a/wqflask/wqflask/templates/reference.html +++ /dev/null @@ -1,1497 +0,0 @@ -{% extends "base.html" %} -{% block title %}References{% endblock %} -{% block content %} - -<h2> Papers and References to GeneNetwork</A></h2> - -<BLOCKQUOTE> - -<left> -<a href="#New">Highlighted References</a> | -<a href="#Key">Key References</a> | -<a href="#Background">Background References</a> | -</left> - -<BR> <BR> -<left> -<a href="#2020">2020</a> | -<a href="#2019">2019</a> | -<a href="#2018">2018</a> | -<a href="#2017">2017</a> | -<a href="#2016">2016</a> | -<a href="#2015">2015</a> | -<a href="#2014">2014</a> | -<a href="#2013">2013</a> | -<a href="#2012">2012</a> | -<a href="#2011">2011</a> | -<a href="#2010">2010</a> | -<a href="#2009">2009</a> | -<a href="#2008">2008</a> | -<a href="#2007">2007</a> | -<a href="#2006">2006</a> | -<a href="#2005">2005</a> | -<a href="#2004">2004</a> | -<a href="#2003">2003</a> | -</left> -</BLOCKQUOTE> - -<DIR> - <A HREF="https://scholar.google.com/scholar?as_q=&as_epq=&as_oq=webqtl+%22genenetwork%22&as_eq=&as_occt=any&as_sauthors=&as_publication=&as_ylo=&as_yhi=&btnG=&hl=en&as_sdt=0%2C5"target="_blank" class="fwn">Google Scholar</A> search for <I> "genenetwork" OR "webqtl" </I> generated: -<OL> -<LI>1430 hits on 2016/09/08 -<LI>1730 hits on 2017/10/17 -<LI>2020 hits on 2019/05/13) -</OL> - -<A HREF="https://scholar.google.com/scholar?as_q=&as_epq=&as_oq=genenetwork.org&as_eq=&as_occt=any&as_sauthors=&as_publication=&as_ylo=&as_yhi=&btnG=&hl=en&as_sdt=0%2C5"target="_blank" class="fwn">Google Scholar</A> search for <I> "genenetwork.org" </I> generated: - -<OL> -<LI>1030 hits on 2019/05/13 -<LI> 105 hits from 2018/01/01 to 2019/05/13 -</OL> - -</DIR> - - -<BLOCKQUOTE> - <A NAME="New" class="subtitle">Highlighted References</A> -<BLOCKQUOTE style="font-size: 14px;"> - -<B><I>Please send us citations to articles that we may have missed.</I></B> - -<OL> - -<LI> Mulligan MK, Mozhui K, Prins P, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27933521" target="_blank" class="fwn">2017</A>) GeneNetwork: A Toolbox for Systems Genetics. In <I>Systems Genetics</I>, Methods in Molecular Biology 1488:75-120 -[An updated primer in using GeneNetwork for molecular analysis of mouse and human cohorts.] -<SMALL><A HREF="/images/upload/Mulligan_How_To_Use_GeneNetwork_2017_v1.pdf" target="_blank" class="fwn">PDF version</A> -</SMALL> -<BR> -<BR> - -<LI> Williams RW, Williams EG (<A HREF="/images/upload/Williams_ResourcesSystemsGenetics_MethodsMolBio_2016.pdf" target="_blank" class="fwn"" target="_blank" class="fwn">2017</A>) Resources for Systems Genetics. In <I>Systems Genetics</I>, Methods in Molecular Biology 1488:3-29. -[This review is intended to help you when making the hard choices about types of resources to use in system genetic studies. The short answer: embrace diversity in your resources. The computational barriers to joint analysis are now minimal.] -<SMALL><A HREF="/images/upload/Williams_ResourcesSystemsGenetics_MethodsMolBio_2016.pdf" target="_blank" class="fwn">PDF version</A> -</SMALL> -<BR> -<BR> - -<LI> Williams RW (<A HREF="http://journal.frontiersin.org/article/10.3389/neuro.01.016.2009/full" target="_blank" class="fwn">2009</A>) Herding cats: the sociology of data integration. Frontier in Neuroscience 3(2):154-6. -[An short but amusing commentary on predictive (someday perhaps even precision) medicine and how to get there using genetic reference populations such as the BXD and Collaborative Cross families.] -<SMALL><A HREF="http://journal.frontiersin.org/article/10.3389/neuro.01.016.2009/full" target="_blank" class="fwn">PDF version</A> -</SMALL> -<BR> -<BR> - - -<LI> -Pinelli M, Carissimo A, Cutillo L, Lai CH, Mutarelli M, Moretti MN, Singh MV, Karali M, Carrella D, Pizzo M, Russo F, Ferrari S, Ponzin D, Angelini C, Banfi S, di Bernardo D (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27235414" target="_blank" class="fwn">2016</A>) An atlas of gene expression and gene co-regulation in the human retina.Nucleic Acids Res. 2016 Jul 8;44(12):5773-84 -<SMALL><A HREF="http://retina.tigem.it" target="_blank" class="fwn">RETINA database</A>, and see the <A HREF="/images/upload/Pinelli_diBerardo_2016_AtlasHumanRetina.pdf" target="_blank" class="fwn">PDF</A>. These data are now in GeneNetwork (Species = Human, Group = Retina). -</SMALL> - -<BR> -<BR> - - -<LI> -Williams EG, Wu Y, Pooja J, Dubuis S, Blattmann P, Argmann CA, Houten SM, Amariuta T, Wolski W, Zamboni N, Aebersold R, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27284200" target="_blank" class="fwn">2016</A>) Systems proteomics and trans-omic integration illuminate new mechanisms in mitochondrial function. Science 352(6291):aad0189 -<SMALL><A HREF="http://science.sciencemag.org/content/352/6291/aad0189.full" target="_blank" class="fwn">HTML version</A>, <A HREF="/images/upload/WilliamsEG_Auwerx_Systems_Science-2016.pdf " target="_blank" class="fwn">PDF</A> -</SMALL> -<BR> -<BR> - - - -<LI> -Sloan Z, Arends D, Broman KW, Centeno A, Furlotte N, Nijveen H, Yan L, Zhou X, Williams RW, Prins P (2016) GenetNetwork: framework for web-based genetics. The Journal of Open Source Software http://joss.theoj.org/papers/10.21105/joss.00025 (http://dx.doi.org/10.21105/joss.00025) -<SMALL><A HREF="http://joss.theoj.org/papers/10.21105/joss.00025" target="_blank" class="fwn">HTML version</A> -</SMALL> -<BR> -<BR> - -<LI>Alam G, Miller DB, O'Callaghan JP, Lu L, Williams RW, Jones BC (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27182044" target="_blank" class="fwn">2016</A>) MPTP neurotoxicity is highly concordant between the sexes among BXD recombinant inbred mouse strains. Neurotoxicology in press -<SMALL><A HREF="/images/upload/Alam_Jones_MPTP_Neurotox_2016.pdf" target="_blank" class="fwn">PDF version</A> -</SMALL> -<BR> -<BR> - - -<LI>Merkwirth C, Jovaisaite V, Durieux J, Matilainen O, Jordan SD, Quiros PM, Steffen KK, Williams EG, Mouchiroud L, Tronnes SU, Murillo V, Wolff SC, Shaw RJ, Auwerx J, Dillin A (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27133168" target="_blank" class="fwn">2016</A>) Two conserved histone demethylases regulate mitochondrial stress-induced longevity. Cell 165:1209-1223 -<BR> -<BR> - - -<LI> Wang X, Pandey AK, Mulligan MK, Williams EG, Mozhui K, Li Z, Jovaisaite V, Quarles LD, Xiao Z, Huang J, Capra JA, Chen Z, Taylor WL, Bastarache L, Niu X, Pollard KS, Ciobanu DC, Reznik AO, Tishkov AV, Zhulin IB, Peng J, Nelson SF, Denny JC, Auwerx J, Lu L, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26833085" target="_blank" class="fwn">2016</A>). Joint mouse-human phenome-wide association to test gene function and disease risk. Nature Communications 7:10464 -[Best reference on the BXD family of strains and the wide range of phenotypes that have been generated over the past 40 years.] - -<SMALL><A HREF="/images/upload/Wang_PheWas_NatComm_2016.pdf" target="_blank" class="fwn">PDF version</A> and the - -<A HREF="/images/upload/Wang_SupplementalTables_NatComm_2016.xlsx" target="_blank" class="fwn">Supplementary Tables in one Excel file</A> -</SMALL> - -<BR> -<BR> - - -<LI> Xue Y, Li J, Yan L, Lu L, Liao FF (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26092713" target="_blank" class="fwn">2015</A>) Genetic variability to diet-induced hippocampal dysfunction in BXD recombinant inbred (RI) mouse strains. Behav Brain Res 292:83-94 -<BR> -<BR> - -<LI>Chaum E, Winborn CS, Bhattacharya S (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25963977" target="_blank" class="fwn">2015</A>) Multilayered genetic and omics dissection of mitochondrial activity in a mouse reference population. Mamm Genome 26:210-221 -<BR> -<BR> - -<LI>Cheng Q, Seltzer Z, Sima C, Lakschevitz FS, Glogauer M. (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25942439" target="_blank" class="fwn">2015</A>) Quantitative Trait Loci and Candidate Genes for Neutrophil Recruitment in Sterile Inflammation Mapped in AXB-BXA Recombinant Inbred Mice. PLoS One 10:e0124117 -<BR> -<BR> - -<LI>Scott RE, Ghule PN, Stein JL, Stein GS (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25215496" target="_blank" class="fwn">2015</A>) Cell cycle gene expression networks discovered using systems biology: Significance in carcinogenesis. J Cell Physiol 230:2533-42 -<BR> -<BR> - -<LI> Williams EG, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26140590" target="_blank" class="fwn">2015</A>) The convergence of systems and reductionist approaches in complex trait analysis. Cell 162:23-32. -<BR> -<BR> - -<LI>Wu Y, Williams EG, Dubuis S, Mottis A, Jovaisaite V, Houten SM, Argmann CA, Faridi P, Wolski W, Kutalik Z, Zamboni N, Auwerx J, Aebersold R (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25215496" target="_blank" class="fwn">2014</A>) Multilayered genetic and omics dissection of mitochondrial activity in a mouse reference population. Cell 158:1415-1430 -<BR> -<BR> - -<LI> -Hayes SK, Hager R, Grencis RK (2014) Sex-dependent genetics effects on immune responses to parasitic nematodes. BMC Genomics 15:193 -<BR> -<BR> - -<LI>Harenza JL, Muldoon PP, De Biasi M, Damaj MI, Miles MF (2014) Genetic variation within the Chrna7 gene modulates nicotine reward-like phenotypes in mice. Genes Brain Behav 13:213-225 -<BR> -<BR> - - -<LI> -Ye R, Carneiro AM, Airey D, Sanders-Bush E, Williams RW, Lu L, Wang J, Zhang B, Blakely RD (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24102824" target="_blank" class="fwn">2014</A>) Evaluation of heritable determinants of blood and brain serotonin homeostasis using recombinant inbred mice. Genes Brain Behav. 13:247-260 - -<BR> -<BR> -<LI> -Houtkooper RH, Mouchiroud L, Ryu D, Moullan N, Katsyuba E, Knott G, Williams RW, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23698443" target="_blank" class="fwn">2013</A>) Mitonuclear protein imbalance as a conserved longevity mechanism. Nature 497:451-457 <A HREF="/images/upload/Houtkooper_Williams_Auwerx_Nature_2013.pdf" target="_blank" class="fwn">PDF version</A> - -<BR> -<BR> - -</OL> - -</Blockquote> - - - - - - - - - - - - -<BLOCKQUOTE style="font-size: 14px;"> - <A NAME="Key" class="subtitle">Key References</A> -<BLOCKQUOTE > - -<P>The first section lists key technical papers that are appropriate references when citing GeneNetwork and WebQTL. The second section lists publications and other resources that have made use of GeneNetwork.<P> - -</Blockquote> -<OL> - - -<LI> Mulligan MK, Mozhui K, Prins P, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26092713" target="_blank" class="fwn">2016</A>) GeneNetwork – A toolbox for systems genetics. In <I>Systems Genetics</I>, Methods in Molecular Biology; Schughart K, Williams RW eds.; Humana Press, in press -[This is a currently the most comprehensive protocol and guide (20 Mb) for GeneNetwork.] -<SMALL><A HREF="/images/upload/Mulligan_How_To_Use_GeneNetwork_2016_v1.pdf" target="_blank" class="fwn">PDF version</A></SMALL> - - -<LI> -Williams RW, Mulligan MK (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23195314" target="_blank" class="fwn">2012</A>) Genetic and molecular network analysis of behavior. Int Rev Neurobiol. 104:135-57. [Explains the use of GeneNetwork in behavioral neurogenetics] -<SMALL><A HREF="/images/upload/Williams_Mulligan_Bioinformatics of Brain Short 2012.pdf" target="_blank" class="fwn">PDF version</A> -</SMALL> - -<LI> Williams EG, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26140590" target="_blank" class="fwn">2015</A>) The convergence of systems and reductionist approaches in complex trait analysis. Cell 162:23-32. [Research into the genetic and environmental factors behind complex trait variation has traditionally been segregated into distinct scientific camps. The reductionist approach aims to decrypt phenotypic variability bit by bit, founded on the underlying hypothesis that genome-to-phenome relations are largely constructed from the additive effects of their molecular players. In contrast, the systems approach aims to examine large-scale interactions of many components simultaneously, on the premise that interactions in gene networks can be both linear and non-linear. Both approaches are complementary, and they are becoming increasingly intertwined due to developments in gene editing tools, omics technologies, and population resources. Together, these strategies are beginning to drive the next era in complex trait research, paving the way to improve agriculture and toward more personalized medicine.] <SMALL><A HREF="/images/upload/WilliamsEG_Auwerx_Cell2015.pdf" target="_blank" class="fwn">PDF version</A> -</SMALL> - -<LI> -Wang J, Williams RW, Manly KF (<a href="http://journals.humanapress.com/ArticleDetail.pasp?issn=1539-2791&acode=NI:1:4:299" target="_blank" class="fwn">2003</a>) WebQTL: Web-based complex trait analysis. Neuroinformatics 1: 299-308 <A href="http://www.genenetwork.org/pdf/webqtl.pdf" class="fwn"><I>Full Text PDF Version</I></A>. [A good technical reference to WebQTL and GeneNetwork] -<LI> -Williams RW, Gu J, Qi S, Lu L (<a href="http://journals.humanapress.com/ArticleDetail.pasp?issn=1539-2791&acode=NI:1:4:299" target="_blank" class="fwn">2003</a>) The genetic structure of recombinant inbred mice: high-resolution consensus maps for complex trait analysis. Genome Biology 2(11)<A href="http://genomebiology.com/content/2/11/RESEARCH0046" class="fwn"><I>Full Text Version</I></A>. [A detailed analysis of the genetics of recombinant inbred strains] -<LI> -Chesler EJ, Wang J, Lu L, Qu Y, Manly KF, Williams RW (<a href="http://journals.humanapress.com/ArticleDetail.pasp?issn=1539-2791&acode=NI:1:4:343" target="_blank" class="fwn">2003</a>) Genetic correlates of gene expression in recombinant inbred strains: a relational model to explore for neurobehavioral phenotypes. Neuroinformatics 1: 343-357. <A href="http://www.nervenet.org/pdf/Genetic_Correlation_webQTL.pdf" class="fwn"><I>Full Text PDF Version</I></A>. [Best reference regarding interpretation of genetic correlations.] -<LI> -Chesler EJ, Lu L, Wang J, Williams RW, Manly KF (<a href="http://www.nature.com/cgi-taf/DynaPage.taf?file=/neuro/journal/v7/n5/full/nn0504-485.html" target="_blank" class="fwn">2004</a>) WebQTL: rapid exploratory analysis of gene expression and genetic networks for brain and behavior. Nature Neuroscience 7: 485-486. <A href="http://www.genenetwork.org/pdf/nn0504-485.pdf" class="fwn"><I>Full Text PDF Version</I></A> [A short review] -<LI> -Chesler EJ, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15474587" target="_blank" class="fwn">2004</a>) Brain gene expression: genomics and genetics. International Review of Neurobiology 60:59-95. (<I>DNA Arrays in Neurobiology</I>, edited by MF Miles, Elsevier, Amsterdam). [A longer discussion, both statistical and conceptual, on the genetic analysis of gene expression and relations to higher order behavioral phenotypes]</A> -<LI> -Bystrykh L, Weersing E, Dontje B, Sutton S, Pletcher MT, Wiltshire T, Su AI, Vellenga E, Wang J, Manly KF, Lu L, Chesler EJ, Alberts R, Jansen RC, Williams RW, Cooke M, de Haan G (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15711547" target="_blank" class="fwn">2005</A>) Uncovering regulatory pathways affecting hematopoietic stem cell function using "genetical genomics." Nature Genetics 37:225-232. [Please cite this article if you have used the GNF-Groningen hematopoietic stem cell data set.] -<LI> -Chesler EJ, Lu L, Shou S, Qu Y, Gu J, Wang J, Hsu HC, Mountz JD, Baldwin N, Langston MA, Threadgill DW, Manly KF, Williams RW (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15711545" target="_blank" class="fwn">2005</A>) Complex trait analysis of gene expression uncovers polygenic and pleiotropic networks that modulate nervous system function. Nature Genetics 37: 233-242. [Please cite this article if you have used one of the UTHSC brain data sets.] -<LI> -Damerval C, Maurice A, Josse JM, de Vienne D (<A HREF="http://www.genetics.org/cgi/content/abstract/137/1/289" class="fwn" target="_blank">1994</A>) Quantitative trait loci underlying gene product variation: a novel perspective for analyzing regulation of genome expression. Genetics 137: 289-301 <A href="http://www.genetics.org/cgi/reprint/137/1/289" class="fwn" target="_blank"><I>Full Text PDF Version</I></A> [The first published paper on system genetics. Impressive; before its time.] - -<Blockquote><SMALL>[Damerval et al., 1994 abstract] A methodology to dissect the genetic architecture of quantitative variation of numerous gene products simultaneously is proposed. For each individual of a segregating progeny, proteins extracted from a given organ are separated using two-dimensional electrophoresis, and their amounts are estimated with a computer-assisted system for spot quantification. Provided a complete genetic map is available, statistical procedures allow determination of the number, effects and chromosomal locations of factors controlling the amounts of individual proteins. This approach was applied to anonymous proteins of etiolated coleoptiles of maize, in an F(2) progeny between two distant lines. The genetic map included both restriction fragment length polymorphism and protein markers. Minimum estimates of one to five unlinked regulatory factors were found for 42 of the 72 proteins analyzed, with a large diversity of effects. Dominance and epistasis interactions were involved in the control of 38% and 14% of the 72 proteins, respectively. Such a methodology might help understanding the architecture of regulatory networks and the possible adaptive or phenotypic significance of the polymorphism of the genes involved. -</SMALL></Blockquote> - -<LI> -Grisham W, Schottler NA, Valli-Marill J, Beck L, Beatty J (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20516355" target="_blank" class="fwn" >2010</a>) Teaching bioinformatics and neuroinformatics by using free web-based tools. CBE--Life Sciences Education 9: 98-107 <A href="http://www.lifescied.org/content/9/2/98.full.pdf+html" target="_blank" class="fwn" ><I>Full Text PDF Version</I></A> -<BR><SMALL> A terrific introduction to a wide range of bioinformatic resources, including GeneNetwork, that have been assembled as a coherent teaching module. A detailed student/instructor’s manual, PDFs of handouts, PowerPoint slides, and sample exams are available for free at <A HREF="http://mdcune.psych.ucla.edu/modules/bioinformatics" target="_blank" class="fwn" >http://mdcune.psych.ucla.edu/modules/bioinformatics</A>. - -<BR><B>Youtube videos of Dr. William Grisham teaching neurogenetics at UCLA</B>: -<BR><A HREF="http://www.youtube.com/watch?v=5UniEc_pzs0" target="_blank" class="fwn" >Part 1</A> -<BR><A HREF="http://www.youtube.com/watch?v=zjdOWC7zxt0" target="_blank" class="fwn" >Part 2</A> -<BR><A HREF="http://www.youtube.com/watch?v=caC0YGhDoo8" target="_blank" class="fwn" >Part 3</A> -<BR><A HREF="http://www.youtube.com/watch?v=eTzIcM3aspM" target="_blank" class="fwn">Part 4</A> -<BR><A HREF="http://www.youtube.com/watch?v=Dnq7w4RIAXI" target="_blank" class="fwn">Part 5</A> -</SMALL> -<BR> -<BR> -<LI> -Grisham W (<a href="http://www.funjournal.org/downloads/200981/grisham81.pdf" target="_blank" class="fwn">2009</a>) Modular digitial course in undergraduate neuroscience education (MDCUNE): A website offering free digital tools for neuroscience educators. Journal of Undergraduate Neuroscience Education 8:A26-A31 <A href="http://www.funjournal.org/downloads/200981/grisham81.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<BR><SMALL> -An excellent example of how resources such as GeneNetwork and the Mouse Brain Library can be used in class room labs. -</SMALL> -<LI> -Hübner N, Wallace CA, Zimdahl H, Petretto E, Schulz H, Maciver F, Mueller M, Hummel O, Monti J, Zidek V, Musilova A, Kren V, Causton H, Game L, Born G, Schmidt S, Muller A, Cook SA, Kurtz TW, Whittaker J, Pravenec M, Aitman TJ (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15711544" target="_blank" class="fwn">2005</A>) Integrated transcriptional profiling and linkage analysis for identification of genes underlying disease. Nature Genetics 37: 243-253. [Please cite this article if you have used one of the rat HXB kidney or peritoneal fat data sets.] -<LI> -Kang HM, Ye C, Eskin E (2008) Accurate discovery of expression quantitative trait loci under confounding from spurious and genuine regulatory hotspots. Genetics 180:1909-1925 -<A href="http://www.genetics.org/cgi/content/abstract/genetics.108.094201v1" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>. [An important method that can greatly improve the ability to resolve true genetic interactions in expression genetic studies.] -<LI> -Ljungberg K, Holmgren S, Carlborg O (<A HREF="http://bioinformatics.oupjournals.org/cgi/content/abstract/bth175?ijkey=21Pp0pgOuBL6Q&keytype=ref" class="fwn" target="_blank">2004</A>) Simultaneous search for multiple QTL using the global optimization algorithm DIRECT. Bioinformatics 20:1887-1895. [Please review and cite this article if you have exploited the DIRECT pair-scan tool and output graphs in WebQTL.] -<LI> -Manly KF, Wang J, Williams RW (<A HREF="http://genomebiology.com/2005/6/3/R27" class="fwn" target="_blank">2005</A>) Weighting by heritability for detection of quantitative trait loci with microarray estimates of gene expression. Genome Biology 6: R27 <A href="http://genomebiology.com/2005/6/3/R27" class="fwn" target="_blank"><I>Full Text HTML and PDF Version</I></A>. [Please cite this article if you have used one of the HWT (Heritability Weighted Transform) data sets.] -<LI> -Manly K, Williams RW (2001) WEBQTL—WWW service for mapping quantitative trait loci. International Mouse Genome Conference 15: 74. [First published abstract on WebQTL, presented Oct 2001, Edinburgh; also see <A HREF="http://www.complextrait.org/archive/2002/HTML/manly.html" class="fwn" target="_blank">2002</A> CTC abstract] -<LI> -Taylor BA, Heiniger HJ, Meier H (<A HREf="http://www.ncbi.nlm.nih.gov/pubmed/4719448">1973</A>) Genetic analysis of resistance to cadmium-induced teticular damage in mice. Proc Soc Exp Biol Med 143:629-33 [This is one of the first full paper on the use of recombinant inbred strains in biomedical research and the first paper to use BXD lines of mice. The <I>cdm</I> locus that they mapped to distal Chr 3 was subsequently defined as the <I>Slc38a8</I> metal testicular metal ion transporter. <A HREF="/images/upload/Taylor_1973.pdf"> Full text</A> -<LI> -Webster JA, Gibbs JR, Clarke J, Ray M, Zhang W, Holmans P, Rohrer K, Zhao A, Marlowe L, Kaleem M, McCorquodale DS 3rd, Cuello C, Leung D, Bryden L, Nath P, Zismann VL, Joshipura K, Huentelman MJ, Hu-Lince D, Coon KD, Craig DW, Pearson JV; NACC-Neuropathology Group, Heward CB, Reiman EM, Stephan D, Hardy J, Myers AJ (<A HREF="http://www.ncbi.nlm.nih.gov/pubmed/19361613" class="fwn" target="_blank">2009</A>) Genetic control of human brain transcript expression in Alzheimer disease. Am J Hum Genet 84:445-58. [Please review and cite this article if you have used the HUMAN data set by Myers and colleagues in GeneNetwork.] -<LI> -Williams RW, Shou S, Lu L, Wang J, Manly KF, Hsu HC, Mountz J, Threadgill DW (<A HREF="http://www.complextrait.org/ctc2002/williams.html" class="fwn" target="_blank">2002</A>) Genomic analysis of transcriptional networks: combining microarrays with complex trait analysis. Complex Trait Consortium 1 [One of the first published abstracts on system genetic analysis of microarray data sets, presented May 2002.] -<LI> -Zhang B, Schmoyer D, Kirov S, Snoddy J (<a href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pubmed&pubmedid=14975175" target="_blank" class="fwn">2004</a>) GOTree Machine (GOTM): a web-based platform for interpreting sets of interesting genes using Gene Ontology hierarchies. BMC Bioinformatics 5:16. [This reference describes GOTM--the predecessor of WebGestalt that is now used to analyze sets of covarying transcripts.] - -</OL> -</Blockquote> - -<BLOCKQUOTE style="font-size: 14px;"> - <A NAME="2019" class="subtitle"">GeneNetwork (2019) </A> (not complete) -<BLOCKQUOTE> - -</Blockquote> -<OL> - -<LI> -Théberge ET, Baker JA, Dubose C, Boyle JK, Balce K, Goldowitz D, Hamre KM (<A HREF="https://ncbi.nlm.nih.gov/pubmed/30589433" target="_blank" class="fwn">2019</A>) Genetic influences on the amount of cell death in the neural tube of BXD mice exposed to acute ethanol at midgestation. Alcohol Clin Exp Res 43:439-452 -<LI> -Roy S, Zaman KI, Williams RW, Homayouni R (<A HREF="https://ncbi.nlm.nih.gov/pubmed/30871457" target="_blank" class="fwn">2019</A>) Evaluation of Sirtuin-3 probe quality and co-expressed genes using literature cohesion. BMC Bioinformatics 20(Suppl 2):104 - - -</OL> -</Blockquote> - -<BLOCKQUOTE style="font-size: 14px;"> - <A NAME="2018" class="subtitle"">GeneNetwork (2018) </A> (not complete) -<BLOCKQUOTE> - -</Blockquote> -<OL> - -<LI>Ashbrook DG, Mulligan MK, Williams RW Post-genomic behavioral genetics: From revolution to routine (<A HREF="https://ncbi.nlm.nih.gov/pubmed/29193773" target="_blank" class="fwn">2018</A>) Genes Brain Behav 17:e12441 -<LI> -de Vries M, Faiz A, Woldhuis RR, Postma DS, de Jong TV, Sin DD, Bossé Y, Nickle DC, Guryev V, Timens W, van den Berge M, Brandsma CA (<A HREF="https://ncbi.nlm.nih.gov/pubmed/29212667" target="_blank" class="fwn">2018</A>) Lung tissue gene-expression signature for the ageing lung in COPD. Thorax 73:609-617 -<LI> -Diessler S, Jan M, Emmenegger Y, Guex N, Middleton B, Skene DJ, Ibberson M, Burdet F, Götz L, Pagni M, Sankar M, Liechti R, Hor CN, Xenarios I, Franken P (<A HREF="https://ncbi.nlm.nih.gov/pubmed/30091978" target="_blank" class="fwn">2018</A>) A systems genetics resource and analysis of sleep regulation in the mouse. PLoS Biology 16(8):e2005750 -<LI> -King R, Struebing FL, Li Y, Wang J, Koch AA, Cooke Bailey JN, Gharahkhani P; International Glaucoma Genetics Consortium; NEIGHBORHOOD Consortium, MacGregor S, Allingham RR, Hauser MA, Wiggs JL, Geisert EE (<A HREF="https://ncbi.nlm.nih.gov/pubmed/29370175" target="_blank" class="fwn">2018</A>) Genomic locus modulating corneal thickness in the mouse identifies POU6F2 as a potential risk of developing glaucoma. PLoS Genet 14:e1007145 -<LI> -Lu Y, Zhou D, King R, Zhu S, Simpson CL, Jones BC, Zhang W, Geisert EE, Lu L (<A HREF="https://ncbi.nlm.nih.gov/pubmed/30619460" target="_blank" class="fwn">2018</A>) The genetic dissection of Myo7a gene expression in the retinas of BXD mice. Mol Vis 24:115-126 -<LI> -Struebing FL, King R, Li Y, Cooke Bailey JN; NEIGHBORHOOD consortium, Wiggs JL, Geisert EE (<A HREF="https://ncbi.nlm.nih.gov/pubmed/29421330" target="_blank" class="fwn">2018</A>) Genomic loci modulating retinal ganglion cell death following elevated IOP in the mouse. Exp Eye Res 169:61-67 - - -</OL> -</Blockquote> - - - - -<BLOCKQUOTE style="font-size: 14px;"> - <A NAME="2017" class="subtitle"">GeneNetwork (2017) </A> (not complete) -<BLOCKQUOTE> - -</Blockquote> -<OL> - -<LI> -Baker JA, Li J, Zhou D, Yang M, Cook MN, Jones BC, Mulligan MK, Hamre KM, Lu L (<A HREF="https://ncbi.nlm.nih.gov/pubmed/28027852" target="_blank" class="fwn">2017</A>) Analyses of differentially expressed genes after exposure to acute stress, acute ethanol, or a combination of both in mice. Alcohol 58:139-151 -<LI> -Baud A, Mulligan MK, Casale FP, Ingels JF, Bohl CJ, Callebert J, Launay JM, Krohn J, Legarra A, Williams RW, Stegle O (<A HREF="https://ncbi.nlm.nih.gov/pubmed/28121987" target="_blank" class="fwn">2017</A>) Genetic variation in the social environment contributes to health and disease. PLoS Genet 13(1):e1006498 -<LI>Brockmann GA, Arends D, Heise S, Dogan A (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27933540" target="_blank" class="fwn">2017</A>) Systems genetics of obesity. Methods Mol Biol. 2017;1488:481-497 -<LI> -Grisham W, Brumberg JC, Gilbert T, Lanyon L, Williams RW, Olivo R (<A HREF="https://ncbi.nlm.nih.gov/pubmed/29371844" target="_blank" class="fwn">2017</A>) Teaching with Big Data: Report from the 2016 Society for Neuroscience Teaching Workshop. J Undergrad Neurosci Educ 16:A68-A76 -<LI> - -Jones BC, Jellen LC (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27933539" target="_blank" class="fwn">2017</A>) Systems genetics analysis of iron and its regulation in brain and periphery. Methods Mol Biol 1488:467-480 -<LI> -Lopez MF, Miles MF, Williams RW, Becker HC (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27793543" target="_blank" class="fwn">2017</A>) Variable effects of chronic intermittent ethanol exposure on ethanol drinking in a genetically diverse mouse cohort. Alcohol 58:73-82 -<LI> -Parker CC, Dickson PE, Philip VM, Thomas M, Chesler EJ (<A HREF="https://ncbi.nlm.nih.gov/pubmed/28398643" target="_blank" class="fwn">2017</A>) Curr Protoc Neurosci 79:8.39.1-8.39.20 -<LI> -Porcu P, O'Buckley TK, Lopez MF, Becker HC, Miles MF, Williams RW, Morrow AL (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27884493" target="_blank" class="fwn">2017</A>) Initial genetic dissection of serum neuroactive steroids following chronic intermittent ethanol across BXD mouse strains. Alcohol 58:107-125 -<LI> -Rinker JA, Fulmer DB, Trantham-Davidson H, Smith ML, Williams RW, Lopez MF, Randall PK, Chandler LJ, Miles MF, Becker HC, Mulholland PJ (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27884493" target="_blank" class="fwn">2017</A>) Differential potassium channel gene regulation in BXD mice reveals novel targets for pharmacogenetic therapies to reduce heavy alcohol drinking. Alcohol 58:33-45 -<LI> -van der Vaart AD, Wolstenholme JT, Smith ML, Harris GM, Lopez MF, Wolen AR, Becker HC, Williams RW, Miles MF (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27838001" target="_blank" class="fwn">2017</A>) The allostatic impact of chronic ethanol on gene expression: A genetic analysis of chronic intermittent ethanol treatment in the BXD cohort. Alcohol 58:93-106 - - -</OL> -</Blockquote> - - - -<BLOCKQUOTE style="font-size: 14px;"> - <A NAME="2016" class="subtitle"">GeneNetwork (2016) </A> -<BLOCKQUOTE> - -</Blockquote> -<OL> - -<LI> -Alam G, Miller DB, O'Callaghan JP, Lu L, Williams RW, Jones BC (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27182044" target="_blank" class="fwn">2016</A>) MPTP neurotoxicity is highly concordant between the sexes among BXD recombinant inbred mouse strains. Neurotoxicology 55:40-7 -<LI> -Chintalapudi SR, Wang X, Li H, Lau YH, Williams RW, Jablonski MM (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27881906" target="_blank" class="fwn">2016</A>) Genetic and immunohistochemical analysis of HSPA5 in mouse and human retinas. Molecular Vision 22:1318-1331 -<LI> -Lu H, Lu L, Williams RW, Jablonski MM (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27011731" target="_blank" class="fwn">2016</A>) Iris transillumination defect and its gene modulators do not correlate with intraocular pressure in the BXD family of mice. Molecular Vision 22:224-233 -<LI> -Merkwirth C, Jovaisaite V, Durieux J, Matilainen O, Jordan SD, Quiros PM, Steffen KK, Williams EG, Mouchiroud L, Tronnes SU, Murillo V, Wolff SC, Shaw RJ, Auwerx J, Dillin A (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27133168" target="_blank" class="fwn">2016</A>) Two conserved histone demethylases regulate mitochondrial stress-induced longevity. Cell 165:1209-1223 -<LI> -Neuner SM, Garfinkel BP, Wilmott LA, Ignatowska-Jankowska BM, Citri A, Orly J, Lu L, Overall RW, Mulligan MK, Kempermann G, Williams RW, O'Connell KM, Kaczorowski CC (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27460150" target="_blank" class="fwn">2016</A>) Systems genetics identifies Hp1bp3 as a novel modulator of cognitive aging. Neurobiol Aging 46:58-67 -<LI> -Shi X, Walter NA, Harkness JH, Neve KA, Williams RW, Lu L, Belknap JK, Eshleman AJ, Phillips TJ, Janowsky A (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27031617" target="_blank" class="fwn">2016</A>) Genetic polymorphisms affect mouse and human Trace Amine-Associated Receptor 1 function. PLoS One 11(3):e0152581 -<LI> -Schultz NG, Ingels J, Hillhouse A, Wardwell K, Chang PL, Cheverud JM, Lutz C, Lu L, Williams RW, Dean MD (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26935419" target="_blank" class="fwn">2016</A>) The genetic basis of baculum size and shape variation in mice. G3 (Bethesda) 6(5):1141-1151 -<LI> -Sloan Z, Arends D, Broman KW, Centeno A, Furlotte N, Nijveen H, Yan L, Zhou X, Williams RW, Prins P (2016) GenetNetwork: framework for web-based genetics. The Journal of Open Source Software http://joss.theoj.org/papers/10.21105/joss.00025 (http://dx.doi.org/10.21105/joss.00025) -<LI> -Wang X, Pandey AK, Mulligan MK, Williams EG, Mozhui K, Li Z, Jovaisaite V, Quarles LD, Xiao Z, Huang J, Capra JA, Chen Z, Taylor WL, Bastarache L, Niu X, Pollard KS, Ciobanu DC, Reznik AO, Tishkov AV, Zhulin IB, Peng J, Nelson SF, Denny JC, Auwerx J, Lu L, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26833085" target="_blank" class="fwn">2016</A>) Joint mouse-human phenome-wide association to test gene function and disease risk. Nat Commun 7:10464 - <LI> -Williams EG, Wu Y, Jha P, Dubuis S, Blattmann P, Argmann CA, Houten SM, Amariuta T, Wolski W, Zamboni N, Aebersold R, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27284200" target="_blank" class="fwn">2016</A>) Systems proteomics of liver mitochondria function. Science 352(6291):aad0189 - - - -</OL> -</Blockquote> - - - -<BLOCKQUOTE style="font-size: 14px;"> - <A NAME="2015" class="subtitle"">GeneNetwork (2015) </A> -<BLOCKQUOTE> - -</Blockquote> -<OL> - -<LI> -Ashbrook DG, Gini B, Hager R (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26701914" target="_blank" class="fwn">2015</A>) Genetic variation in offspring indirectly influences the quality of maternal behaviour in mice. eLIFE 4:e11814 -<LI> -Ashbrook DG, Williams RW, Lu L, Hager R (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26190982" target="_blank" class="fwn">2015</A>) A cross-species genetic analysis identifies candidate genes for mouse anxiety and human bipolar disorder. Frontiers in Behavioral Neuroscience 9:171 -<LI> -Chaum E, Winborn CS, Bhattacharya S (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25963977" target="_blank" class="fwn">2015</A>) Genomic regulation of senescence and innate immunity signaling in the retinal pigment epithelium. Mammalian Genome 26:210-221 <A HREF="/images/upload/ChaumMammGenome2015.pdf"> Full text</A> -<LI> -Cheng Q, Seltzer Z, Sima C, Lakschevitz FS, Glogauer M (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25608512" target="_blank" class="fwn">2015</A>) Quantitative trait loci and candidate genes for neutrophil recruitment in sterile inflammation mapped in AXB-BXA recombinant inbred mice. PLoS One 10:e0124117 -<LI> -Cook MN, Baker JA, Heldt SA, Williams RW, Hamre KM, Lu L (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25991709" target="_blank" class="fwn">2015</A>) Identification of candidate genes that underlie the QTL on chromosome 1 that mediates genetic differences in stress-ethanol interactions. Physiol Genomics 47:308-317 -<LI> -Delprato A, Bonheur B, Algéo MP, Rosay P, Lu L, Williams RW, Crusio WE (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26449520" target="_blank" class="fwn">2015</A>) Systems genetic analysis of hippocampal neuroanatomy and spatial learning in mice. Genes Brain Behav 14(8):591-606 -<LI> -Ferguson B, Ram R, Handoko HY, Mukhopadhyay P, Muller HK, Soyer HP, Morahan G, Walker GJ (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25088201" target="_blank" class="fwn">2015</A>) Melanoma susceptibility as a complex trait: genetic variation controls all stages of tumor progression. Oncogene 34:2879-86 -<LI> -King R, Lu L, Williams RW, Geisert EE. (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26604663" target="_blank" class="fwn">2015</A>) Transcriptome networks in the mouse retina: An exon level BXD RI database. Mol Vis 21:1235-1251 -<LI> -Lee J, Seol MY, Jeong S, Kwon HJ, Lee CR, Ku CR, Kang SW, Jeong JJ, Shin DY, Nam KH, Lee EJ, Chung WY, Jo YS (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25942439" target="_blank" class="fwn">2015</A>) KSR1 is coordinately regulated with Notch signaling and oxidative phosphorylation in thyroid cancer. J Mol Endocrinol 54:115-124 -<LI> -Padula AE, Griffin WC 3rd, Lopez MF, Nimitvilai S, Cannady R, McGuier NS, Chesler EJ, Miles MF, Williams RW, Randall PK, Woodward JJ, Becker HC, Mulholland PJ (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25942439" target="_blank" class="fwn">2015</A>) KCNN genes that encode small-conductance Ca(2+)-activated K(+) channels influence alcohol and drug addiction. Neuropsychopharmacology 40:1928-1939 -<LI> -Scott RE, Ghule PN, Stein JL, Stein GS (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25662840" target="_blank" class="fwn">2015</A>) Cell cycle gene expression networks discovered using systems biology: Significance in carcinogenesis. J Cell Physiol 230:2533-42 -<LI> -Shea CJ, Carhuatanta KA, Wagner J, Bechmann N, Moore R, Herman JP, Jankord R (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26079812" target="_blank" class="fwn">2015</A>) Variable impact of chronic stress on spatial learning and memory in BXD mice. Physiol Behav. 150:69-77 <A HREF="http://www.sciencedirect.com/science/article/pii/S0031938415003583"> Full text</A> -<LI> -Xue Y, Li J, Yan L, Lu L, Liao FF (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26092713" target="_blank" class="fwn">2015</A>) Genetic variability to diet-induced hippocampal dysfunction in BXD recombinant inbred (RI) mouse strains. Behav Brain Res 292:83-94 -<LI> -Williams EG, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26140590" target="_blank" class="fwn">2015</A>) The convergence of systems and reductionist approaches in complex trait analysis. Cell 162:23-32. <SMALL><A HREF="/images/upload/WilliamsEG_Auwerx_Cell2015.pdf" target="_blank" class="fwn">PDF version</A></SMALL> - - -</OL> -</Blockquote> - - - - - - - - - - -<BLOCKQUOTE style="font-size: 14px;"> - <A NAME="2014" class="subtitle"">GeneNetwork (2014) </A> -<BLOCKQUOTE> - -</Blockquote> -<OL> - - -<LI> -Ashbrook GN, Delprato A, Grellmann C, Klein M, Wetzel R, Overall RW, Badea A (<A HREF="https://ncbi.nlm.nih.gov/pubmed/get" target="_blank" class="fwn">2014</A>) Transcript co-variance with Nestin in two mouse genetic reference populations identifies Lef1 as a novel candidate regulator of neural precursor cell proliferation in the adult hippocampus. Frontiers in Neuroscience in press -<LI> -Ashbrook DG, Williams RW, Lu L, Stein JL, Hibar DP, Nichols TE, Medland SE, Thompson PM, Hager R. (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25280473" target="_blank" class="fwn">2014</A>) Joint genetic analysis of hippocampal size in mouse and human identifies a novel gene linked to neurodegenerative disease. BMC Genomics 15:850 -<LI> -Carhuatanta KA, Shea CJ, Herman JP, Jankord R (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25374516" target="_blank" class="fwn">2014</A>) Unique genetic loci identified for emotional behavior in control and chronic stress conditions. Front Behav Neurosci 8:341 -<LI> -Emery FD, Parvathareddy J, Pandey AK, Cui Y, Williams RW, Miller MA (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24687986" target="_blank" class="fwn">2014</A>) Genetic control of weight loss during pneumonic Burkholderia pseudomallei infection. Pathog Dis 71:249-264 -<LI> -Goldowitz D, Lussier AA, Boyle JK, Wong K, Lattimer SL, Dubose C, Lu L, Kobor MS, Hamre KM (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25076964" target="_blank" class="fwn">2014</A>) Molecular pathways underpinning ethanol-induced neurodegeneration. Front Genet 5:203 -<LI> -Graybeal C, Bachu M, Mozhui K, Saksida LM, Bussey TJ, Sagalyn E, Williams RW, Holmes A (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24586288" target="_blank" class="fwn">2014</A>) Strains and stressors: an analysis of touchscreen learning in genetically diverse mouse strains. PLoS One 9(2):e87745 -<LI> -Hall RA, Liebe R, Hochrath K, Kazakov A, Alberts R, Laufs U, Böhm M, Fischer HP, Williams RW, Schughart K, Weber SN, Lammert F (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24586654" target="_blank" class="fwn">2014</A>) Systems genetics of liver fibrosis: Identification of fibrogenic and expression quantitative trait loci in the BXD murine reference population.PLoS One 9(2):e89279 -<LI> -Harenza JL, Muldoon PP, Biasi MD, Imad Damaj M, Miles MF (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24289814" target="_blank" class="fwn">2014</A>) Genetic variation within the Chrna7 gene modulates nicotine reward-like phenotypes in mice. Genes, Brain & Behavior 13:213-225 -<LI> -Hayes SK, Hager R, Grencis RK (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24628794" target="_blank" class="fwn">2014</A>) Sex-dependent genetics effects on immune responses to parasitic nematodes. BMC Genomics 15:193 -<LI> -Huang Y, Zhu X, Wang L, Liu X, Lu L, Gu W, Jiao Y (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25133246" target="_blank" class="fwn">2014</A>) Genome wide analysis of sex difference in gene expression profiles of bone formations using sfx mice and BXD RI strains. ScientificWorldJournal 2014:584910 -<LI> -Hasenfuss SC, Bakiri L, Thomsen MK, Williams EG, Auwerx J, Wagner EF (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24411941" target="_blank" class="fwn">2014</A>) Regulation of steatohepatitis and PPARγ signaling by distinct AP-1 dimers. Cell Metab. 2014 Jan 7;19(1):84-95. -<LI> -Jones BC, O'Callaghan JP, Lu L, Williams RW, Alam G, Miller DB (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25192776" target="_blank" class="fwn">2014</A>) Genetic correlational analysis reveals no association between MPP+ and the severity of striatal dopaminergic damage following MPTP treatment in BXD mouse strains. Neurotoxicol Teratol pii: S0892-0362(14)00159-7 -<LI> -Keeley PW, Whitney IE, Madsen NR, St John AJ, Borhanian S, Leong SA, Williams RW, Reese BE (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24954025" target="_blank" class="fwn">2014</A>) Independent genomic control of neuronal number across retinal cell types. Dev Cell 30:103-109 -<LI> -Keeley PW, Zhou C, Lu L, Williams RW, Melmed S, Reese BE (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24927528" target="_blank" class="fwn">2014</A>) Pituitary tumor-transforming gene 1 regulates the patterning of retinal mosaics. Proc Natl Acad Sci USA 111:9295- -<LI> -Kweon KH, Lee CR, Jung SJ, Ban EJ, Kang SW, Jeong JJ, Nam KH, Jo YS, Lee J, Chung WY (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25109285" target="_blank" class="fwn">2014</A>) Sirt1 induction confers resistance to etoposide-induced genotoxic apoptosis in thyroid cancers. Int J Oncol 45:2065-2075 -<LI> -Loos M, Mueller T, Gouwenberg Y, Wijnands R, van der Loo RJ, Birchmeier C, Smit AB, Spijker S (<A HREF="/images/upload/Loos_Spijker_Nrg3Impulsive_BioPsch_2014.pdf" target="_blank" class="fwn">2014</A>) Neuregulin-3 in the mouse medial prefrontal cortex regulates impulsive action. Biol Psychiatry 76:648-655 -<LI> -Lotan A, Fenckova M, Fralten J, Alttoa A, Dixson L, Williams RW, van der Voet M (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25414627" target="_blank" class="fwn">2014</A>) Neuroinformatic analyses of common and distinct genetic components associate with major neuropsychiatric disorders. Frontiers in Neuroscience 8:331 -<LI> -McLachlan SM, Aliesky H, Banuelos B, Magana J, Williams RW, Rapoport B. (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25051451" target="_blank" class="fwn">2014</A>) Immunoglobulin heavy chain variable region and major histocompatibility region genes are linked to induced graves' disease in females from two very large families of recombinant inbred mice. Endocrinology 155:4094-4103 -<LI> -McLachlan SM, Hamidi S, Aliesky H, Williams RW, Rapoport B (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24564389" target="_blank" class="fwn">2014</A>) Sex, genetics and the control of thyroxine and thyrotropin in mice. Thyroid 24:1080-1087 -<LI> -Muldoon PP, Jackson KJ, Perez E, Harenza JL, Molas S, Rais B, Anwar H, Zaveri NT, Maldonado R, Maskos U, McIntosh JM, Dierssen M, Miles MF, Chen X, De Biasi M, Damaj MI (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24750073" target="_blank" class="fwn">2014</A>) The alpha3beta4* nicotinic ACh receptor subtype mediates physical dependence to morphine: mouse and human studies. Br J Pharmacol 171:3845-3857 -<Li> -Nguyen C, Baten A, Morahan G (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24647628" target="_blank" class="fwn">2014</A>) Comparison of sequence variants in transcriptomic control regions across 17 mouse genomes. Database (Oxford): bau020. doi: 10.1093/database/bau020 -<LI> -Pandey AK, Lu L, Wang X, Homayouni R, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24523945" target="_blank" class="fwn">2014</A>) Functionally enigmatic genes: a case study of the brain ignorome. PLoS One 9(2):e88889 -<LI> -Pandey AK, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25172476" target="_blank" class="fwn">2014</A>) Genetics of gene expression in CNS. Int Rev Neurobiol 116:195-231 -<LI> -Pietrzykowski A, Spijker S (<A HREF="https://ncbi.nlm.nih.gov/pubmed/get" target="_blank" class="fwn">2014</A>) Impulsivity and comorbid traits: a multi-step approach for finding putative responsible microRNAs in the amygdala. Frontiers in Neuroscience in press -<LI> -Pirinen E, Cantó C, Jo YS, Morato L, Zhang H, Menzies KJ, Williams EG, Mouchiroud L, Moullan N, Hagberg C, Li W, Timmers S, Imhof R, Verbeek J, Pujol A, van Loon B, Viscomi C, Zeviani M, Schrauwen P, Sauve AA, Schoonjans K, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24770626" target="_blank" class="fwn">2014</A>) Pharmacological inhibition of poly(ADP-ribose) polymerases improves fitness and mitochondrial function in skeletal muscle. Cell Metab 19:1034-1041 -<LI> -Poon A, Goldowitz D (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24640950" target="_blank" class="fwn">2014</A>) Identification of genetic loci that modulate cell proliferation in the adult rostral migratory stream using the expanded panel of BXD mice. BMC Genomics 15:206 -<LI> -Porcu P, Morrow AL (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24770626" target="_blank" class="fwn">2014</A>) Divergent neuroactive steroid responses to stress and ethanol in rat and mouse strains: Relevance for human studies. Psychopharmacology (Berl) 231:3257-3272 -<LI> -Ram R, Mehta M, Balmer L, Gatti DM, Morahan G (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25236450" target="_blank" class="fwn">2014</A>) -Rapid identification of major-effect genes using the collaborative cross. Genetics 198:75-86 -PMID: 25236450 -<LI> -Ryu D, Jo YS, Lo Sasso G, Stein S, Zhang H, Perino A, Lee JU, Zeviani M, Romand R, Hottiger MO, Schoonjans K, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25200183" target="_blank" class="fwn">2014</A>) A SIRT7-dependent acetylation switch of GABPβ1 controls mitochondrial function. Cell Metab in press -<LI> -Thompson RL, Williams RW, Kotb M, Sawtell NM. (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24651695" target="_blank" class="fwn">2014</A>) A forward phenotypically driven unbiased genetic analysis of host genes that moderate herpes simplex virus virulence and stromal keratitis in mice. PLoS One 9(3):e92342 -<LI> -Toth LA, Trammell RA, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24535895" target="_blank" class="fwn">2014</A>) Mapping complex traits using families of recombinant inbred strains: an overview and example of mapping susceptibility to Candida albicans induced illness phenotypes. Pathog Dis 71:234-248 -<LI> -Unger EL, Jones BC, Bianco LE, Allen RP, Earley CJ (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24406439" target="_blank" class="fwn">2014</A>) Diurnal variations in brain iron concentrations in BXD RI mice. Neuroscience 263:54-59 -<LI> -van de Lagemaat LN, Nijhof B, Bosch DG, Kohansal-Nodehi M, Keerthikumar S, Heimel JA (<A HREF="https://ncbi.nlm.nih.gov/pubmed/get" target="_blank" class="fwn">2014</A>) Age-related decreased inhibitory versus excitatory gene expression in the adult autistic brain. Frontiers in Neuroscience in press -<LI> -Vied CM, Freudenberg F, Wang Y, Raposo AA, Feng D, Nowakowski RS (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25191221" target="_blank" class="fwn">2014</A>) A multi-resource data integration approach: identification of candidate genes regulating cell proliferation during neocortical development. Frontiers in Neuroscience 8:257 -<LI> -Wang L, Lu W, Zhang L, Huang Y, Scheib R, Liu X, Myers L, Lu L, Farber CR, Liu G, Wang CY, Deng H, Williams RW, Wang Y, Gu W, Jiao (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24416236" target="_blank" class="fwn">2014</A>) Trps1 differentially modulates the bone mineral density between male and female mice and its polymorphism associates with BMD differently between women and men. PLoS One 9(1):e84485 -<LI> -Wu Y, Williams EG, Dubuis S, Mottis A, Jovaisaite V, Houten SM, Argmann CA, Faridi P, Wolski W, Kutalik Z, Zamboni N, Auwerx J, Aebersold R (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25215496" target="_blank" class="fwn">2014</A>) Multilayered genetic and omics dissection of mitochondrial activity in a mouse reference population. Cell 158:1415-1430 -<LI> -Williams EG, Mouchiroud L, Frochaux M, Pandey A, Andreux PA, Deplancke B, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25255223" target="_blank" class="fwn">2014</A>) An evolutionarily conserved role for the aryl hydrocarbon receptor in the regulation of movement. PLoS Genet 10:e1004673 -<LI> -Ye R, Carneiro AM, Airey D, Sanders-Bush E, Williams RW, Lu L, Wang J, Zhang B, Blakely RD (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24102824" target="_blank" class="fwn">2014</A>) Evaluation of heritable determinants of blood and brain serotonin homeostasis using recombinant inbred mice. Genes Brain Behav. 13:247-260 - - -</OL> -</Blockquote> - - - - - - - -<BLOCKQUOTE style="font-size: 14px;"> - <A NAME="2013" class="subtitle"">GeneNetwork (2013) </A> -<BLOCKQUOTE> - -</Blockquote> -<OL> - -<LI> -Bhandari P, Hill JS, Farris SP, Costin B, Martin I, Chan CL, Alaimo JT, Bettinger JC, Davies AG, Miles MF, Grotewiel M (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22239914" target="_blank" class="fwn">2013</A>) Chloride intracellular channels modulate acute ethanol behaviors in Drosophila, Caenorhabditis elegans and mice. Genes, Brain & Behavior 11:387-97 -<LI> -Cheng Y, Gaughan J, Midic U, Han Z, Liang CG, Patel BG, Latham KE (<A HREF="http://www.genetics.org/content/193/3/877.long" target="_blank" class="fwn">2013</A>) Systems genetics implicates cytoskeletal genes in oocyte control of cloned embryo quality. Genetics 193:877-896 <A HREF="/images/upload/Cheng_Latham_2013.pdf" target="_blank" class="fwn">PDF version</A> -<LI> -Dogan A, Lasch P, Neuschl C, Millrose MK, Alberts R, Schughart K, Naumann D, Brockmann GA. (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23758785" target="_blank" class="fwn">2013</A>) ATR-FTIR spectroscopy reveals genomic loci regulating the tissue response in high fat diet fed BXD recombinant inbred mouse strains. BMC Genomics 14:386 -<LI> -DuBose CS, Chesler EJ, Goldowitz D, Hamre KM (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23289978" target="_blank" class="fwn">2013</A>) Use of the expanded panel of BXD mice narrow QTL regions in ethanol-induced locomotor activation and motor incoordination. Alcohol Clin Exp Res 37:170-83 -<LI> -Farris SP, Miles MF (<A HREF="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0082435" target="_blank" class="fwn">2013</A>) Fyn-dependent gene networks in acute ethanol sensitivity. PLoS One 8:e82435 -<LI> -Houtkooper RH, Mouchiroud L, Ryu D, Moullan N, Katsyuba E, Knott G, Williams RW, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23698443" target="_blank" class="fwn">2013</A>) Mitonuclear protein imbalance as a conserved longevity mechanism. Nature 497:451-457 <A HREF="/images/upload/Houtkooper_Williams_Auwerx_Nature_2013.pdf" target="_blank" class="fwn">PDF version</A> -<LI> -Huang Y, Wang L, Bennett B, Williams RW, Wang YJ, Gu WK, Jiao Y (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24085430" target="_blank" class="fwn">2013</A>) Potential role of Atp5g3 in epigenetic regulation of alcohol preference or obesity from a mouse genomic perspective. Genet Mol Res 12:3662-3674 -<LI> -Jellen LC, Lu L, Wang X, Unger EL, Earley CJ, Allen RP, Williams RW, Jones BC (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23911809" target="_blank" class="fwn">2013</A>) Iron deficiency alters expression of dopamine-related genes in the ventral midbrain in mice. Neuroscience 252:13-23 -<LI> -Jiao Y, Chen H, Yan J, Wang L, Huang Y, Liu X, Williams RW, Lu L, Wang Y, Gu W (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23665904" target="_blank" class="fwn">2013</A>) Genome-wide gene expression profiles in antioxidant pathways and their potential sex differences and connections to vitamin C in mice. Int J Mol Sci 14:10042-62 -<LI> -Jones BC, Miller DB, O'Callaghan JP, Lu L, Unger EL, Alam G, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23558233" target="_blank" class="fwn">2013</A>) Systems analysis of genetic variation in MPTP neurotoxicity in mice. Neurotoxicology 37C:26-34 -<LI> -Liebe R, Hall RA, Williams RW, Dooley S, Lammert F (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23943854" target="_blank" class="fwn">2013</A>) Systems genetics of hepatocellular damage in vivo and in vitro: identification of a critical network on chromosome 11 in mouse. Physiological Genomics 45:931-939 -<LI> -Lindblom RP, Aeinehband S, Parso R, Strom M, Al Nimer F, Zhang XM, Domingues CA, Flytzani S, Siez M, Piehl F (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23558233" target="_blank" class="fwn">2013</A>) Genetic variability in the rat Aplec C-type lectin gene cluster regulates lymphocyte trafficking and motor neuron survival after traumatic nerve root injury. Journal of Neuroinflammation 10:60 -<LI> -Mulligan MK, Dubose C, Yue J, Miles MF, Lu L, Hamre KM (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23847651" target="_blank" class="fwn">2013</A>) Expression, covariation, and genetic regulation of miRNA biogenesis genes in brain supports their role in addiction, psychiatric disorders, and disease. Frontiers in Genetics 4:126 -<LI> -Swaminathan S, Lu H, Williams RW, Lu L, Jablonski MM (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23582180" target="_blank" class="fwn">2013</A>) Genetic modulation of the iris transillumination defect: a systems genetics analysis using the expanded family of BXD glaucoma strains. Pigment Cell Melanoma Research 26:487-98 -<LI> -Templeton JP, Wang X, Freeman NE, Ma Z, Lu A, Hejtmancik F, Geisert EE (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23978599" target="_blank" class="fwn">2013</A>) A crystallin gene network in the mouse retina. Exp Eye Res. 116C:129-140 -<LI> -Templeton JP, Freeman NE, Nickerson JM, Jablonski MM, Rex TS, Williams RW, Geisert EE (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23493296" target="_blank" class="fwn">2013</A>) Innate immune network in the retina activated by optic nerve crush. Invest Ophthalmol Vis Sci. 54:2599-606 -<LI> -Vanderlinden LA, Saba LM, Kechris K, Miles MF, Hoffman PL, Tabakoff B (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23894363" target="_blank" class="fwn">2013</A>) Whole brain and brain regional coexpression network interactions associated with predisposition to alcohol consumption. PLoS One 8:e68878. - - - - -</OL> -</Blockquote> - - - - - - - - - - - - - - - - - - - -<BLOCKQUOTE style="font-size: 14px;"> - <A NAME="2012" class="subtitle"">GeneNetwork (2012) </A> -<BLOCKQUOTE> - -</Blockquote> -<OL> - -<LI> -Alberts R, Chen H, Pommerenke C, Smit AB, Spijker S, Williams RW, Geffers R, Bruder D, Schughart K (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22182475" target="_blank" class="fwn">2011</A>) Expression QTL mapping in regulatory and helper T cells from the BXD family of strains reveals novel cell-specific genes, gene-gene interactions and candidate genes for auto-immune disease. BMC Genomics 12:610 <A HREF="http://www.biomedcentral.com/content/pdf/1471-2164-12-610.pdf" target="_blank" class="fwn">PDF version</A> -<LI> -Andreux PA, Williams EG, Koutnikova H, Houtkooper RH, Champy MF, Henry H, Schoonjana K, Williams RW, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22675444" target="_blank" class="fwn">2012</A>) Systems genetics of metabolism: the use of the BXD murine reference panel for multiscalar integration of traits. Cell 150:1287-1299 -<LI> -Boughter JD Jr, Mulligan MK, St John SJ, Tokita K, Lu L, Heck DH, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22675444" target="_blank" class="fwn">2012</A>) Genetic control of a central pattern generator: Rhythmic oromotor movement in mice Is controlled by a major locus near Atp1a2. PLoS One 7:e38169. <A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0038169" target="_blank" class="fwn"><I>Full Text version</I> </A> -<LI> -Bubier JA, Chesler EJ (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22422471" target="_blank" class="fwn">2012</A>) Accelerating discovery for complex neurological and behavioral disorders through systems genetics and integrative genomics in the laboratory mouse. Neurotherapeutics 9:338-348 <A href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3325414/" target="_blank" class="fwn"><I>Full Text version</I> </A> -<LI> -Bryant CD, Kole LA, Guido MA, Sokoloff G, Palmer AA (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22675444" target="_blank" class="fwn">2012</A>) Congenic dissection of a major QTL for methamphetamine sensitivity implicates epistasis. Genes, Brain and Behavior 11:623-632 <A href="/images/upload/Bryant_Palmer2012.pdf" target="_blank" class="fwn"><I>PDF version</I> </A> -<LI> -Downing C, Balderrama-Durbin C, Kimball A, Biers J, Wright H, Gilliam D, Johnson TE (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22413943" target="_blank" class="fwn">2012</A>) Quantitative trait locus mapping for ethanol teratogenesis in BXD recombinant inbred mice. Alcohol Clin Exp Res. 36:1340-1354 -<LI> -Durrant C, Swertz MA, Alberts R, Arends D, Möller S, Mott R, Prins P, van der Velde KJ, Jansen RC, Schughart K.(<A HREF="https://ncbi.nlm.nih.gov/pubmed/22396485" target="_blank" class="fwn">2012</A>) Bioinformatics tools and database resources for systems genetics analysis in mice--a short review and an evaluation of future needs. Brief Bioinform 13:135-142 <A HREF="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3294237/" target="_blank" class="fwn">HTML version</A> -<LI> -Gini B, Hager R (2012) Recombinant inbred systems can advance research in behavioral ecology. Front. Gene. 3:198 <A HREF="http://www.frontiersin.org/Genetic_Architecture/10.3389/fgene.2012.00198/fullf" target="_blank" class="fwn"><I>Full Text version</I> </A> -<LI> -Hager R, Lu L, Rosen GD, Williams RW. (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23011133" target="_blank" class="fwn">2012</A>) Genetic architecture supports mosaic brain evolution and independent brain-body size regulation. Nature Communications 3:1079 <A HREF="/images/upload/Hager_Mosaic_NatComm_2012.pdf" target="_blank" class="fwn">PDF version</A> <A href="http://www.nature.com/ncomms/journal/v3/n9/full/ncomms2086.html" target="_blank" class="fwn"><I>Full Text version</I> </A> -<LI> -Jellen LC, Unger EL, Lu L, Williams RW, Rousseau S, Wang X, Earley CJ, Allen RP, Miles MF, Jones BC (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22457016" target="_blank" class="fwn">2012</A>) Systems genetic analysis of the effects of iron deficiency in mouse brain. Neurogenetics 13:147-157 -<LI> -McKnite AM, Perez-Munoz ME, Lu L, Williams EG, Brewer S, Andreux PA, Bastiaansen JW, Wang X, Kachman SD, Auwerx J, Williams RW, Benson AK, Peterson DA, Ciobanu DC (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22723961" target="_blank" class="fwn">2012</A>) Murine gut microbiota is defined by host genetics and modulates variation of metabolic traits. PLoS One 7:e39191 <A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0039191" target="_blank" class="fwn"><I>Full Text version</I> </A> -<LI> -Mulligan MK, Wang X, Adler AL, Mozhui K, Lu L, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22675444" target="_blank" class="fwn">2012</A>) Complex control of GABA(A) receptor subunit mRNA expression: variation, covariation, and genetic regulation. PLoS One 7:e34586 <A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0034586" target="_blank" class="fwn"><I>Full Text version</I> </A> -<LI> -Newbury AJ, Rosen GD (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22666227" target="_blank" class="fwn">2012</A>) Genetic, morphometric, and behavioral factors linked to the midsagittal area of the corpus callosum. Frontiers in Genetics 3:91 -<BR><SMALL> <A HREF="http://www.frontiersin.org/Journal/DownloadFile.ashx?pdf=1&FileId=%204774&articleId=%2027108&Version=%201&ContentTypeId=21&FileName=%20fgene-03-00091.pdf" target="_blank" class="fwn">PDF version</A><A href="http://www.frontiersin.org/Neurogenomics/10.3389/fgene.2012.00091/full" target="_blank" class="fwn"><I>Full Text version</I> </A> -</SMALL> - - -<LI> -Parker CC, Cheng R, Sokoloff G, Palmer AA (<A HREF="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3368015/" target="_blank" class="fwn">2012</A>) Genome-wide association for methamphetamine sensitivity in an advanced intercross mouse line. Genes, Brain & Behavior 11:52-61 - -<LI> -Reinius B, Johansson MM, Radomska KJ, Morrow EH, Pandey GK, Kanduri C, Sandberg R, Williams RW, Jazin E (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23140559" target="_blank" class="fwn">2012</A>) Abundance of female-biased and paucity of male-biased somatically expressed genes on the mouse X-chromosome. BMC Genomics 13:607 -<LI> -Rietman ML, Sommeijer JP; Neuro-Bsik Mouse Phenomics Consortium, Levelt CN, Heimel JA (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22347157" target="_blank" class="fwn">2012</A>) Candidate genes in ocular dominance plasticity. Frontiers in Neuroscience 6:11 <A href="http://www.frontiersin.org/Journal/DownloadFile.ashx?pdf=1&FileId=%202788&articleId=%2014498&Version=%201&ContentTypeId=21&FileName=%20fnins-06-00011.pdf" target="_blank" class="fwn"><I>PDF version</I> </A> -<LI> -Talishinsky A, Rosen GD (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22675444" target="_blank" class="fwn">2012</A>) Systems genetics of the lateral septal nucleus in mouse: Heritability, genetic control, and covariation with behavioral and morphological traits. PLoS One 7: e44236 -<SMALL><A HREF="http://www.plosone.org/article/fetchObjectAttachment.action;jsessionid=FD5CD26B1104BCD693F22ABD746ED332?uri=info%3Adoi%2F10.1371%2Fjournal.pone.0038169&representation=PDF" target="_blank" class="fwn">PDF version</A><A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0044236" target="_blank" class="fwn"><I>Full Text version</I> </A> -</SMALL> -<LI> -Williams RW, Mulligan MK (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23195314" target="_blank" class="fwn">2012</A>) Genetic and molecular network analysis of behavior. Int Rev Neurobiol. 104:135-57 -<SMALL><A HREF="/images/upload/Williams_Mulligan_Bioinformatics of Brain Short 2012.pdf" target="_blank" class="fwn">PDF version</A> -</SMALL> -<LI> -Wolen AR, Phillips CA, Langston MA, Vorster PJ, Bruce NA, York TP, Williams RW, Miles MF (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22511924" target="_blank" class="fwn">2012</A>) Genetic dissection of acute ethanol responsive gene networks in prefrontal cortex: Functional and mechanistic implications. PLoS One 7:e33575 -<LI> -Yin L, Unger EL, Jellen LC, Earley CJ, Allen RP, Tomaszewicz A, Fleet JC, Jones BC. (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22461179" target="_blank" class="fwn">2012</A>) Systems genetic analysis of multivariate response to iron deficiency in mice. Am J Physiol Regul Integr Comp Physiol 302:R1282-96 -<SMALL><A HREF="/images/upload/Yin_Jones_2012.pdf" target="_blank" class="fwn">PDF version</A> -</SMALL> -<LI> -Ziebarth JD, Cook MN, Wang X, Williams RW, Lu L, Cui Y (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22675444" target="_blank" class="fwn">2012</A>) Treatment- and population-dependent activity patterns of behavioral and expression QTLs. PLoS One 7:e31805. -<SMALL><A HREF="http://www.plosone.org/article/fetchObjectAttachment.action?uri=info%3Adoi%2F10.1371%2Fjournal.pone.0031805&representation=PDF" target="_blank" class="fwn">PDF version</A><A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0031805" target="_blank" class="fwn"><I>Full Text version</I> </A> -<LI> -Zumbrun EE, Abdeltawab NF, Bloomfield HA, Chance TB, Nichols DK, Harrison PE, Kotb M, Nalca A (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23207275" target="_blank" class="fwn">2012</A>) Development of a murine model for aerosolized ebolavirus infection using a panel of recombinant inbred mice. Viruses. 2012 Dec 3;4(12):3468-3493 - - -</SMALL> - - - - - - - - -</OL> -</Blockquote> - - - - - - - -<BLOCKQUOTE style="font-size: 14px;"> - <A NAME="2011" class="subtitle"">GeneNetwork (2011) </A> -<BLOCKQUOTE> - -</Blockquote> -<OL> - - - -<LI> -Alberts R, Lu L, Williams RW, Schughart K. (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21535883" target="_blank" class="fwn" >2011</a>) Genome-wide analysis of the mouse lung transcriptome reveals novel molecular gene interaction networks and cell-specific expression signatures. Respir Res 12:61 <A href="http://respiratory-research.com/content/12/1/61" target="_blank" class="fwn"><I>Full Text version</I> </A> -<LI> -Alberts R, Chen H, Pommerenke C, Smit AB, Spijker S, Williams RW, Geffers R, Bruder D, Schughart K (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22182475" target="_blank" class="fwn">2011</A>) Expression QTL mapping in regulatory and helper T cells from the BXD family of strains reveals novel cell-specific genes, gene-gene interactions and candidate genes for auto-immune disease. BMC Genomics 12:610 <A href="http://www.biomedcentral.com/1471-2164/12/610/abstract" target="_blank" class="fwn"><I>Full Text version</I> </A> -<LI> -Di Curzio DL, Goldowitz D (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21347846" target="_blank" class="fwn" >2011</a>) The genetic basis of adrenal gland weight and structure in BXD recombinant inbred mice. Mammalian Genome 22:209–234 <A href="/images/upload/DiCurzio_Goldowitz-2011_BXDAdrenals.pdf" target="_blank" class="fwn"><I>Full Text PDF version</I> </A> -<LI> -Gatti DM, Lu L, Williams RW, Sun W, Wright FA, Threadgill DW, Rusyn I (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21616085" target="_blank" class="fwn" >2011</a>) MicroRNA expression in the livers of inbred mice. Mutation Research 714:126-133 -<LI> -Gibson JN, Jellen LC, Unger EL, Morahan G, Mehta M, Earley CJ, Allen RP, Lu L, Jones BC (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21732193" target="_blank" class="fwn" >2011</a>) Genetic analysis of iron-deficiency effects on the mouse spleen. Mammalian Genome 22:556-62 -<LI> -Hakvoort TB, Moerland PD, Frijters R, Sokolovic A, Labruyère WT, Vermeulen JL, Ver Loren van Themaat E, Breit TM, Wittink FR, van Kampen AH, Verhoeven AJ, Lamers WH, Sokolovic M (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21393243" target="_blank" class="fwn" >2011</a>) Interorgan coordination of the murine adaptive response to fasting. J Biol Chem 286:16332-43 -<LI> -Freeman NE, Templeton JP, Orr WE, Lu L, Williams RW, Geisert EE (2011) Genetic networks in the mouse retina: Growth Associated Protein 43 and Phosphate Tensin Homology network. Molecular Vision 17:1355-1372 <A HREF="http://www.molvis.org/molvis/v17/a153/" target="_blank" style="font-size: 14px;" ><I>Full Text HTML</I> </A> and <A HREF="http://www.molvis.org/molvis/v17/a153/mv-v17-a153-freeman.pdf" target="_blank" class="fwn" ><I>PDF </I> </A> versions -<LI> -Jablonski MM, Freeman NE, Orr WE, Templeton JP, Lu L, Williams RW, Geisert EE (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20882406" target="_blank" class="fwn">2011</a>) Genetic pathways regulating glutamate levels in retinal Müller cells. Neurochem Res 36:594-603 -<LI> -Jackson KJ, Chen X, Miles MF, Harenza J, Damaj MI (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21796100" target="_blank" class="fwn">2011</a>) The neuropeptide galanin and variants in the <I>GalR1</I> gene are associated with nicotine dependence. Neuropsychopharmacology 36:2339-2348 -<LI> -Jansen R, Timmerman J, Loos M, Spijker S, van Ooyen A, Brussaard AB, Mansvelder HD, The Neuro-Bsik Mouse Phenomics Consortium; Smit AB, de Gunst M, Linkenhaer-Hansen K (<a href="http://www.ncbi.nlm.nih.gov/pubmed/22066001" target="_blank" class="fwn">2011</a>) Novel candidate genes associated with hippocampal oscillations. PLoS One 6:e26586. -<A HREF="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0026586" target="_blank" class="fwn"><I>HTML</I></A> and <A HREF="http://www.plosone.org/article/fetchObjectAttachment.action;jsessionid=A7B78346B150E8D613FCBE4DEFBD7155?uri=info%3Adoi%2F10.1371%2Fjournal.pone.0026586&representation=PDF" target="_blank" class="fwn"><I>PDF</I></A> versions -<LI> -Jiao Y, Jiao F, Yan J, Xiong Q, Shriner D, Hasty K, Stuart J, Gu W (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21414240" target="_blank" class="fwn">2011</a>) Identifying a major locus that regulates spontaneous arthritis in IL-1ra-deficient mice and analysis of potential candidates. Genet Res (Camb) 18:1-9 -<LI> -Krebs J, Römer D, Overall RW, Fabel K. Babu H, Brandt M, Williams RW, Jessberger S, Kempermann G (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21398278" target="_blank" class="fwn">2011</a>)) Adult hippocampal neurogenesis and plasticity in the infrapyramidal bundle of the mossy fiber projection: II. Genetic covariance and identification of Nos1 as a linking candidate gene. Frontiers in Neuroscience 5:106 -<A HREF="http://www.nature.com/tp/journal/v1/n7/pdf/tp201124a.pdf" target="_blank" class="fwn"><I>PDF</I> </A> version -<A HREF="/images/upload/Jansen_2011_PLoSONE.pdf" target="_blank" class="fwn"><I>PDF</I></A> -<LI> -Krebs J, Römer B, Overall RW, Fabel K, Babu H, Brandt MD, Williams RW, Jessberger S, Kempermann G (<A HREF="https://ncbi.nlm.nih.gov/pubmed/21960957" target="_blank" class="fwn">2011</A>) Adult hippocampal neurogenesis and plasticity in the infrapyramidal bundle of the mossy fiber projection: II. Genetic covariation and identification of <I>Nos1</I> as linking candidate gene. Frontiers in Neuroscience 5:106 -<A HREF="http://www.frontiersin.org/Journal/DownloadFile.ashx?pdf=1&FileId=%202584&articleId=%2011569&Version=%201&ContentTypeId=21&FileName=%20fnins-05-00106.pdf" target="_blank" class="fwn"><I>PDF</I> </A> version -<LI> -Laughlin RE, Grant TL, Williams RW, Jentsch JD (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21392734" target="_blank" class="fwn">2011</a>) Genetic dissection of behavioral flexibility: reversal learning in mice. Biological Psychiatry 69:1109-1116 -<LI> -Lu H, Wang X, Pullen M, Guan H, Chen H, Sahu S, Zhang B, Chen H, Williams RW, Geisert EE, Lu L, Jablonski MM (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21398278" target="_blank" class="fwn">2011</a>) Genetic dissection of the Gpnmb network in the eye. Invest Ophthalmol Vis Sci. 52:4132-4142 -<LI> -McLachlan SM, Aliesky HA, Chen CR, Williams RW, Rapoport B (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21738647" target="_blank" class="fwn">2011</a>) Exceptional Hyperthyroidism and a role for both major histocompatibility class I and class II genes in a murine model of Graves' disease. PLoS One 6:e21378 -<LI> -McLachlan SM, Lu L, Aliesky HA, Williams RW, Rapoport B (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21209025" target="_blank" class="fwn">2011</a>) Distinct genetic signatures for variability in total and free serum thyroxine levels in four sets of recombinant inbred mice. Endocrinology 152:1172-9 -<LI> -McCall RD (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21384758" target="_blank" class="fwn">2011</a>) HPNS seizure risk: a role for the Golgi-associated retrograde protein complex? Undersea Hyperb Med. 38:3-9 -<LI> -Moscou MJ, Lauter N, Steffenson B, Wise RP (<A HREF="https://ncbi.nlm.nih.gov/pubmed/21829384" target="_blank" class="fwn">2011</A>) Quantitative and qualitative stem rust resistance factors in barley are associated with transcriptional suppression of defense regulons. PLoS Genet 7:e1002208 -<BR><A HREF="http://www.plosgenetics.org/article/info%3Adoi%2F10.1371%2Fjournal.pgen.1002208" target="_blank" class="fwn">PDF version</A> -<LI> -Mozhui K, Wang X, Chen J, Mulligan MK, Li Z, Ingles J, Chen X, Lu L and Williams RW (2011) Genetic regulation of Nrxn1 expression: an integrative cross-species analysis of schizophrenia candidate genes. Transl Psychiatry 1: e25; doi:10.1038/tp.2011.24. -<A HREF="http://www.nature.com/tp/journal/v1/n7/pdf/tp201124a.pdf" target="_blank" class="fwn"><I>PDF</I> </A> version -<LI> -Porcu P, O'Buckley TK, Song SC, Harenza JL, Lu L, Wang X, Williams RW, Miles MF, Morrow AL (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21494628" class="fwn">2010</a>) Genetic analysis of the neurosteroid deoxycorticosterone and its relation to alcohol phenotypes: Identification of QTLs and downstream gene regulation. PLoS One 6:e18405 <A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0018405" target="_blank" class="fwn" ><I>Full Text HTML</I> </A> and <A href="/images/upload/Porcu_Morrow_2011.pdf" target="_blank" class="fwn" ><I>PDF </I> </A> versions -<LI> -Sutcliffe JG, Hedlund PB, Thomas EA, Bloom FE, Hilbush BS (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21374699" target="_blank" class="fwn">2011</a>) Peripheral reduction of β-amyloid is sufficient to reduce brain β-amyloid: implications for Alzheimer's disease. J Neurosci Res. 2011 Jun;89(6):808-14. doi: 10.1002/jnr.22603 -<A HREF="http://onlinelibrary.wiley.com/store/10.1002/jnr.22603/asset/22603_ftp.pdf?v=1&t=h88szz5k&s=096cf28488dc3b3b5e62b2f74c2f9b67e8b02747" target="_blank" class="fwn"><I>PDF</I> </A> version - -<LI> -Suwanwela J, Farber CR, Haung B, Song B, Pan C, Lyon KM, Lusis AJ (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20954177" target="_blank" class="fwn">2011</a>) Systems genetics analysis of mouse chondrocyte differentiation. Journal of Bone and Mineral Research 26:74-760 -<A HREF="/images/upload/Suwanwela_Lusis_2011.pdf" target="_blank" class="fwn"><I>PDF</I> </A> version -<LI>Tan T (<A HREF="http://www.genengnews.com/best-of-the-web/genenetwork/2581/" target="_blank" class="fwn">2011</A>) GeneNetwork: Best of the Web. Genetics Engineering & Biotechnology News 31(3) -<LI> -Whitney IE, Raven MA, Lu L, Williams RW, Reese BE (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21330668" target="_blank" class="fwn" >2011</a>) A QTL on chromosome 10 modulates cone photoreceptor number in the mouse retina. Invest Ophthalmol Vis Sci. 52:3228-36 -<LI> -Whitney IE, Raven MA, Ciobanu DC, Poché RA, Ding Q, Elshatory Y, Gan L, Williams RW, Reese BE (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21576457" target="_blank" class="fwn" >2011</a>) Genetic modulation of horizontal cell number in the mouse retina. Proc Natl Acad Sci USA 108:9697-702 -<LI> -Yadav JS, Pradhan S, Kapoor R, Bangar H, Burzynski BB, Prows DR, Levin L (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21628518" target="_blank" class="fwn" >2011</a>) Multigenic control and sex-bias in host susceptibility to spore-induced pulmonary anthrax in mice. Infect Immun in press. -<LI> -Yamamoto H, Williams EG, Mouchiroud L, Cantó C, Fan W, Downes M, Héligon C, Barish GD, Desvergne B, Evans RM, Schoonjans K, Auwerx J (2011) NCoR1 is a conserved physiological modulator of muscle mass and oxidative function. Cell 147:827-39 - - - -</OL> -</Blockquote> - - - -<BLOCKQUOTE style="font-size: 14px;"> - <A NAME="2010" class="subtitle"">GeneNetwork (2010) </A> -<BLOCKQUOTE> - -</Blockquote> -<OL> - -<LI> -Alberts R, Schughart K (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20950438" target="_blank" class="fwn" >2010</a>) QTLminer: identifying genes regulating quantitative traits. BMC Bioinformatics 11:516. <A href="http://www.biomedcentral.com/1471-2105/11/516" target="_blank" class="fwn" ><I>Full Text PDF version</I> </A> -<LI> -Ciobanu DC, Lu L, Mozhui K, Wang X, Morris JA, Taylor WL, Dietz K, Simon P, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19884314" target="_blank" class="fwn">2010</a>) Detection, validation, and downstream analysis of allelic variation in gene expression. Genetics 184: 119-128 <A href="http://www.genetics.org/cgi/reprint/184/1/119" target="_blank" class="fwn"><I>Full Text PDF</I></A> -<LI> -Downing C, Marks MJ, Larson C, Johnson TE (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20657349" target="_blank" class="fwn">2010</a>) The metabotropic glutamate receptor subtype 5 mediates sensitivity to the sedative properties of ethanol. Pharmacogenet Genomics 20:553-64 -<LI> -Gatti DM, Zhao N, Chesler EJ, Bradford BU, Shabalin AA, Yordanova R, Lu L, Rusyn I (2010) Sex-specific gene expression in the BXD mouse liver. Physiol Genomics 42:456-68 -<A href="/images/upload/Gatti_2010PhysiolGenomics.pdf" class="fwn" target="_blank"><I>Full Text PDF Version</I></A> -<LI> -Grisham W, Schottler NA, Valli-Marill J, Beck L, Beatty J (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20516355" target="_blank" class="fwn" >2010</a>) Teaching bioinformatics and neuroinformatics by using free web-based tools. CBE--Life Sciences Education 9: 98-107 <A href="/images/upload/Grisham_CBE_2010.pdf" target="_blank" class="fwn" ><I>Full Text PDF Version</I></A> -<LI> -Hoffman PL, Bennett B, Saba LM, Bhave SV, Carosone-Link PJ, Hornbaker CK, Kechris KJ, Williams RW, Tabakoff B <a href="http://www.ncbi.nlm.nih.gov/pubmed/21054686" target="_blank" class="fwn" >2010</a> Using the Phenogen website for 'in silico' analysis of morphine-induced analgesia: identifying candidate genes. Addiction Biology, doi: 10.1111/j.1369-1600.2010.00254.x -<LI> -Li D, Mulligan MK, Wang X, Miles MF, Lu L, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20808911" target="_blank" class="fwn">2010</a>) A transposon in <I>Comt</I> generates mRNA variants and causes widespread expression and behavioral differences among mice. PLoS One. 2010 Aug 17;5(8):e12181. <A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0012181" target="_blank" class="fwn"><I>Full Text HTML and PDF Versions</I></A> -<LI> -Lionikas A, Carlborg O, Lu L; Peirce JL, Williams RW, Yu F, Vogler GP, McClearn GE, Blizard DA <a href="http://www.ncbi.nlm.nih.gov/pubmed/20233743" target="_blank" class="fwn" >2010</a> Genomic analysis of variation in hindlimb musculature of mice from the C57BL/6J and DBA/2J lineage. Journal of Heredity 2010; doi: 10.1093/jhered/esq023. <A href="http://http://jhered.oxfordjournals.org/cgi/reprint/esq023?ijkey=BbuUGMafKrjFO5f&keytype=ref" class="fwn" target="_blank"><I>Full Text PDF Version</I></A> -<LI> -Loguercio S, Overall RW, Michaelson JJ, Wiltshire T, Pletcher MT, Miller BH, Walker JR, Kempermann G, Su AI, Beyer A <a href="http://www.ncbi.nlm.nih.gov/pubmed/21085707" target="_blank" class="fwn" >2010</a> Integrative analysis of low- and high-resolution eQTL. PLoS One 5(11):e13920 <A href="http://www.plosone.org/article/fetchObjectAttachment.action;jsessionid=C93DEB44991B6401001E7585AC4C4393.ambra02?uri=info%3Adoi%2F10.1371%2Fjournal.pone.0013920&representation=PDF" class="fwn" target="_blank"><I>Full Text PDF Version</I></A> -<LI> -Lynch RM, Naswa S, Rogers Jr GL, Kanla SA, Das S, Chesler EJ, Saxton AM, Langston MA, Voy, BH (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20179155" target="_blank" class="fwn" >2010</a>) Identifying genetic loci and spleen gene coexpression networks underlying immunophenotypes in the BXD recombinant inbred mice. Physiological Genomics 41:244-253 <A href="/images/upload/BXD_immunophenotypes_2010.pdf" target="_blank" class="fwn" ><I>Full Text PDF version</I> </A> -<LI>Lynch RM (<a href="http://trace.tennessee.edu/utk_graddiss/727" target="_blank" class="fwn" >2010</a>) A systems genetics approach to the characterization of differential low dose radiation responses in the BXD recombinant inbred mice. PhD diss., University of Tennessee <a href="http://trace.tennessee.edu/utk_graddiss/727" target="_blank" class="fwn" >http://trace.tennessee.edu/utk_graddiss/727</a> -<LI> -Malkki HA, Donga LA, de Groot SE, Battaglia FP; NeuroBSIK Mouse Phenomics Consortium, Pennartz CM (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21119771" target="_blank" class="fwn" >2010</a>) Appetitive operant conditioning in mice: heritability and dissociability of training stages. Front Behav Neuroscience 4:171 <A href="/images/upload/BXD_immunophenotypes_2010.pdf" target="_blank" class="fwn" ><I>Full Text PDF version</I> </A> -<LI> -Mulligan MK, Lu L, Overall RW, Kempermann G, Rogers GL, Langston MA, Williams RW (<a href="http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=5510847" target="_blank" class="fwn" >2010</a>) Genetic analysis of BDNF expression cliques and adult neurogenesis in the hippocampus. Biomedical Sciences and Engineering Conference (BSEC) DOI: 10.1109/BSEC.2010.5510848 <A href="/images/upload/BDNF_Clique_Apr13.pdf" target="_blank" class="fwn" ><I>Full Text PDF version</I> </A> -<LI> -Peidis P, Giannakouros T, Burow ME, Williams RW, Scott RE (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20184719" target="_blank" class="fwn" >2010</a>) Systems genetics analyses predict a transcription role for P2P-R: molecular confirmation that P2P-R is a transcriptional co-repressor. BMC Systems Biology 4:14 <A href="http://www.biomedcentral.com/content/pdf/1752-0509-4-14.pdf" target="_blank" class="fwn" ><I>Full Text PDF version</I> and </A> -<LI> -Philip VM, Duvvuru S, Gomero B, Ansah TA, Blaha CD, Cook MN, Hamre KM, Laviviere WR, Matthews DB, Mittleman G, Goldowitz D, Chesler EJ (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19958391" target="_blank" class="fwn">2010</a>) High-throughput behavioral phenotyping in the expanded panel of BXD recombinant inbred strains. Genes, Brain and Behavior 8:129-159 <A href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2855868/" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Reinius B, Shi C, Hengshuo L, Sandhu KS, Radomska KJ, Rosen GD, Lu L, Kullander K, Williams RW, Jazin E. (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21047393" target="_blank" class="fwn">2010</a>) Female-biased expression of long non-coding RNAs in domains that escape X-inactivation in mouse. BMC Genomics. 2010 Nov 3;11:614 <A href="http://www.biomedcentral.com/1471-2164/11/614" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Rulten SL, Ripley TL, Hunt CL, Stephens DN, Mayne LV (<a href="http://www.ncbi.nlm.nih.gov/pubmed/16594979" target="_blank" class="fwn">2010</a>) Sp1 and NFkappaB pathways are regulated in brain in response to acute and chronic ethanol. Genes, Brain and Behavior 5:257-73. <A href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2855868/" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Suwanwela J, Farber CR, Haung BL, Song B, Pan C, Lyons KM, Lusis AJ (<a href=""/images/upload/Suwanwela-1.JBMR.10.pdf" target="_blank" class="fwn" >2010</a>) Systems genetics analysis of mouse chondrocyte differentiation. JBMR, in press <A href="/images/upload/Suwanwela-1.JBMR.10.pdf" target="_blank" class="fwn" ><I>Full Text PDF version</I> </A> -<LI> -Wang X, Chen Y, Wang X, Lu L. (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20054728" target="_blank" class="fwn" >2010</a>) Genetic regulatory network analysis for <I>App</I> based on genetical genomics approach. Exp Aging Res 36:79-93 - - - - - - - - - - - - - - - - - -</OL> -</Blockquote> - -<BLOCKQUOTE style="font-size: 14px;"> - <A NAME="2009" class="subtitle"">GeneNetwork (2009) </A> -<BLOCKQUOTE> - -</Blockquote> -<OL> - -<LI> -Badea A, Johnson GA, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19349225" target="_blank" class="fwn">2009</a>) Genetic dissection of the mouse brain using high-field magnetic resonance microscopy. Neuroimaging 45:1067-79 -<LI> -Boon AC, deBeauchamp J, Hollmann A, Luke J, Kotb M, Rowe S, Finkelstein D, Neale G, Lu L, Williams RW, Webby RJ (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19706712" target="_blank" class="fwn">2009</a>) Host genetic variation affects resistance to infection with a highly pathogenic H5N1 influenza A virus in mice. J Virol 83:10417-26 PMID: 19706712 <A HREF="http://www.genenetwork.org/images/upload/Boon_H5N1_2009.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Brigman JL, Mathur P, Lu L, Williams RW, Holmes A (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18830130" target="_blank" class="fwn">2009</a>) Genetic relationship between anxiety- and fear-related behaviors in BXD recombinant inbred mice. Behavioral Pharmacology 20:204-209 -<A href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pubmed&pubmedid=18830130" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>, -<LI> -Carneiro AM, Airey DC, Thompson B, Zhu CB, Lu L, Chesler EJ, Erikson KM, Blakely RD (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19179283" target="_blank" class="fwn">2009</a>) Functional coding variation in recombinant inbred mouse lines reveals multiple serotonin transporter-associated phenotypes. Proc Natl Acad Sci USA 106:2047-2052 -<A href="http://www.pnas.org/content/early/2009/01/28/0809449106" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>, -<A href="http://www.pnas.org/content/early/2009/01/28/0809449106.full.pdf+html" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Cowley MJ, Cotsapas CJ, Williams RB, Chan EK, Pulvers JN, Liu MY, Luo OJ, Nott DJ, Little PF (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19424753" target="_blank" class="fwn">2009</a>) Intra- and inter-individual genetic differences in gene expression. Mamm Genome 20:281-295 -<A href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2690833/?tool=pubmed" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Davies MN, Lawn S, Whatley S, Fernandes C, Williams RW, Schalkwyk LC (<a href="http://frontiersin.org/neurogenomics/paper/10.3389/neuro.15/002.2009/" target="_blank" class="fwn">2009</a>) To what extent is blood a reasonable surrogate for brain gene expression studies: estimation from mouse hippocampus and spleen. Front. Neurogen. 1:2. doi:10.3389/neuro.15.002.2009 -<LI> -Foreman JE, Lionikas A, Lang DH, Gyekis JP, Krishnan M, Sharkey NA, Gerhard GS, Grant MD, Vogler GP, Mack HA, Stout JT, Griffith JW, Lakoski JM, Hofer SM, McClearn GE, Vandenbergh DJ, Blizard DA (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19671078" target="_blank" class="fwn">2009</a>) Genetic architecture for hole-board behaviors across substantial time intervals in young, middle-aged and old mice. Genes Brain Behav 8:714-27 -<LI> -Gaglani SM, Lu L, Williams RW, Rosen GD (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19426526" target="_blank" class="fwn">2009</a>) The genetic control of neocortex volume and covariation with patterns of gene expression in mice. BMC Neuroscience 10:44 -<A href="http://www.biomedcentral.com/1471-2202/10/44" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>, -<A href="http://www.biomedcentral.com/content/pdf/1471-2202-10-44.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Gatti DM, Harrill AH, Wright FA, Threadgill DW, Rusyn I. (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19609828" target="_blank" class="fwn">2009</a>) Replication and narrowing of gene expression quantitative trait loci using inbred mice. Mamm Genome 20:437-46. -<LI> -Geisert EE, Lu L, Freeman-Anderson ME, Wang X, Gu W, Jiao Y, Williams RW (<A HREF="http://www.molvis.org/molvis/v15/a185" target="_blank" class="fwn">2009</A>) Gene expression landscape of the mammalian eye: A global survey and database of mRNAs of 103 strains of mice. <I>Molecular Vision</I> 15:1730-1763 PMID:19727342 <A href="http://www.molvis.org/molvis/v15/a185" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>, -<A HREF="http://www.molvis.org/molvis/v15/a185/mv-v15-a185-geisert.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Grisham W (<a href="http://www.funjournal.org/downloads/200981/grisham81.pdf" target="_blank" class="fwn">2009</a>) Modular digitial course in undergraduate neuroscience education (MDCUNE): A website offering free digital tools for neuroscience educators. Journal of Undergraduate Neuroscience Education 8:A26-A31 <A href="http://www.funjournal.org/downloads/200981/grisham81.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<BR><SMALL> -An excellent example of how resources such as GeneNetwork and the Mouse Brain Library can be used in class room labs. -</SMALL> -<LI> -Jellen LC, Beard JL, Jones BC (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19393285" target="_blank" class="fwn">2009</a>) Systems genetics analysis of iron regulation. Biochemie in press. -19393285 -<LI> -Koutnikova H, Markku L, Lu L, Combe R, Paananen J, Kuulasmaa T, Kuusisto J, Häring H, Hansen T, Pedersen,O, Smith U, Hanefel M, Williams RW, Auwerx J (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19662162" target="_blank" class="fwn">2009</a>) Identification of UBP1 as a critical blood pressure determinant. PLoS Genetics 5:e1000591 -<A href="http://www.plosgenetics.org/article/info%3Adoi%2F10.1371%2Fjournal.pgen.1000591" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>, -<A HREF="http://www.plosgenetics.org/article/fetchObjectAttachment.action?uri=info%3Adoi%2F10.1371%2Fjournal.pgen.1000591&representation=PDF" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Michaelson JJ, Loguercio S, Beyer A (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19303049" target="_blank" class="fwn">2009</a>) Detection and interpretation of expression quantitative trait loci (eQTL). Methods 48:265-276 -<A href="http://www.sciencedirect.com/science?_ob=ArticleURL&_udi=B6WN5-4VVXSVN-2&_user=10&_rdoc=1&_fmt=&_orig=search&_sort=d&_docanchor=&view=c&_searchStrId=1065487428&_rerunOrigin=google&_acct=C000050221&_version=1&_urlVersion=0&_userid=10&md5=df0a2763fb94c714825793af492de045" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Overall RW, Kempermann G, Peirce J, Lu L, Goldowitz D, Gage FH, Goodwin S, Smit AB, Airey DC, Rosen GD, Schalkwyk LC, Sutter TR, Nowakowski RS, Whatley S, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20582282" target="_blank" class="fwn">2009</a>) Genetics of the hippocampal transcriptome in mice: a systematic survey and online neurogenomic resource. Frontiers in Neuroscience 3:55 -<A href="http://www.frontiersin.org/neurogenomics/10.3389/neuro.15.003.2009/full" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>, -<A HREF="javascript:__doPostBack('ctl00$ContentAreaRightMenu$ArchiveRightMenu$lnkPDF','')" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Overton JD, Adams GS, McCall RD, Kinsey ST (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19100334" target="_blank" class="fwn">2009</a>)High energy phosphate concentrations and AMPK phosphorylation in skeletal muscle from mice with inherited differences in hypoxic exercise tolerance. Comp Biochem Physiol A Mol Integr Physiol 152:478-85 -<LI> -Philip VM, Duvvuru S, Gomero B, Ansah TA, Blaha CD, Cook MN, Hamre KM, Laviviere WR, Matthews DB, Mittleman G, Goldowitz D, Chesler EJ (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19958391" target="_blank" class="fwn">2009</a>) High-throughput behavioral phenotyping in the expanded panel of BXD recombinant inbred strains. Genes, Brain and Behavior 8:in press PMID: 19958391 <A href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2855868/" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Ruden DM, Chen L, Possidente D, Possidente B, Rasouli P, Wang L, Lu X, Garfinkel MD, Hirsch HV, Page GP (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19737576" target="_blank" class="fwn">2009</a>) Genetical toxicogenomics in Drosophila identifies master-modulatory loci that are regulated by developmental exposure to lead. Neurotoxicology 30:898-914 -<LI> -Rosen GL, Pung C, Owens C, Caplow J, Kim H, Lu L, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19191878" target="_blank" class="fwn">2009</a>) Genetic modulation of striatal volume in BXD recombinant inbred mice. Genes, Brain & Behavior 8:296-308 -<LI> -Saccone SF, Bierut LJ, Chesler EJ, Kalivas PW, Lerman C, Saccone NL, Uhl GR, Li CY, Philip VM, Edenberg HJ, Sherry ST, Feolo M, Moyzis RK, Rutter JL (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19381300" target="_blank" class="fwn">2009</a>) Supplementing high-density SNP microarrays for additional coverage of disease-related genes: addiction as a paradigm. PLoS ONE 4:e5225. <A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0005225" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>, -<A HREF=http://www.plosone.org/article/fetchObjectAttachment.action?uri=info%3Adoi%2F10.1371%2Fjournal.pone.0005225&representation=PDF" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>. [Supplementary table 1 provides links to many transcripts and genes, some of which were mined from an analysis of GeneNetwork data sets.] -<LI> -Silva GL, Junta CM, Sakamoto-Hojo ET, Donadi EA, Louzada-Junior P, Passos GA (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19758195" target="_blank" class="fwn">2009</a>) Genetic susceptibility loci in rheumatoid arthritis establish transcriptional regulatory networks with other genes. Ann N Y Acad Sci 1173:521-37 -<LI> -Tapocik JD, Letwin N, Mayo CL, Frank B, Luu T, Achinike O, House C, Williams R, Elmer GI, Lee NH (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19386926" target="_blank" class="fwn">2009</a>) Identification of candidate genes and gene networks specifically associated with analgesic tolerance to morphine. J Neurosci 2:5295-307 <A href="http://www.jneurosci.org/cgi/content/full/29/16/5295" target="_blank" class="fwn"><I>Full Text HTML</I></A> -<LI> -Thomas C, Gioiello A, Noriega L, Strehle A, Oury J, Rizzo G, Macchiarulo A, Yamamoto H, Mataki C, Pruzanski M, Pellicciari R, Auwerx J, Schoonjans K (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19723493" target="_blank" class="fwn">2009</a>) TGR5-mediated bile acid sensing controls glucose homeostasis. Cell Metab 10:167-77 -<A href="http://www.genenetwork.org/images/upload/Thomas_Auwerx_2009.pdf" target="_blank" class="fwn"><I>Full Text PDF</I></A> -<LI> -Webb BT, McClay JL, Vargas-Irwin C, York TP, van den Oord EJCG (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19723493" target="_blank" class="fwn">2009</a>) In silico whole genome association scan for murine prepulse inhibition. PLoS ONE 4: e5246. doi:10.1371/journal.pone.0005246 -<A href="http://www.plosone.org/article/info:doi%2F10.1371%2Fjournal.pone.0005246" target="_blank" class="fwn"><I>Full Text HTML</I></A>, -<A href="http://www.plosone.org/article/fetchObjectAttachment.action;jsessionid=18CBF1DF825C97C45A98D0256635C650?uri=info%3Adoi%2F10.1371%2Fjournal.pone.0005246&representation=PDF" target="_blank" class="fwn"><I>Full Text HTML</I></A> -<LI> -Weng J, Symons MN, Singh SM (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19107586" target="_blank" class="fwn">2009</a>) Studies on syntaxin 12 and alcohol preference involving C57BL/6J and DBA/2J strains of mice. Behav Genet. 39:183-191 -<A href="http://www.iovs.org/cgi/content/abstract/50/5/1996" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Whitney IE, Raven MA, Ciobanu DC, Williams RW, Reese BE (<a href="http://www.iovs.org/cgi/content/abstract/50/5/1996" target="_blank" class="fwn">2009</a>) Multiple genes on chromosome 7 regulate dopaminergic amacrine cell number in the mouse. Investigative Ophthalmology & Visual Science 50:1996-2003. -<A href="http://www.iovs.org/cgi/content/abstract/50/5/1996" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>. -<LI> -Wu S, Lusis AJ, Drake TA (<a href="http://www.jlr.org/cgi/reprint/R800067-JLR200v1.pdf" target="_blank" class="fwn">2009</a>) A systems-based framework for understanding complex metabolic and cardiovascular disorders. Journal of Lipid Research, in press <A href="http://www.jlr.org/cgi/reprint/R800067-JLR200v1.pdf" target="_blank" class="fwn"><I>Full Text PDF</I></A> -<LI> -Zheng QY, Ding D, Yu H, Salvi RJ, Johnson KR (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18280008" target="_blank" class="fwn">2009</a>) A locus on distal chromosome 10 (<I>ahl4</I>) affecting age-related hearing loss in A/J mice. Neurobiol Aging. 2009 Oct;30(10):1693-705. - -</OL> -</Blockquote> - - -<BLOCKQUOTE style="font-size: 14px;"> - <A NAME="2008" class="subtitle"">GeneNetwork (2008) </A> -<BLOCKQUOTE> - -</Blockquote> -<OL> -<LI> -Abdeltawab NF, Aziz RK, Kansal R, Rowe SL, Su Y, Gardner L, Brannen C, Nooh MM, Attia RR, Abdelsamed HA, Taylor WL, Williams RW, Kotb M (2008) An unbiased systems genetics approach to mapping genetic loci modulating susceptibility to severe streptococcal sepsis. PLoS Pathogens 4:e1000042 -<A href="http://www.plospathogens.org/article/info%3Adoi%2F10.1371%2Fjournal.ppat.1000042" target="_blank" class="fwn"><I>Full Text HTML Version</I>, -<A href="http://www.plospathogens.org/article/fetchObjectAttachment.action?uri=info%3Adoi%2F10.1371%2Fjournal.ppat.1000042&representation=PDF" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> - -<LI> -Bertrand L, Fan Y, Nissanov J, Rioux L (2008) Genetic regulation of the anatomy of the olfactory bulb. Society for Neuroscience <A HREF="http://www.sfn.org/skins/main/pdf/abstracts/am2008/poster_presentations/tuesday_pm.pdf" target="_blank" class="fwn">2008</A> - -<!-- -Abstract: Development of the nervous system results from an interaction between environmental and genetic factors. Neurodevelopmental diseases with a strong genetic etiology like schizophrenia and autism are associated with functional and structural abnormalities in various areas of the brain, including the olfactory system. Because these diseases are characterized by numerous subjective symptoms, research has begun to identify objectively measurable symptomatology; these quantitative traits are called endophenotypes. One such trait associated with schizophrenia is abnormality of the olfactory bulb (OB). We sought to model the structural aspect of OB abnormalities by examining strain variability of OB volumes in mice. Through the analysis of parental strains, C57BL/6J (B6) and DBA/2J (D2), as well as 35 BXD recombinant inbred strains, mapping of a quantitative trait locus (QTL) associated with OB variability could be the first step in the identification of potential genes correlated with this -olfactory endophenotype. Our study was conducted entirely in silico through the use of the Mouse Brain Library (www.mbl.org), imaging analysis softwares (NIH Object Image, Skill Image and Matlab), and a web-based QTL analysis tool (www.webqtl.org). 4 um/pixel images of sectioned mouse brains (300 um apart) were downloaded from the MBL website. The sample included 11 B6, 8 D2, and 157 BXDs mice. The OB consists of concentric layers: olfactory nerve, glomerular, plexiform, mitral cell and granule cell layers. The main OB and its layers were delineated and their volume was estimated using Cavalieri formula. Results show that B6 main OB volume is larger than that of D2. While the olfactory neuron and glomerular layers are larger in B6, the external plexiform and granular layers are larger in D2. This suggests that the development of the various OB layers is modulated by different genes. Residual volumes were calculated by removal of variance attributed to age and sex. Using the web-based QTL analysis tool, main OB volume was mapped to a significant linkage peak on chromosome 16. This QTL contains genes controlling the development of the main OB and potential candidate genes for schizophrenia. Determination of QTLs for individual layers is in progress. ---> - - -<LI> -Bhoumik A, Singha N, O'Connell MJ, Ronai ZA (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18397884" target="_blank" class="fwn">2008</a>) Regulation of TIP60 by ATF2 modulates ATM activation. J Biol Chem 283:17605-14 -<A href="http://www.jbc.org/content/283/25/17605.long" target="_blank" class="fwn"><I>Full Text HTML Version</I>, <http://www.jbc.org/content/early/2008/04/08/jbc.M802030200.full.pdf -" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> - - - -<LI> -Bjork K, Rimondini R, Hansson AC, Terasmaa A, Hyytiä P, Heilig M, Sommer WH (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18367649" target="_blank" class="fwn">2008</a>) Modulation of voluntary ethanol consumption by beta-arrestin 2. FASEB J 22:2552-60 -<A href="http://www.fasebj.org/cgi/content/full/22/7/2552" target="_blank" class="fwn"><I>Full Text HTML Version</I>, -<A href="http://www.fasebj.org/cgi/reprint/22/7/2552.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Boone EM, Hawks BW, Li W, Garlow SJ (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18199428" target="_blank" class="fwn">2008</a>) Genetic regulation of hypothalamic cocaine and amphetamine-regulated transcript (CART) in BxD inbred mice. Brain Res 1194:1-7 -<LI> -Crawford NP, Alsarraj J, Lukes L, Walker RC, Officewala JS, Yang HH, Lee MP, Ozato K, Hunter KW (2008) Bromodomain 4 activation predicts breast cancer survival. Proc Natl Acad Sci USA 105:6380-6385 -<A href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pubmed&pubmedid=18427120" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Crawford NP, Walker RC, Lukes L, Officewala JS, Williams RW, Hunter KW (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18301994 -" target="_blank" class="fwn">2008</a>) The Diasporin Pathway: a tumor progression-related transcriptional network that predicts breast cancer survival. Clin Exp Metastasis 25:357-69 -<A href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pubmed&pubmedid=18301994" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Danciger M, Ogando D, Yang H, Matthes MT, Yu N, Ahern K, Yasumura D, Williams RW, Lavail MM (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18344445 -" target="_blank" class="fwn">2008</a>) Genetic modifiers of retinal degeneration in the <I>rd3</I> mouse. Invest Ophthalmol Vis Sci 49:2863-2869 -<A href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pubmed&pubmedid=18344445" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Druka A, Druka I, Centeno AG, Li H, Sun Z, Thomas WT, Bonar N, Steffenson BJ, Ullrich SE, Kleinhofs A, Wise RP, Close TJ, Potokina E, Luo Z, Wagner C, Schweizer GF, Marshall DF, Kearsey MJ, Williams RW, Waugh R (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19017390 -" target="_blank" class="fwn">2008</a>) Towards systems genetic analyses in barley: Integration of phenotypic, expression and genotype data into GeneNetwork. BMC Genet 9:73 -<A href="http://www.biomedcentral.com/1471-2156/9/73" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Dykstra B, de Haan G (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18008087 -" target="_blank" class="fwn">2008</a>) Hematopoietic stem cell aging and self-renewal. Cell Tissue Res 331:91-101 -<LI> -Ferrara CT, Wang P, Neta EC, Stevenes RD, Bain JR, Wenner BR, Ilkayeva OR, Keller MP, Blasiole DA, Kendziorski C, Yandell BS, Newgard CB, Attie AD (2008) Genetic networks of liver metabolism revealed by integration of metabolic and transcriptional profiling. PLoS Genetics 4: e1000034. doi:10.1371/journal.pgen.1000034 -<A href="http://www.plosgenetics.org/article/info%3Adoi%2F10.1371%2Fjournal.pgen.1000034" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Gerrits A, Dykstra B, Otten M, Bystrykh L, de Haan G (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18560825 -" target="_blank" class="fwn">2008</a>) Combining transcriptional profiling and genetic linkage analysis to uncover gene networks operating in hematopoietic stem cells and their progeny. Immunogenetics. 60:411-22. -<LI> -Grieve IC, Dickens NJ, Pravenec M, Kren V, Hubner N, Cook SA, Aitman TJ, Petretto E, Mangion J (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19112506" target="_blank" class="fwn">2008</a>) Genome-wide co-expression analysis in multiple tissues. PLoS One. 3:e4033. PMID: 19706712 <A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0004033" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>, -<A HREF="http://www.plosone.org/article/fetchObjectAttachment.action?uri=info%3Adoi%2F10.1371%2Fjournal.pone.0004033&representation=PDF" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Hall R, Hillebrandt S, Hochrath K, Gruenhage F, Weber S, Schwartz S, Yildiz Y , Sauerbruch T, Lammert F (2008) BXD recombinant inbred mouse lines–a genetic reference population for dissection of the complex genetics of liver fibrosis. Zeitschrift fur Gastroenterologie 46:in press -<A href="http://www.thieme-connect.com/ejournals/abstract/zfg/doi/10.1055/s-2008-1037508" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Han B, Altman NS, Mong JA, Klein LC, Pfaff DW, Vandenbergh DJ (2008) Comparing quantitative trait loci and gene expression data. Advances in Bioinformatics, doi:10.1155/2008/719818. -<A href="http://hindawi.com/RecentlyAcceptedArticlePDF.aspx?journal=ABI&number=719818" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> and <A href="http://www.hindawi.com/journals/abi/2008/719818.html" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Hayat Y, Yang J, Xu HM, Zhu J (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19067460 -" target="_blank" class="fwn">2008</a>) Influence of outliers on QTL mapping for complex traits. J Zhejiang Univ Sci B. 9:931-7 -<LI> -Heimel JA, Hermans JM, Sommeijer JP; Neuro-Bsik Mouse Phenomics consortium, Levelt CN (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18700840 -" target="_blank" class="fwn">2008</a>) Genetic control of experience-dependent plasticity in the visual cortex. Genes Brain Behav 7:915-23. -<A href="http://www.genenetwork.org/images/upload/Heimel_2008_BXDVisualCortex.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Jan TA, Lu L, Li CX, Williams RW, Waters RS (<a href="http://www.biomedcentral.com/1471-2202/9/3" target="_blank" class="fwn">2008</a>) Genetic analysis of posterior medial barrel subfield (PMBSF) size in somatosensory cortex (SI) in recombinant inbred strains of mice. BMC Neuroscience 9:3 -<A href="http://www.biomedcentral.com/content/pdf/1471-2202-9-3.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Johnson KR, Longo-Guessa C, Gagnona LH, Yub H, Zhengb QY (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18662770" target="_blank" class="fwn">2008</a>) A locus on distal chromosome 11 (<I>ahl8</I>) and its interaction with <I>Cdh23 ahl</I> underlie the early onset, age-related hearing loss of DBA/2J mice. Genomics 92:219-225 -<LI> -Jones LC, Beard JL, Jones BC (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18189309 -" target="_blank" class="fwn">2008</a>) Genetic analysis reveals polygenic influences on iron, copper, and zinc in mouse hippocampus with neurobiological implications. Hippocampus 18:398-410 -<A href="images/upload/Jones_2008_Hippocampus.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Jones LC, Earley CJ, Allen RP, Jones BC (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18189309 -" target="_blank" class="fwn">2008</a>) Of mice and men, periodic limb movements and iron: how the human genome informs the mouse genome. Genes, Brain and Behavior 7:513-514. -<A href="/images/upload/Jones_OfMiceandMen.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Kang HM, Ye C, Eskin E (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18791227 -" target="_blank" class="fwn">2008</a>) Accurate discovery of expression quantitative trait loci under confounding from spurious and genuine regulatory hotspots. Genetics doi:10.1534/genetics.108.094201 -<A href="http://www.genetics.org/cgi/content/abstract/genetics.108.094201v1" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>. [An important method that can greatly improve the ability to resolve true genetic interactions in expression genetic studies.] -<LI> -Kadarmideen HN (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19045837 -" target="_blank" class="fwn">2008</a>) Genetical systems biology in livestock: Application to gonadotrophin releasing hormone and reproduction. IET Systems Biology 2:423-441 -<A href="/images/upload/Kadarmideen_2008.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Kerns RT, Miles MF (2008) Microarray analysis of ethanol-induced changes in gene expression. Alcohol: Methods and Protocols. In: Methods in Molecular Biology 447:395-410 -<A href="http://www.springerprotocols.com/Abstract/doi/10.1007/978-1-59745-242-7_26" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Kotb M, Fathey N, Aziz R, Rowe S, Williams RW, Lu L (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18972751" target="_blank" class="fwn">2008</a>) Unbiased forward genetics and systems biology approaches to understanding how gene-environment interactions work to predict susceptibility and outcomes of infections. Novartis Found Symp 293:156-165; discussion pp 165-167, 181-183 -<LI> -Loos M (2008) The PhenoTyper automated home cage environment as a high throughput tool to detect behavioral abnormalities in mutant mice. Proceeding of Measuring Behavior (Maastricht, The Netherlands, Aug 26-29, 2008). -<A href="http://www.neurobsik.nl/Loos_2008.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Loudet O, Michael TP, Burger BT, Le Metté C, Mockler TC, Weigel D, Chory J (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18971337 -" target="_blank" class="fwn">2008</a>) A zinc knuckle protein that negatively controls morning-specific growth in Arabidopsis thaliana. Proc Natl Acad Sci USA 105:17193-8 -<A href="http://www.pnas.org/content/105/44/17193.long" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>, and <A href="http://www.pnas.org/content/suppl/2008/10/29/0807264105.DCSupplemental/0807264105SI.pdf" target="_blank" class="fwn"><I>Full Text Supplement</I></A> -<LI> -Lu L, Wei L, Peirce JL, Wang X, Zhou J, Homayouni R, Williams RW, Airey DC (2008) Using gene expression databases for classical trait QTL candidate gene discovery in the BXD recombinant inbred genetic reference population: mouse forebrain weight. BMC Genomics 9:444 -<A href="http://www.biomedcentral.com/1471-2164/9/444" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>, and <A href="http://www.biomedcentral.com/content/pdf/1471-2164-9-444.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Macedo C, Magalhaes DA, Tonani M, Marques MC, Junta CM, Passos GA (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18597059" target="_blank" class="fwn">2008</a>) Genes that code for T cell signaling proteins establish transcriptional regulatory networks during thymus ontogeny. -Mol Cell Biochem 318:63-71 -<LI> -Morahan G, Peeva V, Munish M, Williams R (2008) Systems genetics can provide new insights in to immune regulation and autoimmunity. Journal of Autoimmunity 31:233-236. -<A href="http://www.genenetwork.org/images/upload/Morahan_2008.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Mozhui RT, Ciobanu DC, Schikorski T, Wang XS, Lu L, Williams RW (2008) Dissection of a QTL hotspot on mouse distal chromosome 1 that modulates neurobehavioral phenotypes and gene expression. PLoS Genetics 4: e1000260. doi:10.1371/journal.pgen.1000260 -<A href="http://www.plosgenetics.org/article/info:doi%2F10.1371%2Fjournal.pgen.1000260" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -New J, Kendall W, Huang J, Chesler E (<a href="http://www.computer.org/portal/web/csdl/doi/10.1109/TVCG.2008.61" target="_blank" class="fwn">2008</a>) Dynamic visualization of coexpression in systems genetics data. IEEE Trans Visualization & Computer Graphics 14:1081-1095. -<LI> -Pravenec M, Petretto E (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18541997" target="_blank" class="fwn">2008</a>) Insight into the genetics of hypertension, a core component of the metabolic syndrome. -Genes and cell metabolism. Curr Opin Clin Nutr Metab Care 11:393-397 -<A href="http://www.plosgenetics.org/article/info:doi%2F10.1371%2Fjournal.pgen.1000260" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Pritchard M, Reeves RH, Dierssen M, Patterson D, Gardiner KJ (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18544929" target="_blank" class="fwn">2008</a>) Down syndrome and the genes of human chromosome 21: current knowledge and future potentials. Cytogenetics and Genome Research 121:67-77 -<LI> -Reiner DJ, Jan TA, Boughter JD Jr, Li CX, Lu L, Williams RW, Waters RS (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18653645" target="_blank" class="fwn">2008</a>) Genetic analysis of tongue size and taste papillae number and size in recombinant inbred strains of mice. Chemical Senses 33:693-707 -<LI> -Swertz MA, Tesson BM, Scheltema RA, Vera G, Jansen RC (2008) MOLGENIS for genetical genomics. Chapter 5. MGG: a customizable software infrastructure for genetical genomics. -<A href="http://dissertations.ub.rug.nl/FILES/faculties/science/2008/m.a.swertz/05_c5.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Williams RW, Lu L (<a href="http://pubs.niaaa.nih.gov/publications/arh313/275-277.pdf" target="_blank" class="fwn">2008</a>) Integrative genetic analysis of alcohol dependence using the GeneNetwork web resources. In Pathways to Alcohol Dependence: Alcohol Research & Health 31:275-277 -<A href="http://pubs.niaaa.nih.gov/publications/arh313/275-277.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Woo JH, Zheng T, Kim JH (<a href="http://inderscience.metapress.com/app/home/contribution.asp?referrer=parent&backto=issue,7,8;journal,3,6;linkingpublicationresults,1:121101,1" target="_blank" class="fwn">2008</a>) DACE: Differential Allelic Co-Expression test for estimating regulatory associations of SNP and biological pathway. International Journal of Functional Informatics and Personalised Medicine 1:407-418 -<LI> -Yang RJ, Mozhui K, Karlsson RM, Cameron HA, Williams RW, Holmes A (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18185497" target="_blank" class="fwn">2008</a>) Variation in mouse basolateral amygdala volume is associated with differences in stress reactivity and fear learning. Neuropsychopharmacology. 33:2595-604 -<A href="http://www.nature.com/npp/journal/v33/n11/full/1301665a.html" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>, -<A href="<A href="http://www.nature.com/npp/journal/v33/n11/pdf/1301665a.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Zhang Y, Maksakova IA, Gagnier L , van de Lagemaat LN, Mager DL (2008) Genome-wide assessments reveal extremely high levels of polymorphism of two active families of mouse endogenous retroviral elements. PLoS Genet 4(2): e1000007. doi:10.1371/journal.pgen.1000007 -<A href="http://www.plosgenetics.org/article/info%3Adoi%2F10.1371%2Fjournal.pgen.1000007" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> - -</OL> -</Blockquote> - - - - - -<BLOCKQUOTE style="font-size: 14px;"> - <A NAME="2007" class="subtitle"">GeneNetwork (2007) </A> -<BLOCKQUOTE> - -</Blockquote> - -<OL> -<LI> -Aziz RK, Kansal R, Abdeltawab NF, Rowe SL, Su Y, Carrigan D, Nooh MM, Attia RR, Brannen C, Gardner LA, Lu L, Williams RW, Kotb M (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17525705" target="_blank" class="fwn">2007</a>) Susceptibility to severe Streptococcal sepsis: use of a large set of isogenic mouse lines to study genetic and environmental factors. Genes and Immunity 8:404-415 -<LI> -Bao L, Peirce JL, Zhou M, Li H, Goldowitz D, Williams RW, Lu L, Cui Y (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17428815" target="_blank" class="fwn">2007</a>) An integrative genomics strategy for systematic characterization of genetic loci modulating phenotypes. Hum Mol Genet 16:1381-1390 -<LI> -Bao L, Zhou M, Wu L, Lu L, Goldowitz D, Williams RW, Cui Y (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17099235" target="_blank" class="fwn">2007</a>) PolymiRTS Database: linking polymorphisms in microRNA target sites with complex traits. Nucleic Acids Res. 35(Database issue):D51-54 -<A href="http://nar.oxfordjournals.org/cgi/reprint/35/suppl_1/D51" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, -<A href="http://nar.oxfordjournals.org/cgi/content/full/35/suppl_1/D51" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Benhamou JP, Rizzetto M, Reichen J, Rodés J (<a href="http://books.google.com/books?id=taE276KCyecC&dq=genenetwork+webqtl" target="_blank" class="fwn">2007</a>) Textbook of hepatology: from basic science to clinical practice. Blackwell Publishing, p. <a href="http://books.google.com/books?id=taE276KCyecC&pg=PA379&lpg=PA379&dq=genenetwork+webqtl&source=web&ots=2CjGbbDh3B&sig=tXdbQ7KAGOyxOee9TECF40GXyywl" target="_blank" class="fwn">379</a>), ISBN 1405127414 -<LI> -Bennett B, Downing C, Carosone-Link P, Ponicsan H, Ruf C, Johnson TE (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17250610" target="_blank" class="fwn">2007</a>) Quantitative trait locus mapping for acute functional tolerance to ethanol in the L x S recombinant inbred panel. Alcohol Clin Exp Res. 31:200-208. [Phenotype data described in this paper are accessible in GeneNetwork in the LXS Phenotype database; ID numbers 10126, 10127, 10132, 10134, 10138, and 10139 (select Species=MOUSE, Group=LXS, Type=PHENOTYPES and search the ALL field with the term "functional" or just enter the ID numbers above.] -<LI> -Cervino ACL, Darvasi A, Fallah Mi, Mader CC, Tsinoremas NF (<a href="http://www.genetics.org/cgi/content/full/175/1/321" target="_blank" class="fwn">2007</a>) An integrated in silico gene mapping strategy in inbred mice. Genetics 175:321-333 -<A href="http://www.genetics.org/cgi/reprint/175/1/321" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Chesler EJ (<a href="http://www3.interscience.wiley.com/cgi-bin/summary/114171173/SUMMARY" target="_blank" class="fwn">2007</a>) Bioinformatics of behavior. In Neurobehavioral Genetics, ed Jones BC, Mormede P -CRC Press ISBN 084931903X InterScience -<a href="http://books.google.com/books?id=ZNYE-FcvYloC&pg=PA102&lpg=PA102&dq=genenetwork+webqtl&source=web&ots=q3RfjmnLjt&sig=sDjpfmvzdx2lKigtJKqbb-H8Di8&hl=en&sa=X&oi=book_result&resnum=3&ct=result#PPA95,M1" target="_blank" class="fwn">95-114</a>), ISBN 1405127414 -<LI> -Chesler EJ (<a href="http://www3.interscience.wiley.com/cgi-bin/summary/114171173/SUMMARY" target="_blank" class="fwn">2007</a>) Combining quantitative trait and gene-expression data. In Bioinformatics of Geneticists, ed Barnes MR, Wiley InterScience -<LI> -Coppin H, Darnaud V, Kautz L, Meynard D, Aubry M, Mosser J, Martinez M, Roth MP (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17945001" target="_blank" class="fwn">2007</a>) Gene expression profiling of Hfe-/- liver and duodenum in mouse strains with differing susceptibilities to iron loading: identification of transcriptional regulatory targets of Hfe and potential hemochromatosis modifiers. Genome Biology 8:R221 -<A href="http://www.plosgenetics.org/article/fetchObjectAttachment.action?uri=info%3Adoi%2F10.1371%2Fjournal.pgen.0030214&representation=PDF" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, -<A href="http://genomebiology.com/2007/8/10/R221" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Crawford NP, Qian X, Ziogas A, Papageorge AG, Boersma BJ, Walker RC, Lukes L, Rowe WL, Zhang J, Ambs S, Lowy DR, Anton-Culver H, Hunter KW (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18081427" target="_blank" class="fwn">2007</a>) Rrp1b, a new candidate susceptibility gene for breast cancer progression and metastasis. PLoS Genetics 3: e214 -<A href="http://www.plosgenetics.org/article/fetchObjectAttachment.action?uri=info%3Adoi%2F10.1371%2Fjournal.pgen.0030214&representation=PDF" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, -<A href="http://www.plosgenetics.org/article/info:doi/10.1371/journal.pgen.0030214" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Dong H, Martin MV, Colvin J, Ali Z, Wang L, Lu L, Williams RW, Rosen GD, Csernansky JG, Cheverud JM (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17406662" target="_blank" class="fwn">2007</a>) Quantitative trait loci linked to thalamus and cortex gray matter volumes in BXD recombinant inbred mice. Heredity 99:62-69 -<LI> -Fox JG, Barthold SW, Davisson MT, Newcomer CE (<a href="http://books.google.com/books?id=vnRpW-gI9JMC" target="_blank" class="fwn">2007</a>) The mouse in biomedical research. (2nd ed). Academic Press, p. 530. -<LI> -French L, Pavlidis P (<a href="http://bib.oxfordjournals.org/cgi/content/abstract/8/6/446" target="_blank" class="fwn">2007</a>) Informatics in neuroscience. Briefings in Bioinformatics 8:446-456 -<LI> -Gatti D, Maki A, Chesler EJ, Kirova R, Kosyk O, Lu L, Manly KF, Williams RW, Perkins A, Langston MA, Threadgill DW, Rusyn I (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17542012" target="_blank" class="fwn">2007</a>) Genome-level analysis of genetic regulation of liver gene expression networks. Hepatology 46:548-557 - <A href="/images/upload/Gatti_Rusyn_2007.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Grice DE, Reenila I, Mannisto PT, Brooks Ai, Smith GG, Golden GT, Buxbaum JD, Berrettini WH (2007) Transcriptional profiling of C57 and DBA strains of mice in the absence and presence of morphine. BMC Genomics 8:76 -<A href="http://www.biomedcentral.com/content/pdf/1471-2164-8-76.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, -<A href="http://www.biomedcentral.com/1471-2164/8/76" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Hancock JM, Mallon AM (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18192320" target="_blank" class="fwn">2007</a>) Phenobabelomics--mouse phenotype data resources. Brief Funct Genomic Proteomic 6:292-301 -<LI> -Hawes JJ, Tuskan RG, Reilly KM (<a href="http://www.ingentaconnect.com/content/klu/10048/2007/00000008/00000002/00000078;jsessionid=1m2u56h1a4lj2.alice" target="_blank" class="fwn">2007</a>) <I>Nf1</I> expression is dependent on strain background: implications for tumor suppressor haploinsufficiency studies. Neurogenetics 8: 121-130. [Nf1 expression in whole brain (INIA data set) and in striatum (Rosen data set) was used to catalyze a detailed study of the degree of NPcis (Nf1 + Trp53) haploinsufficiency. Email: kreilly@ncifcrf.gov] -<LI> -Hofstetter JR, Svihla-Jones DA, Mayeda AR (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17974007" target="_blank" class="fwn">2007</a>) A QTL on mouse chromosome 12 for the genetic variance in free-running circadian period between inbred strains of mice. J Circadian Rhythms 5:7 -<A href="http://www.jcircadianrhythms.com/content/pdf/1740-3391-5-7.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, -<A href="http://www.jcircadianrhythms.com/content/5/1/7" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Hsu HC, Lu L, Yi N, Van Zant G, Williams RW, Mountz JD (<a href="http://books.google.com/books?id=fbTsCdQv7cEC&dq=genenetwork+webqtl&source=gbs_summary_s&cad=0" target="_blank" class="fwn">2007</a>) Quantitative trait locus mapping in aging systems. In: Methods in Molecular Biology (Vol 371). Biological Aging: Methods and Protocols, ed Tollefsbol TO, Humana Press, Inc., Netlibrary, Springer -<A href="http://books.google.com/books?id=fbTsCdQv7cEC&pg=RA4-PA332&lpg=RA4-PA332&dq=genenetwork+webqtl&source=web&ots=PawLDYAUam&sig=hOHsKDfumr3U-ZEUtT7Ag6gJAYg&hl=en&sa=X&oi=book_result&resnum=9&ct=result#PRA4-PA321,M1" target="_blank" class="fwn"><I>Google Book Search</I></A> -<LI> -Jawad M, Giotopoulos G, Fitch S, Cole C, Plumb M, Talbot CJ (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17185011" target="_blank" class="fwn">2007</a>) Mouse bone marrow and peripheral blood erythroid cell counts are regulated by different autosomal genetic loci. Blood Cells Mol Disease 38:69-77 -<LI> -Jessberger S, Gage FH (<a href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=1800354" target="_blank" class="fwn">2007</a>) ZOOMING IN: a new high-resolution gene expression atlas of the brain. Mol Syst Biol. 3:75 -<LI> -Jones BC, Beard JL, Gibson JN, Unger EL, Allen RP, McCarthy KA, Earley CJ (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17475678" target="_blank" class="fwn">2007</a>) Systems genetic analysis of peripheral iron parameters in the mouse. American Journal of Physiology Regul Integr Comp Physiol 293: R116-124 -<A href="http://ajpregu.physiology.org/cgi/content/full/293/1/R116" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>, and see <A href="http://www.genenetwork.org/images/upload/Jones et al 1999 Pharmacogenetics3-0.pdf" target="_blank" class="fwn"><I>full text of Jones et al., 1999.</I></A> -<LI> -Jones BC and Mormede JP (2007) Neurobehavioral genetics: methods and applications. (<a href="http://books.google.com/books?id=P85FPhRKFVMC&pg=PA102&lpg=PA102&dq=genenetwork+webqtl&source=web&ots=-qg3S-C0xQ&sig=HoOCQpZrV3i45I0vPfDb3PfDMvY" target="_blank" class="fwn">2007</a>)" CRC Press, Taylor & Francis Group, Boca Raton, Florida, p. 102, ISBN 084931903X -<LI> -Kadarmideen HN, Reverter A (2007) Combined genetic, genomic and transcriptomic methods in the analysis of animal traits. CABI Review: Perspectives in Agriculture, Veterinary Science, Nutrition and Natural Resources 2: No. 042 (16 pp) -<A href="/images/upload/Kadarmideen_Reverter_2007.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Korostynski M, Piechota M, Kaminska D, Solecki W. Przewlocki R (<a href="http://genomebiology.com/2007/8/6/R128" target="_blank" class="fwn">2007</a>) Morphine effects on striatal transcriptome in mice. Genome Biology 8:R128 -<LI> -Lad HV, Liu L, Payá-Cano JL, Fernandes C, Schalkwyk LC (<a href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC1998875/?tool=pubmed" target="_blank" class="fwn">2007</a>) Quantitative traits for the tail suspension test: automation, optimization, and BXD RI mapping. Mamm Genome. 2007 Jul;18(6-7):482-91 -<A href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC1998875/?tool=pubmed" target="_blank" class="fwn"><I>Full Text PubMed Central version</I></A> -<LI> -Liang Y, Jansen M, Aronow B, Geiger H, Van Zant G (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17220891" target="_blank" class="fwn">2007</a>) The quantitative trait gene latexin influences the size of the hematopoietic stem cell population in mice. Nature Genetics 39:141-142 (doi: 10.1038/ng1938). [Using the BXD mouse strains, Liang, Van Zant and colleagues, demonstrate that sequence variants in <I>Lxn</I> modulate cell cycling kinetics of bone marrow stem cells. High expression of <I>Lxn</I> mRNA and protein is associated with the C57BL/6J allele and with lower proliferative activity. The authors made good use of the <A HREF="http://www.genenetwork.org/dbdoc/HC_U_0304_R.html" class="fwn" target="_blank" >BXD Hematopoietic Stem Cell</A> data set and <I>Lxn</I> Affymetrix probe set 96065_at. Figures 1 and 5 were generated using GeneNetwork.] -<LI> -Llamas B, Bélanger S, Picard S, Deschepper CF (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17566079" target="_blank" class="fwn">2007</a>) Cardiac mass and cardiomyocyte size are governed by different genetic loci on either autosomes or chromosome Y in recombinant inbred mice. Physiol Genomics 31:176-82 -<LI> -Meng PH, Macquet A, Loudet O, Marion-Poll A, North HM (<a href="http://mplant.oxfordjournals.org/cgi/content/full/ssm014v1" target="_blank" class="fwn">2007</a>) Analysis of natural allelic variation controlling Arabidopsis thaliana seed germinability in response to cold and dark: identification of three major quantitative trait loci. Molecular Plant, doi:10.1093/mp/ssm014 -<LI> -Mouse Phenotype Database Integration Consortium (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17436037" target="_blank" class="fwn">2007</a>) Integration of mouse phenome data resources. Mammalian Genome, 18:157-163. -<A href="http://www.har.mrc.ac.uk/research/bioinformatics/publications/Preprint1.pdf" target="_blank" class="fwn"><I>PDF Preprint Version</I></A> -<LI> -Miyairi I, Tatireddigari VR, Mahdi OS, Rose LA, Belland RJ, Lu L, Williams RW, Byrne GI (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17641048" target="_blank" class="fwn">2007</a>) The p47 GTPases Iigp2 and Irgb10 regulate innate immunity and inflammation to murine Chlamydia psittaci. J Immunol 179:1814-1824 -<LI> -Mozhui K, Hamre KM, Holmes A, Lu L, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17131200" target="_blank" class="fwn">2007</a>) Genetic and structural analysis of the basolateral amygdala complex in BXD recombinant inbred mice. Behav Genet. 37:223-243 -<A href="http://www.genenetwork.org/images/upload/Mozhui_et_al_2007.doc" target="_blank" class="fwn"><I>Full Text MS Word Version (authors' copy)</I></A> -<LI> -Peirce JL, Broman KW, Lu L, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17400728" target="_blank" class="fwn">2007</a>) A simple method for combining genetic mapping data from multiple crosses and experimental designs. PLoS ONE 2:e1036 -<A href="http://www.plosone.org/article/fetchObjectAttachment.action;jsessionid=009B2741B48AC1CB94E68107E714A1B0?uri=info%3Adoi%2F10.1371%2Fjournal.pone.0001036&representation=PDF" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, -<A href="http://www.plosone.org/article/info:doi%2F10.1371%2Fjournal.pone.0001036" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Pérez-Enciso M, Quevedo JR, Bahamonde A (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17352813" target="_blank" class="fwn">2007</a>) Genetical genomics: use all data. BMC Genomics 8:69. -<A href="http://www.biomedcentral.com/content/pdf/1471-2164-8-69.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, -<A href="http://www.biomedcentral.com/1471-2164/8/69" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Rosen GD, Bai J, Wang Y, Fiondella CG, Threlkeld SW, LoTurco JJ, Galaburda AM (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17218481" target="_blank" class="fwn">2007</a>) Disruption of neuronal migration by RNAi of Dyx1c1 results in neocortical and hippocampal malformations. Cereb Cortex 17:2562-72. -<A href="http://cercor.oxfordjournals.org/cgi/reprint/bhl162v1.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, -<LI> -Rosen GD, Chesler EJ, Manly KF, Williams RW (2007) An informatics approach to systems neurogenetics. Methods Mol Biol 401:287-303 -<LI> -Sunkin SM, Hohmann JG (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17911164" target="_blank" class="fwn">2007</a>) Insights from spatially mapped gene expression in the mouse brain. Human Molecular Genetics 16: R209-219 -<A href="http://hmg.oxfordjournals.org/cgi/reprint/16/R2/R209.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, -<A href="http://hmg.oxfordjournals.org/cgi/content/full/16/R2/R209" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Swertz MA, Jansen RC (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17297480" target="_blank" class="fwn">2007</a>) Beyond standardization: dynamic software infrastructure for systems biology. Nature Reviews Genetics:235-243 -<LI> -Taylor M, Valdar W, Kumar A, Flint J, Mott R (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17400728" target="_blank" class="fwn">2007</a>) Management, presentation and interpretation of genome scans using GSCANDB. Bioinformatics 23:1545-1549 -<A href="http://bioinformatics.oxfordjournals.org/cgi/reprint/23/12/1545" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, -<A href="http://bioinformatics.oxfordjournals.org/cgi/content/full/23/12/1545" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Vazquez-Chona F, Lu L, Williams RW, Geisert EE (2007) Genetic influences on retinal gene expression and wound healing. Gene Regulation and Systems Biology 1:327-348 -<A href="/images/upload/Vazquez2007.pdf" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -von Rohr P, Friberg M, Kadarmideen HN (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17688316" target="_blank" class="fwn">2007</a>) Prediction of transcription factor binding sites using results from genetical genomics investigations. Journal of Bioinformatics and Computational Biology 5:773-793 -<A href="/images/upload/vonRohr_etal_2007.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Wan X, Pavlidis P (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17917127" target="_blank" class="fwn">2007</a>) Sharing and reusing gene expression profiling data in neuroscience. Neuroinformatics 5:161-75. -<A href="http://www.bioinformatics.ubc.ca/pavlidis/lab/reuse/walkthrough.pdf" target="_blank" class="fwn"><I>HTML example of using GEMMA and GeneNetwork</I></A>. -<LI> -Zou W, Aylor DL, Zeng ZB (<a href="http://www.biomedcentral.com/1471-2105/8/7" target="_blank" class="fwn">2007</a>) eQTL Viewer: visualizing how sequence variation affects genome-wide transcription. BMC Bioinformatics 8:7. -<A href="http://www.biomedcentral.com/content/pdf/1471-2105-8-7.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, -<A href="http://www.biomedcentral.com/1471-2105/8/7" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>. -</OL> - -</Blockquote> - -<BLOCKQUOTE style="font-size: 14px;"> - <A NAME="2006" class="subtitle"">GeneNetwork (2006) </A> -<BLOCKQUOTE> - -</Blockquote> - -<OL> -<LI> -Aliesky HA, Pichurin PN, Chen CR, Williams RW, Rapoport B, McLachlan SM (<a href="http://www.ncbi.nlm.nih.gov/pubmed/16543368" class="fwn">2006</a>) Probing the genetic basis for thyrotropin receptor antibodies and hyperthyroidism in immunized CXB recombinant inbred mice. Endocrinology 147:2789-800. -<A href="http://endo.endojournals.org/cgi/reprint/147/6/2789.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, -<A href="http://endo.endojournals.org/cgi/content/full/147/6/2789" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>. -<LI> -Bao L, Wei L, Peirce JL, Homayouni R, Li H, Zhou M, Chen H, Lu L, Williams RW, Pfeffer LM, Goldowitz D, Cui Y (<a href="http://www.ncbi.nlm.nih.gov/pubmed/16783639" class="fwn">2006</a>) Combining gene expression QTL mapping and phenotypic spectrum analysis to uncover gene regulatory relationships. Mammalian Genome 17:575-583 -<A href="http://www.springerlink.com/content/v32720xj70343812/fulltext.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, -<A href="http://www.springerlink.com/content/v32720xj70343812/fulltext.html" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>. -<LI> -Beatty J, Laughlin RE (<a href="http://www.biomedcentral.com/1471-2202/7/16" class="fwn">2006</a>) Genomic regulation of natural variation in cortical and noncortical brain volume. BMC Neuroscience 7:16 [This mapping study made use of both the <A HREF="www.mbl.org" target="_blank" class="fwn">Mouse Brain Libray</A> online collection of sections of BXD brains and GeneNetwork/WebQTL.] -<LI> -Bennett B, Carosone-Link P, Zahniser NR, Johnson TE (<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=AbstractPlus&list_uids=16803863&query_hl=2&itool=pubmed_docsum" target="_blank" class="fwn">2006</a>) Confirmation and fine mapping of ethanol sensitivity quantitative trait loci, and candidate gene testing in the LXS recombinant inbred mice. J Pharmacol Exp Ther 319:299-307 (doi: 10.1038/ng1938) -<A href="http://jpet.aspetjournals.org/cgi/reprint/319/1/299.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Bennett B, Downing C, Parker C, Johnson TE (<a href="http://www.ncbi.nlm.nih.gov/pubmed/16730093" target="_blank" class="fwn">2006</a>) Mouse genetic models in alcohol research. Trends Genet 22:367-74 -<LI> -Cervino ACL, Darvasi A, Fallahi M, Mader CC, Tsinoremas NF (2006) An integrated in silico gene mapping strategy in inbred mice (<a href="http://www.genetics.org/cgi/content/full/175/1/321" target="_blank" class="fwn">2006</a>) Genetics 175:321-333 -<LI> -Chesler EJ, Langston MA (<a href="http://www.springerlink.com/content/ut638ph1845x1768/" target="_blank" class="fwn">2006</a>) Combinatorial genetic regulatory network analysis tools for high throughput transcriptomic data. In: Lecture Notes in Computer Science. Springer, Heidelberg, Vol. 4023: 150-165. -<LI> -De Haro L, Panda S(<a href="http://www.ncbi.nlm.nih.gov/pubmed/17107940" target="_blank" class="fwn">2006</a>) Systems biology of circadian rhythms: an outlook. Journal of Biological Rhythms 21:507 -<A href="http://jbr.sagepub.com/cgi/reprint/21/6/507.pdf " target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Jones LC, McCarthy KA, Beard JL, Keen CL, Jones BC (<a href="http://www.ncbi.nlm.nih.gov/pubmed/16910173" target="_blank" class="fwn">2006</a>) Quantitative genetic analysis of brain copper and zinc in BXD recombinant inbred mice. Nutritional Neuroscience 9:81-92 [This paper includes a large data set consisting of 16 traits related to copper and zinc metabolism in the CNS that is part of the Mouse BXD Phenotype database in GeneNetwork. The entire data set can be found by entering the search term "Jones LC" in the ALL search field.] -<LI> -Kadarmideen HN, Janss LLG (<a href="http://www.ncbi.nlm.nih.gov//pubmed/17132818" class="fwn" target="_blank" >2006</a>) Population and systems genetics analyses of cortisol in pigs divergently selected for stress. Physiological Genomics 29:57-65 <A href="http://physiolgenomics.physiology.org/cgi/reprint/29/1/57?ck=nck" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, <A href="http://physiolgenomics.physiology.org/cgi/content/full/29/1/57?ck=nck" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>. [One of several great papers in a freely available (open) Special Issue of Mammalian Genome devoted to QTLs, Expression and Complex Trait Analysis. This study makes great use of the BXD INIA Brain mRNA M430 PDNN data set and GeneNetwork/WebQTL.] -<LI> -Kadarmideen HN, von Rohr, P, Janss LLG (<a href="http://www.ncbi.nlm.nih.gov//pubmed/16783637" class="fwn" target="_blank" >2006</a>) From genetical genomics to systems genetics: potential applications in quantitative genomics and animal breeding. Mammalian Genome 17:548-564 <A href="http://www.springerlink.com/media/788y661n1l5tvhac6eet/contributions/4/4/2/5/4425640024004428.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, <A href="http://www.springerlink.com/media/12d237nvvh7krwan8q9x/contributions/4/4/2/5/4425640024004428_html/fulltext.html" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>. [One of several great papers in a freely available (open) Special Issue of Mammalian Genome devoted to QTLs, Expression and Complex Trait Analysis. This study makes great use of the BXD INIA Brain mRNA M430 PDNN data set and GeneNetwork/WebQTL.] -<LI> -Kamminga LM, Bystrykh LV, de Boer A, Houwer S, Douma J, Weersing E, Dontje B, de Haan G (<A HREF="http://www.ncbi.nlm.nih.gov//pubmed/16293602" target="_blank" class="fwn">2006</A>) The Polycomb group gene Ezh2 prevents hematopoietic stem cell exhaustion. Blood 107:2170-2179 -<A href="http://bloodjournal.hematologylibrary.org/cgi/reprint/2005-09-3585v1.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Keeley MB, Wood MA, Isiegas C, Stein J, Hellman K, Hannenhalli S, Abel T (<a href="http://www.learnmem.org/cgi/reprint/13/2/135.pdf?ck=nck" class="fwn" target="_blank>2006</A>) Differential transcriptional response to nonassociative and associative components of classical fear conditioning in the amygdala and hippocampus. Learning and Memory 13:135-142103:780-785. -<LI> -Kempermann G, Chesler EJ, Lu L, Williams RW, Gage FH (<a href="http://www.pnas.org/cgi/content/full/103/3/780" class="fwn" target="_blank>2006</A>) Natural variation and genetic covariance in adult hippocampal neurogenesis. Proceedings of the National Academy of Science 103:780-785. -<LI> -Korostynski M, Kaminska-Chowaniec D, Piechota M, Przewlocki R (<a href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=1553451" target="_blank" class="fwn">2006</a>) Gene expression profiling in the striatum of inbred mouse strains with distinct opioid-related phenotypes. BMC Genomics 7: 146 (doi: 10.1186/1471-2164-7-146). <A href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=1553451" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>. [A combination of data sources including the Rosen HBP Striatum data set used to study opioid-related traits. Their <a href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=1553451&rendertype=figure&id=F3" target="_blank" class="fwn">Fig 3C</a> and <a href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=1553451&rendertype=figure&id=F5" target="_blank" class="fwn">Fig 5</a> take good advantage of GeneNetwork and WebQTL output graphs.] -<LI> -Lan H, Chen M, Flowers JB, Yandell BS, Stapleton DS, Mata CM, Mui ET, Flowers MT, Schueler KL, Manly KF, Williams RW, Kendziorski C, Attie A (<a href="http://genetics.plosjournals.org/perlserv/?request=get-document&doi=10.1371/journal.pgen.0020006" target="_blank" class="fwn">2006</a>) Combined expression trait correlations and expression quantitative trait locus mapping. PLoS Genetics 2:e6 [Please cite this work if you make use of the B6BTBRF2 liver transcriptome data.] -<LI> -Liu Y, Li J, Sam L, Goh CS, Gerstein M, Lussier YA (<a href="http://compbiol.plosjournals.org/perlserv/?request=get-document&doi=10.1371/journal.pcbi.0020159" target="_blank" class="fwn">2006</a>) An integrative genomic approach to uncover molecular mechanisms of prokaryotic traits. PLoS Computional Biology 2:e159 -<LI> -Loney KD, Uddin RK, Singh SM (<a href="http://www.ncbi.nlm.nih.gov/pubmed/16433728" target="_blank" class="fwn">2006</a>) Analysis of metallothionein brain gene expression in relation to ethanol preference in mice using cosegregation and gene knockouts. Alcohol Clin Exp Res 30:15-25 -<LI> -Martin MV, Dong H, Vallera D, Lee D, Lu L, Williams RW, Rosen GD, Cheverud JM, Csernansky JG (<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=AbstractPlus&list_uids=17081266&query_hl=1&itool=pubmed_docsum" target="_blank" class="fwn">2006</a>) Independent quantitative trait loci influence ventral and dorsal hippocampal volume in recombinant inbred strains of mice. Gene, Brain and Behavior 5:614-623. -<LI> -van Os R, Ausema A, Noach EJ, van Pelt K, Dontje BJ, Vellenga E, de Haan G (<a href="http://www.ncbi.nlm.nih.gov/pubmed/16371023" target="_blank" class="fwn">2006</a>) Identification of quantitative trait loci regulating haematopoietic parameters in B6AKRF2 mice. British Journal of Haematolology 132:80-90. -<LI> -Peirce JL, Li H, Wang J, Manly KF, Hitzemann RJ, Belknap JK, Rosen GD, Goodwin S, Sutter TR, Williams RW, Lu L (<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=Abstract&list_uids=16783644&query_hl=1&itool=pubmed_docsum" class="fwn">2006</a>) How replicable are mRNA expression QTL? Mammalian Genome 17:643-656. <A href="http://www.springerlink.com/content/a23g75163p624324/fulltext.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, <A href="http://www.springerlink.com/content/a23g75163p624324/fulltext.html" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>. [An important paper in which four matched expression data sets (whole brain and striatum) generated using both recombinant inbred and F2 intercrosses were directly compared.] -<LI> -Ponomarev I, Maiya R, Harnett MT, Schafer GL, Ryabinin AE, Blednov YA, Morikawa H, Boehm SL 2nd, Homanics GE, Berman AE, Lodowski KH, Bergeson SE, Harris RA (<a href="http://www.ncbi.nlm.nih.gov/pubmed/16783644" class="fwn">2006</a>) Transcriptional signatures of cellular plasticity in mice lacking the alpha1 subunit of GABAA receptors. J Neurosci 26:5673-83 -<A href="http://www.jneurosci.org/cgi/reprint/26/21/5673.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, -<A href="http://www.jneurosci.org/cgi/content/full/26/21/5673" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Radcliffe RA, Lee MJ, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=Abstract&list_uids=16783639&query_hl=1&itool=pubmed_docsum" class="fwn">2006</a>) Prediction of cis-QTLs in a pair of inbred mouse strains with the use of expression and haplotype data from public databases. Mammalian Genome 17:629-642 <A href="http://www.springerlink.com/content/3u641hgk642221r6/fulltext.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, <A href="http://www.springerlink.com/content/3u641hgk642221r6/fulltext.html" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Rulten SL, Ripley TL, Hunt CL, Stephens DN, Mayne LV (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=AbstractPlus&list_uids=16594979&query_hl=2&itool=pubmed_docsum" target="_blank" class="fwn">2006</a>) Sp1 and NFkappaB pathways are regulated in brain in response to acute and chronic ethanol. Genes Brain Behav 5:257-273 [This study exploited the original GeneNetwork Affymetrix U74Av2 brain data set to validate a set of transcripts modulated by ethanol treatment.] -<LI> -Saba L, Bhave SV, Grahame N, Bice P, Lapadat R, Belknap J, Hoffman PL, Tabakoff B (<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=AbstractPlus&list_uids=16783646&query_hl=8&itool=pubmed_docsum" class="fwn">2006</a>) Candidate genes and their regulatory elements: alcohol preference and tolerance. Mammalian Genome 17:669-688 <A href="http://www.springerlink.com/content/224237686jx80v61/fulltext.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, <A href="http://www.springerlink.com/content/224237686jx80v61/fulltext.html" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> [A lovely paper describing results of a whole brain BXD study involving males from 30 strains (four individual arrays (not pooled) per strain). The data described in this study have been made accessible from GeneNetwork.] -<LI> -Shifman S, Bell JT, Copley BR, Taylor M, Williams RW, Mott R, Flint J (<A HREF="http://biology.plosjournals.org/perlserv/?request=get-document&doi=10.1371/journal.pbio.0040395" target="_blank" class="fwn">2006</A>) A high resolution single nucleotide polymorphism genetic map of the mouse genome. PLoS Biology 4:2227-2237 <A HREF="http://biology.plosjournals.org/archive/1545-7885/4/12/pdf/10.1371_journal.pbio.0040395-L.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> [A comprehensive analysis of recombination rates using several populations of mice, including most major genetic reference populations.] -<LI> -van Os R, Ausema A, Noach EJ, van Pelt K, Dontje BJ, Vellenga E, de Haan G (<a href="http://www.blackwell-synergy.com/doi/abs/10.1111/j.1365-2141.2005.05835.x" class="fwn">2006</a>) Identification of quantitative trait loci regulating haematopoietic parameters in B6AKRF2 mice. British Journal of Haematology 132:80-90 -<LI> -Veenstra-VanderWeele J, Qaadir A, Palmer AA, Cook EH Jr, de Wit H. (<a href="http://www.ncbi.nlm.nih.gov/pubmed/16237383" class="fwn">2006</a>) Association between the casein kinase 1 epsilon gene region and subjective response to D-amphetamine. Neuropsychopharmacology 31:1056-1063 <A href="http://www.nature.com/npp/journal/v31/n5/full/1300936a.html" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> [This mapping study made use of GeneNetwork/WebQTL to show that "the region that contains Csnk1e was also found to contain a QTL for MA sensitivity, and complementary data from WebQTL (Chesler et al, 2005) showed that this same region of mouse chromosome 15 influenced Csnk1e transcript abundance, indicating the presence of a cis-acting eQTL."] -<LI> -Voy BH, Scharff JA, Perkins AD, Saxton AM, Borate B, Chesler EJ, Branstetter LK, Langston MA (<a href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pubmed&pubmedid=16854212" target="_blank" class="fwn">2006</a>) Extracting gene networks for low-dose radiation using graph theoretical algorithms. PLoS Computational Biology 2:e89. [A paper that introduces the use of cliques in analyzing microarray data sets. One of the GeneNetwork databases (BXD Hematopoietic Stem Cells) was used to follow up on a strong candidate gene, Tubby-like protein 4 <I>Tulp4</I>) that may have a role in immune function. -<LI> -Williams RH, Cotsapas CJ, Cowley MJ, Chan E, Nott DJ, Little PF (<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=Abstract&list_uids=16874319&query_hl=3&itool=pubmed_docsum" target="_blank" class="fwn">2006</a>) Normalization procedures and detection of linkage signal in genetical-genomics experiments. Nature Genetics 38:855-856. [A set of letters to the editor by Rohan Williams and colleagues, Chesler and colleagues, and Petretto and colleagues. All three letters highlight some of the technical challenges of analyzing expression data in a genetic context and point to the need for great care and attention to normalization methods. Well worth reviewing. Normalization is still very much an art, and it is quite likely that no one normalization procedure will be optimal for all different research questions. The old adage: "different horses for different courses" is likley to apply.] -<LI> -Williams RW (<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=Abstract&list_uids=16783631&query_hl=1&itool=pubmed_docsum" class="fwn">2006</a>) Expression genetics and the phenotype revolution. Mammalian Genome 17:496-502 <A href="http://www.springerlink.com/content/921734n56j08400n/fulltext.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, <A href="http://www.springerlink.com/content/921734n56j08400n/fulltext.html" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>. [My take on where systems genetics may take us in the next few years.] - -</OL> - - - - - - - - - - -</Blockquote> - - -<BLOCKQUOTE style="font-size: 14px;"> - <A NAME="2005" class="subtitle"">GeneNetwork (2005) </A> -<BLOCKQUOTE> - -</Blockquote> -<OL> -<LI>Alberts R, Terpstra P, Bystrykh LV, de Haan G, Jansen RC (<A HREF="http://www.ncbi.nlm.nih.gov/pubmed&dopt=Abstract&list_uids=15711547&query_hl=10" target="_blank" class="fwn">2005</A>) A statistical multiprobe model for analyzing cis and trans genes in genetical genomics experiments with short-oligonucleotide arrays Genetics 171:1437-1439 -<LI>Alberts R, Fu J, Swertz MA, Lubbers LA, Albers CJ, Jansen RC (<A HREF="http://www.ncbi.nlm.nih.gov/pubmed/15975223" target="_blank" class="fwn">2005</A>) Combining microarrays and genetic analysis. Brief Bioinform. 6:135-145 -<A href="http://bib.oxfordjournals.org/cgi/reprint/6/2/135.pdf" target="_blank" class="fwn"><I> Full text PDF version</I></A> -<LI> -Bystrykh L, Weersing E, Dontje B, Sutton S, Pletcher MT, Wiltshire T, Su AI, Vellenga E, Wang J, Manly KF, Lu L, Chesler EJ, Alberts R, Jansen RC, Williams RW, Cooke M, de Haan G (<A HREF="http://www.ncbi.nlm.nih.gov/pubmed/15711547" target="_blank" class="fwn">2005</A>) Uncovering regulatory pathways affecting hematopoietic stem cell function using “genetical genomics." Nature Genetics, 37:225-232 -<LI> -Chesler EJ, Lu L, Shou S, Qu Y, Gu J, Wang J, Hsu HC, Mountz JD, Baldwin N, Langston MA, Threadgill DW, Manly KF, Williams RW (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15711545&query_hl=10" target="_blank" class="fwn">2005</A>) Genetic dissection of gene expression reveals polygenic and pleiotropic networks modulating brain structure and function. Nature Genetics 37: 233-242 -<LI> -Flaherty L, Herron B, Symula D (<A HREF="http://www.genome.org/cgi/content/abstract/15/12/1741" target="_blank" class="fwn">2005</A>) Genome Research 15:1741-1745 <A href="http://www.genome.org/cgi/reprint/15/12/1741.pdf" target="_blank" class="fwn"><I> Full text PDF version</I></A> -<LI> -Garlow SJ, Boone E, Li W, Owens MJ, Nemeroff CB (<A HREF="http://endo.endojournals.org/cgi/content/abstract/146/5/2362" target="_blank" class="fwn">2005</A>) Genetic analysis of hypothalamic corticotropin-releasing factor system. Endocrinology 146: 2362-2368 -<LI> -Gammie SC, Hasen NS, Awad TA, Auger AP, Jessen HM, Panksepp JB, Bronikowski AM (<A HREF="http://www.eeob.iastate.edu/faculty/BronikoA/annespdfs/MBres.pdf" target="_blank" class="fwn">2005</A>) Gene array profiling of large hypothalamic CNS regions in lactating and randomly cycling virgin mice. Molecular Brain Research 139: 201-211 -<LI> -Kerns RT, Ravindranathan A, Hassan S, Cage MP, York T, Williams RW, Miles MF (<A HREF="http://www.jneurosci.org/cgi/content/full/25/9/2255" target="_blank" class="fwn">2005</A>) Ethanol-responsive brain region expression networks: implications for behavioral responses to acute ethanol in DBA/2J versus C57BL/6J mice. Journal of Neuroscience 25: 2255-2266 [<A HREF="http://www.brainchip.vcu.edu/kerns_apptable1.pdf" target="_blank" class="fwn">www.brainchip.vcu.edu/kerns_apptable1.pdf</A> for a complete table of modulated transcripts.] -<LI> -Li HQ, Lu L, Manly KF, Wang J, Zhou M, Williams RW, Cui Y (<A HREF="http://hmg.oupjournals.org/cgi/content/abstract/ddi124v1" target="_blank" class="fwn">2005</A>) Inferring gene transcriptional modulatory relations: a genetical genomics approach. Human Molecular Genetics 14: 1119-1125 -<LI> -Li J, Burmeister M (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=AbstractPlus&list_uids=16244315&query_hl=5&itool=pubmed_docsum" target="_blank" class="fwn">2005</A>) Genetical genomics: combining genetics with gene expression analysis. Human Molecular Genetics 14:163-169. - [<A href="/images/upload/Li_Burmeister_2005.pdf" target="_blank" class="fwn"><I> Full text PDF version</I></A>] - -<LI> -Lozier JN, Tayebi N, Zhang P (<A HREF="http://www.bloodjournal.org/cgi/content/abstract/" target="_blank" class="fwn">2005</A>) Mapping of genes that control the antibody response to human factor IX in mice. Blood 105: 1029-1035 -<LI> -MacLaren EJ, Sikela JM (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=AbstractPlus&list_uids=16205357&query_hl=3&itool=pubmed_docsum" target="_blank" class="fwn">2005</A>) Cerebellar gene expression profiling and eQTL analysis in inbred mouse strains selected for ethanol sensitivity. Alcoholism: Clinical and Experimental Research 29: 1568-1579. -<A HREF="http://www.alcoholism-cer.com/pt/re/alcoholism/abstract.00000374-200509000-00002.htm;jsessionid=HBGNJpQldfCKvpYr6XLCzW3fF4YT1mzCVTXGcCMNYCL6N4WlDLlK!901085598!181195628!8091!-1" target="_blank" class="fwn"><I>HTML</I></A> and -<A HREF="http://www.alcoholism-cer.com/pt/re/alcoholism/pdfhandler.00000374-200509000-00002.pdf;jsessionid=HBGNJpQldfCKvpYr6XLCzW3fF4YT1mzCVTXGcCMNYCL6N4WlDLlK!901085598!181195628!8091!-1" target="_blank" class="fwn"><I>PDF</I> reprints.</A> -<LI> -Matthews B, Bhave SV, Belknap JK, Brittingham C, Chesler EJ, Hitzemann RJ, Hoffman PL, Lu L, McWeeney S, Miles MR, Tabakoff B, Williams RW (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=AbstractPlus&list_uids=16205371&query_hl=1&itool=pubmed_docsum" target="_blank" class="fwn">2005</A>) Complex genetics of interactions of alcohol and CNS function and behavior. Alcoholism: Clinical and Experimental Research 29:1706-1719 -<LI> -Mountz JD, Yang P, Wu Q, Zhou J, Tousson A, Fitzgerald A, Allen J, Wang X, Cartner S, Grizzle WE, Yi N, Lu L, Williams RW, Hsu HC (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15683449&query_hl=4" target="_blank" class="fwn">2005</A>) Genetic segregation of spontaneous erosive arthritis and generalized autoimmune disease in BXD2 recombinant inbred strain of mice. Scadinavian Journal of Immunology 61:1-11 -<A href="/images/upload/Mountz2005.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> -<LI> -Li CX, Wei X, Lu L, Peirce JL, Wiliams RW, Waters RS (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=16338823&query_hl=12&itool=pubmed_docsum" target="_blank" class="fwn">2005</A>) Genetic analysis of barrel field size in the first somatosensory area (S1) in inbred and recombinant inbred strains of mice. Somatosensory and Motor Research 22:141-150 -<LI> -Palmer AA, Verbitsky M, Suresh R, Kamen HM, Reed CI, Li N, Burkhart-Kasch S, McKinnon CS, Belknap JK, Gilliam TC, Phillips TJ (<A HREF="http://www.ncbi.nlm.nih.gov/pubmed/16104378" target="_blank" class="fwn">2005</A>) Gene expression differences in mice divergently selected for methamphetamine sensitivity. Mammalian Genome 16:291-305 -<LI> -Pravenec M, Kren V (<A HREF="http://www.ncbi.nlm.nih.gov/pubmed/15728137" target="_blank" class="fwn">2005</A>) Genetic analysis of complex cardiovascular traits in the spontaneously hypertensive rat. Exp Physiol 90:273-276 -<A href="http://ep.physoc.org/cgi/reprint/90/3/273.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, -<A href="http://ep.physoc.org/cgi/content/full/90/3/273" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Scott RE, White-Grindley E, Ruley HE, Chesler EJ, Williams RW (<A HREF="http://www3.interscience.wiley.com/cgi-bin/fulltext/109860478/HTMLSTART" target="_blank" class="fwn">2005</A>) P2P-R expression is genetically coregulated with components of the translation machinery and with PUM2, a translational repressor that associates with the P2P-R mRNA. Journal of Cellular Physiology 204:99-105 <A href="http://www3.interscience.wiley.com/cgi-bin/fulltext/109860478/HTMLSTART" target="_blank" class="fwn"><I> Full text HTML version</I></A> -<LI> -Vazquez-Chona FR, Khan AN, Chan CK, Moore AN, Dash PK, Rosario Hernandez R, Lu L, Chesler EJ, Manly KF, Williams RW, Geisert Jr EE (<A HREF="http://www.molvis.org/molvis/v11/a115/" target="_blank" class="fwn">2005</A>) Genetic networks controlling retinal injury. Molecular Vision 11:958-970 -<LI> -Yang H, Crawford N, Lukes L, Finney R, Lancaster M, Hunter KW (<A HREF="http://www.ncbi.nlm.nih.gov/pubmed/15728137" target="_blank" class="fwn">2005</A>) Metastasis predictive signature profiles pre-exist in normal tissues. Clin Exp Metastasis 22:593-603 -<A href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pubmed&pubmedid=16475030" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> - - - -</OL> -</Blockquote> - - - - - -<BLOCKQUOTE style="font-size: 14px;"> - <A NAME="2004" class="subtitle"">GeneNetwork (2004) </A> -<BLOCKQUOTE> - -</Blockquote> -<OL> -<LI>Baldwin NE, Chesler EJ, Kirov S, Langston MA, Snoddy JR, Williams RW, Zhang B (2004) Computational, integrative and comparative methods for the elucidation of genetic co-expression networks. Journal of Biomedicine and Biotechnology 2:172-180 -<A HREF="http://www.pubmedcentral.gov/articlerender.fcgi?tool=pubmed&pubmedid=16046823" target="_blank" class="fwn"><I>HTML</I></A> and -<A HREF="http://www.pubmedcentral.nih.gov/picrender.fcgi?artid=1184052&blobtype=pdf" target="_blank" class="fwn"><I>PDF</I> reprints.</A> -<LI> -Carlborg O, De Koning DJ, Chesler EJ, Manly KM, Williams RW, Haley CS (<A HREF="http://bioinformatics.oupjournals.org/cgi/content/abstract/bti241v1" target="_blank" class="fwn">2004</A>) Methological aspects of the genetic dissection of gene expression. Bioinformatics 10:1093 -<LI> -Chesler EJ, Williams RW (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15474587&query_hl=10" target="_blank" class="fwn">2004</A>) Brain gene expression: genomics and genetics. International Review of Neurobiology 60:59-95 -<LI> -Fernandes K, Paya-Cano JL, Sluyter F, D'Souza U, Plomin R, Schalkwyk LC (<A HREF="http://www.blackwell-synergy.com/links/doi" target="_blank" class="fwn">2004</A>) Hippocampal gene expression profiling across eight mouse inbred strains: towards understanding the molecular basis for behaviour. European Journal of Neuroscience 19:2576-2582 -<A href="http://www.bloodjournal.org/cgi/content/full/104/2/374" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Henckaerts E, Langer JC, Hans-Willem Snoeck HW (2004) Quantitative genetic variation in the hematopoietic stem cell and progenitor cell compartment and in lifespan are closely linked at multiple loci in BXD recombinant inbred mice. Blood 104:374-379 <A href="http://www.bloodjournal.org/cgi/content/full/104/2/374" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Hitzemann R, Reed C, Malmanger B, Lawler M, Hitzemann B, Cunningham B, McWeeney S, Belknap J, Harrington C, Buck K, Phillips T, Crabbe J (<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15597075" target="_blank" class="fwn">2004</a>) On the integration of alcohol-related quantitative trait loci and gene expression analyses. Alcoholism: Clinical and Experimental Research 28:1437-1448 [Please cite this paper is you plan to use the B6D2F2 OHSU data set.] -<LI> -Maiya RP (<a href="http://64.233.179.104/search?q=cache:3ajOyi3RpywJ:www.lib.utexas.edu/etd/d/2004/maiyar34683/maiyar34683.pdf+webqtl&hl=en" target="_blank" class="fwn">2004</a>) Regulation of dopamine transporter: a role for ethanol and protein interactions. Dissertation, University of Texas, Austin -<LI> -Orth AP, Batalow S, Perrone M, Chanda SK (<a href="http://www.ashley-pub.com/doi/abs/10.1517/14728222.8.6.587" target="_blank" class="fwn">2004</a>) The promise of genomics to identify novel therapeutic targets. Expert Opion of Therapeutic Targets 8:587-596 -<LI> -Pomp D, Allan MF, Wesolowski SR (<a href="http://www.animal-science.org/cgi/content/full/82/13_suppl/E300" target="_blank" class="fwn">2004</a>) Quantitative genomics: Exploring the genetic architecture of complex trait predisposition. J Anim Sci 82:E300-E312 -<A href="http://jas.fass.org/cgi/reprint/82/13_suppl/E300.pdf" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> -<LI> -Ponomarev I, Schafer GL, Blednov YA, Williams RW, Iver VR, Harris A (<A HREF="http://www.ncbi.nlm.nih.gov/pubmed/15544578" target="_blank" class="fwn">2004</A>) Convergent analysis of cDNA and short oligomer microarrays, mouse null mutant, and bioinformatics resources to study complex traits. Genes, Brain and Behavior 3:360-368 -<LI> -Simon P, Schott K, Williams RW, Schaeffel F (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15610169" target="_blank" class="fwn">2004</A>) Post-translational regulation of the immediate early gene EGR1 by light in the mouse retina. European Journal of Neuroscience 20:3371-3377 -<LI> -Zareparsi S, Hero A, Zack DJ, Williams RW, Swaroop A (<A HREF="http://www.iovs.org/cgi/content/full/45/8/2457" target="_blank" class="fwn">2004</A>) Seeing the unseen: microarray-based gene expression profiling in vision. Investigative Ophthalmology and Visual Science 45:2457-2462 <A href="http://www.iovs.org/cgi/content/full/45/8/2457" target="_blank" class="fwn"><I> Full text HTML version</I></A> -</OL - - - - - - - - - - - - - - -</Blockquote> - - - - - -<BLOCKQUOTE style="font-size: 14px;"> - <A NAME="2003" class="subtitle"">GeneNetwork (2003) </A> -<BLOCKQUOTE> - -</Blockquote> - -<OL> -<LI> -Bolivar V, Flaherty L (2003) A region on chromosome 15 controls intersession habituation in mice. Journal of Neuroscience 23: 9435-9438 <A href="http://www.jneurosci.org/cgi/content/full/23/28/9435" target="_blank" class="fwn"><I> Full Text HTML and PDF Versions</I></A> -<LI> -Jones BC, Reed CL, Hitzemann R, Wiesinger JA, McCarthy KA, Buwen JP, Beard JL <A HREF="http://www.ncbi.nlm.nih.gov/pubmed/14744041" target="_blank" class="fwn">2003</A>) Quantitative genetic analysis of ventral midbrain and liver iron in BXD recombinant inbred mice. Nutr Neuroscience 6:369-77 -<A href="images/upload/Jones_2003_NN1203.pdf" target="_blank" class="fwn"><I> Full Text PDF Version</I></A> - -<LI> -Hitzemann R, Hitzemann B, Rivera S, Gatley J, Thanos P, Shou S, Lu L, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/pubmed/12543998" target="_blank" class="fwn">2003</a>) Dopamine D2 receptor binding, Drd2 expression and the number of dopamine neurons in the BXD recombinant inbred series: genetic relationships to alcohol and other drug associated phenotypes. Alcoholism: Clinical and Experimental Research 27:1-11 -<!-- <A href="http://www.alcoholism-cer.com/pt/re/alcoholism/abstract.00000374-200301000-00002.htm;jsessionid=Bd5vCAYkgweCpQQfVUDL32NyFP8vi8xbCG1JwnOLMdUZFaIgvgU5!1564676086!-949856032!9001!-1 -" target="_blank" class="fwn"><I> Full Text HTML and PDF Versions</I></A> ---> -<LI> -Hitzemann R, Malmanger B, Reed C, Lawler M, Hitzemann B, Coulombe S, Buck K, Rademacher B, Walter N, Polyakov Y, Sikela J, Williams RW, Flint J, Talbot C (<a href="http://www.ncbi.nlm.nih.gov/pubmed/14722723" target="_blank" class="fwn">2003</a>) A strategy for integration of QTL, gene expression, and sequence analyses. Mammalian Genome 14:733-747 -<LI> -Lionikas A, Blizard DA, Vandenbergh DJ, Glover MG, Stout JT, Vogler GP, McClearn GE, Larsson L (<a href="http://physiolgenomics.physiology.org/cgi/content/full/16/1/141" target="_blank" class="fwn">2003</a>) Genetic architecture of fast- and slow-twitch skeletal muscle weight in 200-day-old mice of the C57BL/6J and DBA/2J lineage. Physiological Genomics 16:141-152 -<LI> -Peirce J, Chesler EJ, Williams RW, Lu L (2003) Genetic architecture of the mouse hippocampus: identification of gene loci with regional effects. Genes, Brain and Behavior 2:238–252 -<A href="images/upload/Peirce_Lu_2003.pdf" target="_blank" class="fwn"><I> Full Text PDF Version</I></A> -<LI> -Rosen GD, La Porte NT, Diechtiareff B, Pung, CJ, Nissanov J, Gustafson C, Bertrand L, Gefen S, Fan Y, Tretiak OJ, Manly KF, Parks MR, Williams AG, Connolly MT, Capra JA, Williams RW (2003) Informatics center for mouse genomics: the dissection of complex traits of the nervous system. Neuroinformatics 1:327–342 -<A href="images/upload/Rosen_2003.pdf" target="_blank" class="fwn"><I> Full Text PDF Version</I></A> - -</OL> - -</Blockquote> - -<Blockquote class="fwn"><A NAME="Background" class="subtitle">Background references on inbred strains and other key resources</A> - -<Blockquote style="font-size: 14px;"> -Williams RW, Gu J, Qi S, Lu L (<a href="https://ncbi.nlm.nih.gov/pubmed/11737945" class="fwn" target="_blank">2001</a>) The genetic structure of recombinant inbred mice: high-resolution consensus maps for complex trait analysis. Genome Biology 2:46.1–46.18 <A href="http://genomebiology.com/content/2/11/RESEARCH0046" target="_blank" class="fwn"><I> Full Text HTML and PDF Version</I></A>. [General background on recombinant inbred strains.] -</Blockquote> - -<Blockquote style="font-size: 14px;"> -Peirce JL, Lu L, Gu J, Silver LM, Williams RW (<a href="http://www.biomedcentral.com/1471-2156/5/7" target="_blank" class="fwn">2004</a>) A new set of BXD recombinant inbred lines from advanced intercross populations in mice. BMC Genetics 5:7 <A href="http://www.genenetwork.org/pdf/Peirce_and_Lu_2004.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>. [Background on the expanded set of BXD strains.] -</Blockquote> - -<Blockquote style="font-size: 14px;"> -Williams RW, Bennett B, Lu L, Gu J, DeFries JC, Carosone-Link PJ, Rikke BA, Belknap JK, Johnson TE (<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15457343" target="_blank" class="fwn">2004</a>) Genetic structure of the LXS panel of recombinant inbred mouse strains: a powerful resource for complex trait analysis. Mammalian Genome 15:637-647 [Background on origins and the genetic structure large panel of LXS strains. Please cite this paper is you have used LXS data sets.] -</Blockquote> - -<Blockquote style="font-size: 14px;"> -Grubb SC, Churchill GA, Bogue MA (<a href="http://www.ncbi.nlm.nih.gov/pubmed/15130929" target="_blank" class="fwn">2004</a>) A collaborative database of inbred mouse strain characteristics. Bioinformatics 20:2857-2859 [One of two key papers on the Mouse Phenome Project and database at The Jackson Laboratory. The mouse diversity panel (MDP) is a superset of strains that are part of the Phenome Project. <a href="http://bioinformatics.oxfordjournals.org/cgi/reprint/20/16/2857" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>.] -</Blockquote> - -<Blockquote style="font-size: 14px;"> -Bogue MA, Grubb SC (<a href="http://www.ncbi.nlm.nih.gov/pubmed/15619963" target="_blank" class="fwn">2004</a>) The mouse phenome project. Genetica 122:71-74 [One of two key papers on the Mouse Phenome Project and database at The Jackson Laboratory. The mouse diversity panel (MDP) is a superset of strains that are part of the Phenome Project. Please contact Dr. Molly Bogue for information on the Phenome Project: mollyb@jax.org] -</Blockquote> - -<Blockquote style="font-size: 14px;"> -Frazer KA, Eskin E, Kang HM, Bogue MA, Hinds DA, Beilharz EJ, Gupta RV, Montgomery J, Morenzoni MM, Nilsen GB, Pethiyagoda CL, Stuve LL, Johnson FM, Daly MJ, Wade CM, Cox DR (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17660834" target="_blank" class="fwn">2007</a>) A sequence-based variation map of 8.27 million SNPs in inbred mouse strains. Nature 448, 1050-3 -</Blockquote> - - -<Blockquote style="font-size: 14px;"> -Loudet O, Chaillou S, Camilleri C, Bouchez D, Daniel-Vedele F (<A HREF="http://www.inra.fr/qtlat/BayxSha/Loudet2002.pdf" target="_blank" class="fwn">2002</A>) Bay-0 x Shahdara recombinant inbred line population: a powerful tool for the genetic dissection of complex traits in Arabidopsis. Theoretical and Applied Genetics 104:1173-1184 <A HREF="http://www.inra.fr/qtlat/BayxSha/Loudet2002.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> [Please cite this paper is you have used the BXS Arabidopsis data sets.] -</Blockquote> - -<Blockquote style="font-size: 14px;"> -Jirout M, Krenova D, Kren V, Breen L, Pravenec M, Schork NJ, Printz MP (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=12925886&query_hl=3" target="_blank" class="fwn">2003</A>) A new framework marker-based linkage map and SDPs for the rat HXB/BXH strain set. expression differences in mice diverently selected for methamphetamine sensitivity. Mammalian Genome 14: 537-546 -</Blockquote> - -<Blockquote style="font-size: 14px;"> -Shifman S, Bell JT, Copley BR, Taylor M, Williams RW, Mott R, Flint J (<A HREF="http://biology.plosjournals.org/perlserv/?request=get-document&doi=10.1371/journal.pbio.0040395" target="_blank" class="fwn">2006</A>) A high resolution single nucleotide polymorphism genetic map of the mouse genome. PLoS Biology 4:2227-2237 <A HREF="http://biology.plosjournals.org/archive/1545-7885/4/12/pdf/10.1371_journal.pbio.0040395-L.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> [A comprehensive analysis of recombination rates using several populations of mice, including most major GRPs.] -</Blockquote> - - -</Blockquote> -<Blockquote class="subtitle">Information about this HTML page:</P> </Blockquote> -<Blockquote style="font-size: 14px;"> -<Blockquote ><P><P>This text originally generated by RWW, April 2003. Updated by RWW, Oct 15, Dec 17, 2004; RWW Jan 19, 2005; EJC Mar 9; RWW Mar 29, Apr 15; RWW Jan 7, 2006, Jan 21, July 26, Aug 26, 2006s; May 2007; Feb 2008; March 19 2008 -</P></Blockquote> - - </Blockquote> - <P></P> - - - -{% endblock %} diff --git a/wqflask/wqflask/templates/references.html b/wqflask/wqflask/templates/references.html new file mode 100644 index 00000000..04e60361 --- /dev/null +++ b/wqflask/wqflask/templates/references.html @@ -0,0 +1,19 @@ +{% extends "base.html" %} +{% block title %}Reference{% endblock %} +{% block css %} +<link rel="stylesheet" type="text/css" href="/static/new/css/markdown.css" /> +{% endblock %} +{% block content %} +<div class="github-btn-container"> + <div class="github-btn"> + <a href="https://github.com/genenetwork/gn-docs/blob/master/general/references/references.md"> + Edit Text + <img src="/static/images/edit.png"> + </a> + </div> +</div> +<div id="markdown" class="container"> + {{ rendered_markdown|safe }} +</div> + +{% endblock %}
\ No newline at end of file diff --git a/wqflask/wqflask/templates/search_result_page.html b/wqflask/wqflask/templates/search_result_page.html index 6fe44d1a..765c4ab8 100644 --- a/wqflask/wqflask/templates/search_result_page.html +++ b/wqflask/wqflask/templates/search_result_page.html @@ -2,9 +2,12 @@ {% block title %}Search Results{% endblock %} {% block css %} <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" /> + <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='fontawesome/css/font-awesome.min.css') }}" /> <link rel="stylesheet" type="text/css" href="{{ url_for('js', filename='DataTablesExtensions/scroller/css/scroller.dataTables.min.css') }}"> <link rel="stylesheet" type="text/css" href="{{ url_for('js', filename='DataTablesExtensions/buttonStyles/css/buttons.dataTables.min.css') }}"> + <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css"> <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" /> + <link rel="stylesheet" type="text/css" href="static/new/css/trait_list.css" /> {% endblock %} {% block content %} <!-- Start of body --> @@ -40,10 +43,10 @@ {% elif word.search_term|length == 5 %} with <u>{{ word.key|upper }}</u> between <strong>{{ word.search_term[0] }}</strong> and <strong>{{ word.search_term[1] }}</strong> on chromosome <strong>{{ word.search_term[2] }}</strong> between <strong>{{ word.search_term[3] }}</strong> and <strong>{{ word.search_term[4] }}</strong> Mb{% if loop.last %}.{% else %} and {% endif %} {% endif %} - {% elif word.key|lower == "position" %} - with <u>target genes</u> on chromosome <strong>{% if word.search_term[0].split('chr')|length > 1 %}{{ word.search_term[0].split('chr')[1] }}{% elif word.search_term[0].split('CHR')|length > 1 %}{{ word.search_term[0].split('CHR')[1] }}{% else %}{{ word.search_term[0] }}{% endif %}</strong> between <strong>{{ word.search_term[1] }}</strong> and <strong>{{ word.search_term[2] }}</strong> Mb{% if loop.last %}.{% else %} and {% endif %} + {% elif word.key|lower == "position" or word.key|lower == "mb" %} + with <u>target genes</u> on chromosome <strong>{% if (word.search_term[0]|lower).split('chr')|length > 1 %}{{ (word.search_term[0]|lower).split('chr')[1] }}{% else %}{{ word.search_term[0] }}{% endif %}</strong> between <strong>{{ word.search_term[1] }}</strong> and <strong>{{ word.search_term[2] }}</strong> Mb{% if loop.last %}.{% else %} and {% endif %} {% else %} - {% if word.search_term[0] == "*" %} in the dataset.{% else %}{% if loop.first %}that match:<br>{% endif %}<b>"{{ word.search_term[0] }}"</b>{% if loop.last %}{% else %} and {% endif %}{% endif %} + {% if word.search_term[0] == "*" %} in the dataset.{% else %}{% if loop.first %}that match:<br>{% endif %}<b>{{ word.search_term[0] }}</b>{% if loop.last %}{% else %} and {% endif %}{% endif %} {% endif %} {% endfor %} {% endif %} @@ -72,42 +75,7 @@ {{ this_trait.name }}:{{ this_trait.dataset }}, {% endfor %}" > - - <button id="corr_matrix" class="btn btn-primary submit_special" data-url="/corr_matrix" title="Correlation Matrix" > - Correlations - </button> - - <button id="network_graph" class="btn btn-primary submit_special" data-url="/network_graph" title="Network Graph" > - Networks - </button> - - <button id="send_to_webgestalt" class="btn btn-primary submit_special" data-url="/webgestalt_page" title="WebGestalt" > - WebGestalt - </button> - - <button id="send_to_geneweaver" class="btn btn-primary submit_special" data-url="/geneweaver_page" title="GeneWeaver" > - GeneWeaver - </button> - - <button id="send_to_bnw" class="btn btn-primary submit_special" data-url="/bnw_page" title="Bayesian Network" > - BNW - </button> - - <button id="wgcna_setup" class="btn btn-primary submit_special" data-url="/wgcna_setup" title="WGCNA Analysis" > - WGCNA - </button> - - <button id="ctl_setup" class="btn btn-primary submit_special" data-url="/ctl_setup" title="CTL Analysis" > - CTL Maps - </button> - - <button id="heatmap" class="btn btn-primary submit_special" data-url="/heatmap" title="Heatmap" > - MultiMap - </button> - - <button id="comp_bar_chart" class="btn btn-primary submit_special" data-url="/comparison_bar_chart" title="Comparison Bar Chart" > - Comparison Bar Chart - </button> + {% include 'tool_buttons.html' %} </form> </div> @@ -126,6 +94,7 @@ {% endif %} <input type="hidden" name="export_data" id="export_data" value=""> <button class="btn btn-default" id="select_all" type="button"><span class="glyphicon glyphicon-ok"></span> Select</button> + <button class="btn btn-default" id="invert" type="button"><span class="glyphicon glyphicon-adjust"></span> Invert</button> <button class="btn btn-success" id="add" type="button" disabled><span class="glyphicon glyphicon-plus-sign"></span> Add</button> <button class="btn btn-default" id="export_traits">Download <span class="glyphicon glyphicon-download"></span></button> <input type="text" id="searchbox" class="form-control" style="width: 200px; display: inline;" placeholder="Search This Table For ..."> @@ -133,11 +102,27 @@ <button class="btn btn-default" id="deselect_all" type="button"><span class="glyphicon glyphicon-remove"></span> Deselect</button> </div> </form> - <br /> {% if dataset.type != 'Geno' %} - <br /> - <div style="margin-bottom: 5px;"> + <div class="show-hide-container"> <b>Show/Hide Columns:</b> + <br> + {% if dataset.type == 'ProbeSet' %} + <button class="toggle-vis" data-column="3">Symbol</button> + <button class="toggle-vis" data-column="4">Description</button> + <button class="toggle-vis" data-column="5">Location</button> + <button class="toggle-vis" data-column="6">Mean</button> + <button class="toggle-vis" data-column="7">Peak LOD</button> + <button class="toggle-vis" data-column="8">Peak Location</button> + <button class="toggle-vis" data-column="9">Effect Size</button> + {% elif dataset.type == 'Publish' %} + <button class="toggle-vis" data-column="3">Description</button> + <button class="toggle-vis" data-column="4">Mean</button> + <button class="toggle-vis" data-column="5">Authors</button> + <button class="toggle-vis" data-column="6">Year</button> + <button class="toggle-vis" data-column="7">Peak LOD</button> + <button class="toggle-vis" data-column="8">Peak Location</button> + <button class="toggle-vis" data-column="9">Effect Size</button> + {% endif %} </div> {% endif %} <div id="table_container" {% if dataset.type == 'ProbeSet' or dataset.type == 'Publish' %}style="min-width: 1500px;"{% endif %}> @@ -161,10 +146,11 @@ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/md5.min.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script> - <script language="javascript" type="text/javascript" src="/static/new/js_external/jszip.min.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='jszip/jszip.min.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/natural.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/buttons/js/dataTables.buttons.min.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/buttons/js/buttons.colVis.min.js') }}"></script> + <script language="javascript" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/js/all.min.js"></script> <script language="javascript" type="text/javascript" src="/static/new/javascript/search_results.js"></script> @@ -191,42 +177,21 @@ } }); - function change_buttons() { - buttons = ["#add", "#remove"]; - num_checked = $('.trait_checkbox:checked').length; - 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); - } - } - //}); - if ($(this).is(":checked")) { - if (!$(this).closest('tr').hasClass('selected')) { - $(this).closest('tr').addClass('selected') - } - } - else { - if ($(this).closest('tr').hasClass('selected')) { - $(this).closest('tr').removeClass('selected') - } - } - } - //ZS: Need to make sort by symbol, also need to make sure blank symbol fields at the bottom and symbols starting with numbers below letters - $('#trait_table').DataTable( { + trait_table = $('#trait_table').DataTable( { 'drawCallback': function( settings ) { - $('#trait_table tr').click(function(event) { - if (event.target.type !== 'checkbox' && event.target.tagName.toLowerCase() !== 'a') { - $(':checkbox', this).trigger('click'); - } - }); - $('.trait_checkbox:checkbox').on("change", change_buttons); + $('#trait_table 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")){ + $(this).removeClass("selected") + } else { + $(this).addClass("selected") + } + change_buttons() + }); }, 'createdRow': function ( row, data, index ) { $('td', row).eq(0).attr("style", "text-align: center; padding: 0px 10px 2px 10px;"); @@ -322,9 +287,9 @@ 'orderSequence': [ "desc", "asc"] }, { - 'title': "High P<a href=\"http://genenetwork.org//glossary.html#LRS\" target=\"_blank\" style=\"color: white;\"><sup style=\"font-size: small; color: #FF0000;\"> ?</sup></a>", + 'title': "Peak <a href=\"{{ url_for('glossary_blueprint.glossary') }}#LRS\" target=\"_blank\" style=\"color: white;\"> <i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i></a>LOD", 'type': "natural-minus-na", - 'data': "lrs_score", + 'data': "lod_score", 'width': "60px", 'orderSequence': [ "desc", "asc"] }, @@ -335,10 +300,10 @@ 'data': "lrs_location" }, { - 'title': "Effect Size<a href=\"http://genenetwork.org//glossary.html#A\" target=\"_blank\" style=\"color: white;\"><sup style=\"font-size: small; color: #FF0000;\"> ?</sup></a>", + 'title': "Effect Size<a href=\"{{ url_for('glossary_blueprint.glossary') }}#A\" target=\"_blank\" style=\"color: white;\"> <i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i></a>", 'type': "natural-minus-na", 'data': "additive", - 'width': "85px", + 'width': "90px", 'orderSequence': [ "desc", "asc"] }{% elif dataset.type == 'Publish' %}, { @@ -391,10 +356,10 @@ 'orderSequence': [ "desc", "asc"] }, { - 'title': "Max LRS<a href=\"http://genenetwork.org//glossary.html#LRS\" target=\"_blank\" style=\"color: white;\"><sup style=\"font-size: small; color: #FF0000;\"> ?</sup></a>", + 'title': "Peak <a href=\"{{ url_for('glossary_blueprint.glossary') }}#LRS\" target=\"_blank\" style=\"color: white;\"> <i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i></a>LOD", 'type': "natural-minus-na", - 'data': "lrs_score", - 'width': "80px", + 'data': "lod_score", + 'width': "60px", 'orderSequence': [ "desc", "asc"] }, { @@ -404,7 +369,7 @@ 'data': "lrs_location" }, { - 'title': "Effect Size<a href=\"http://genenetwork.org//glossary.html#A\" target=\"_blank\" style=\"color: white;\"><sup style=\"font-size: small; color: #FF0000;\"> ?</sup></a>", + 'title': "Effect Size<a href=\"{{ url_for('glossary_blueprint.glossary') }}#A\" target=\"_blank\" style=\"color: white;\"> <i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i></a>", 'type': "natural-minus-na", 'width': "120px", 'data': "additive", @@ -436,7 +401,7 @@ {% else %} 'sDom': "pitirp", {% endif %} - 'iDisplayLength': 100, + 'iDisplayLength': 500, 'deferRender': true, 'paging': true, 'orderClasses': true, @@ -447,9 +412,24 @@ return "Showing " + start + " to " + (start + this.api().data().length - 1) + " of " + total + " entries"; } } ); - - console.timeEnd("Creating table"); + $('.toggle-vis').on( 'click', function (e) { + e.preventDefault(); + + // Get the column API object + var column = trait_table.column( $(this).attr('data-column') ); + + // Toggle the visibility + column.visible( ! column.visible() ); + + if (column.visible()){ + $(this).removeClass("active"); + } else { + $(this).addClass("active"); + } + } ); + + $('#redraw').click(function() { var table = $('#trait_table').DataTable(); table.colReorder.reset() @@ -462,4 +442,4 @@ }); </script> -{% endblock %} +{% endblock %}
\ No newline at end of file diff --git a/wqflask/wqflask/templates/set_group_privileges.html b/wqflask/wqflask/templates/set_group_privileges.html index 98b0cc12..a0a53292 100644 --- a/wqflask/wqflask/templates/set_group_privileges.html +++ b/wqflask/wqflask/templates/set_group_privileges.html @@ -2,7 +2,7 @@ {% block title %}Set Group Privileges{% endblock %}
{% block css %}
<link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" />
- <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/extensions/buttons.dataTables.css">
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTablesExtensions/buttonStyles/css/buttons.dataTables.min.css') }}" />
<link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" />
{% endblock %}
{% block content %}
diff --git a/wqflask/wqflask/templates/show_trait.html b/wqflask/wqflask/templates/show_trait.html index 7b74a3f6..c881eb76 100644 --- a/wqflask/wqflask/templates/show_trait.html +++ b/wqflask/wqflask/templates/show_trait.html @@ -5,10 +5,9 @@ <link rel="stylesheet" type="text/css" href="/static/new/css/box_plot.css" /> <link rel="stylesheet" type="text/css" href="/static/new/css/prob_plot.css" /> <link rel="stylesheet" type="text/css" href="/static/new/css/scatter-matrix.css" /> - <link rel="stylesheet" type="text/css" href="/static/new/css/d3-tip.min.css" /> + <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='d3-tip/d3-tip.css') }}" /> <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" /> - <link rel="stylesheet" type="text/css" href="/static/new/packages/noUiSlider/nouislider.css" /> - <link rel="stylesheet" type="text/css" href="/static/new/packages/noUiSlider/nouislider.pips.css" /> + <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='nouislider/nouislider.min.css') }}" /> <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" /> {% endblock %} @@ -131,11 +130,11 @@ <script type="text/javascript" src="https://d3js.org/d3.v3.min.js"></script> <script type="text/javascript" src="/static/new/js_external/underscore-min.js"></script> - <script type="text/javascript" src="/static/new/js_external/underscore.string.min.js"></script> + <script type="text/javascript" src="{{ url_for('js', filename='underscore-string/underscore.string.min.js') }}"></script> <script type="text/javascript" src="{{ url_for('js', filename='d3-tip/d3-tip.js') }}"></script> - <script type="text/javascript" src="/static/new/js_external/jstat.min.js"></script> - <script type="text/javascript" src="/static/new/js_external/shapiro-wilk.js"></script> - <script type="text/javascript" src="/static/new/js_external/plotly-latest.min.js"></script> + <script type="text/javascript" src="{{ url_for('js', filename='js_alt/jstat.min.js') }}"></script> + <script type="text/javascript" src="{{ url_for('js', filename='shapiro-wilk/shapiro-wilk.js') }}"></script> + <script type="text/javascript" src="{{ url_for('js', filename='plotly/plotly.min.js') }}"></script> <script type="text/javascript" src="/static/new/javascript/colorbrewer.js"></script> <script type="text/javascript" src="/static/new/javascript/stats.js"></script> @@ -147,9 +146,8 @@ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/scientific.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/natural.js') }}"></script> - <script type="text/javascript" src="https://cdn.datatables.net/scroller/2.0.2/js/dataTables.scroller.min.js"></script> - <script language="javascript" type="text/javascript" src="/static/new/packages/noUiSlider/nouislider.js"></script> - + <script language="javascript" type="text/javascript" src="https://cdn.datatables.net/scroller/2.0.3/js/dataTables.scroller.min.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='nouislider/nouislider.js') }}"></script> <script type="text/javascript" src="/static/new/javascript/initialize_show_trait_tables.js"></script> <script type="text/javascript" src="/static/new/javascript/show_trait_mapping_tools.js"></script> <script type="text/javascript" src="/static/new/javascript/show_trait.js"></script> @@ -221,6 +219,33 @@ primary_table.search($(this).val()).draw(); } ); + $('.toggle-vis').on('click', function (e) { + e.preventDefault(); + + function toggle_column(column) { + //ZS: Toggle column visibility + column.visible( ! column.visible() ); + if (column.visible()){ + $(this).removeClass("active"); + } else { + $(this).addClass("active"); + } + } + + // Get the column API object + var target_cols = $(this).attr('data-column').split(",") + for (let i = 0; i < target_cols.length; i++){ + console.log("THE COL:", target_cols[i]) + var column = primary_table.column( target_cols[i] ); + toggle_column(column); + + {% if sample_groups|length != 1 %} + var column2 = other_table.column( target_cols[i] ); + toggle_column(column2); + {% endif %} + } + } ); + {% if sample_groups|length != 1 %} $('#other_searchbox').on( 'keyup', function () { other_table.search($(this).val()).draw(); diff --git a/wqflask/wqflask/templates/show_trait_calculate_correlations.html b/wqflask/wqflask/templates/show_trait_calculate_correlations.html index bc1d4091..eaa0c308 100644 --- a/wqflask/wqflask/templates/show_trait_calculate_correlations.html +++ b/wqflask/wqflask/templates/show_trait_calculate_correlations.html @@ -2,86 +2,85 @@ <div class="col-xs-3 correlation-options"> <div class="form-horizontal section-form-div"> - <div class="form-group"> - <label for="corr_type" class="col-xs-2 control-label">Method</label> - <div class="col-xs-3 controls"> - <select name="corr_type" class="form-control"> - <option value="sample">Sample r</option> - <option value="lit">Literature r</option> - <option value="tissue">Tissue r</option> - </select> - </div> - </div> + <div class="form-group"> + <label for="corr_type" class="col-xs-2 control-label">Method</label> + <div class="col-xs-3 controls"> + <select name="corr_type" class="form-control"> + <option value="sample">Sample r</option> + <option value="lit">Literature r</option> + <option value="tissue">Tissue r</option> + </select> + </div> + </div> - <div class="form-group"> - <label for="corr_dataset" class="col-xs-2 control-label">Database</label> - <div class="col-xs-10 controls"> - <select name="corr_dataset" class="form-control"> - {% for tissue in corr_tools.dataset_menu %} - {% if tissue.tissue %} - <optgroup label="{{ tissue.tissue }} ------"> - {% endif %} - {% for dataset in tissue.datasets %} - <option value="{{ dataset[1] }}" - {% if corr_tools.dataset_menu_selected == dataset[1] %} - selected - {% endif %}> - {{ dataset[0] }} - </option> - {% endfor %} - {% if tissue.tissue %} - </optgroup> - {% endif %} - {% endfor %} - </select> - </div> - </div> + <div class="form-group"> + <label for="corr_dataset" class="col-xs-2 control-label">Database</label> + <div class="col-xs-10 controls"> + <select name="corr_dataset" class="form-control"> + {% for tissue in corr_tools.dataset_menu %} + {% if tissue.tissue %} + <optgroup label="{{ tissue.tissue }} ------"> + {% endif %} + {% for dataset in tissue.datasets %} + <option data-type="{% if tissue.tissue %}mrna_assay{% elif dataset[1][-4:] == 'Geno' %}geno{% else %}pheno{% endif %}" value="{{ dataset[1] }}" + {% if corr_tools.dataset_menu_selected == dataset[1] %} + selected + {% endif %}> + {{ dataset[0] }} + </option> + {% endfor %} + {% if tissue.tissue %} + </optgroup> + {% endif %} + {% endfor %} + </select> + </div> + </div> - <div class="form-group"> - <label for="corr_return_results" class="col-xs-2 control-label">Return</label> - <div class="col-xs-4 controls"> - <select name="corr_return_results" class="form-control"> - {% for return_result in corr_tools.return_results_menu %} - <option value="{{ return_result }}" - {% if corr_tools.return_results_menu_selected == return_result %} - selected - {% endif %}> - Top {{ return_result }} - </option> - {% endfor %} - </select> - </div> - </div> + <div class="form-group"> + <label for="corr_return_results" class="col-xs-2 control-label">Limit to</label> + <div class="col-xs-4 controls"> + <select name="corr_return_results" class="form-control"> + {% for return_result in corr_tools.return_results_menu %} + <option value="{{ return_result }}" + {% if corr_tools.return_results_menu_selected == return_result %} + selected + {% endif %}> + Top {{ return_result }} + </option> + {% endfor %} + </select> + </div> + </div> - <div class="form-group"> - <label for="corr_samples_group" class="col-xs-2 control-label">Samples</label> - <div class="col-xs-4 controls"> - <select name="corr_samples_group" class="form-control"> - {% for group, pretty_group in sample_group_types.items() %} - <option value="{{ group }}">{{ pretty_group }}</option> - {% endfor %} - </select> - </div> - </div> + <div class="form-group"> + <label for="corr_samples_group" class="col-xs-2 control-label">Samples</label> + <div class="col-xs-4 controls"> + <select name="corr_samples_group" class="form-control"> + {% for group, pretty_group in sample_group_types.items() %} + <option value="{{ group }}">{{ pretty_group }}</option> + {% endfor %} + </select> + </div> + </div> - <div id="corr_sample_method" class="form-group"> - <label for="corr_sample_method" class="col-xs-2 control-label">Type</label> - <div class="col-xs-4 controls"> - <select name="corr_sample_method" class="form-control"> - <option value="pearson">Pearson</option> - <option value="spearman">Spearman Rank</option> - <option value="bicor">Biweight Midcorrelation</option> - </select> - </div> - </div> - {% if dataset.type != "Publish" %} - <div class="form-group"> - <label class="col-xs-2 control-label">Min Expr</label> - <div class="col-xs-4 controls"> - <input name="min_expr" value="" type="text" class="form-control min-expr-field"> - </div> - </div> - <div class="form-group"> + <div id="corr_sample_method" class="form-group"> + <label for="corr_sample_method" class="col-xs-2 control-label">Type</label> + <div class="col-xs-4 controls"> + <select name="corr_sample_method" class="form-control"> + <option value="pearson">Pearson</option> + <option value="spearman">Spearman Rank</option> + <option value="bicor">Biweight Midcorrelation</option> + </select> + </div> + </div> + <div id="min_expr_filter" class="form-group" style="display: {% if dataset.type != 'Geno' %}block{% else %}none{% endif %};"> + <label class="col-xs-2 control-label">Min Expr</label> + <div class="col-xs-4 controls"> + <input name="min_expr" value="" type="text" class="form-control min-expr-field"> + </div> + </div> + <div id="location_filter" class="form-group" style="display: {% if dataset.type != 'Publish' %}block{% else %}none{% endif %};"> <label class="col-xs-2 control-label">Location</label> <div class="col-xs-6 controls"> <span> @@ -91,7 +90,6 @@ <br> </div> </div> - {% endif %} <div class="form-group"> <label class="col-xs-2 control-label">Range</label> <div class="col-xs-5 controls"> @@ -120,7 +118,7 @@ is computed between trait data and any other traits in the sample database selected above. Use - <a href="http://www.genenetwork.org/glossary.html#Correlations">Spearman + <a href="{{ url_for('glossary_blueprint.glossary') }}#Correlations">Spearman Rank</a> when the sample size is small (<20) or when there are influential outliers. </span> diff --git a/wqflask/wqflask/templates/show_trait_edit_data.html b/wqflask/wqflask/templates/show_trait_edit_data.html index 2e730248..0d34bebc 100644 --- a/wqflask/wqflask/templates/show_trait_edit_data.html +++ b/wqflask/wqflask/templates/show_trait_edit_data.html @@ -1,6 +1,33 @@ <div> {% for sample_type in sample_groups %} <div class="sample-table-container"> + {% if loop.index == 1 and (sample_groups[0].se_exists or has_num_cases or sample_groups[0].attributes|length > 0) %} + <b>Show/Hide Columns:</b> + <br> + {% if sample_groups[0].se_exists %} + <button class="toggle-vis" data-column="4,5">SE</button> + {% if has_num_cases %} + <button class="toggle-vis" data-column="6">N</button> + {% set attr_start_pos = 7 %} + {% else %} + {% set attr_start_pos = 6 %} + {% endif %} + {% else %} + {% if has_num_cases %} + <button class="toggle-vis" data-column="4">N</button> + {% set attr_start_pos = 5 %} + {% else %} + {% set attr_start_pos = 4 %} + {% endif %} + {% endif %} + {% if sample_groups[0].attributes %} + {% for attribute in sample_groups[0].attributes %} + <button class="toggle-vis" data-column="{{ loop.index + attr_start_pos - 1 }}">{{ sample_groups[0].attributes[attribute].name }}</button> + {% endfor %} + {% endif %} + <br> + <br> + {% endif %} <div class="sample-table-search-container"> <input type="text" id="{{ sample_type.sample_group_type }}_searchbox" class="form-control sample-table-search" placeholder="Search This Table For ..."> </div> diff --git a/wqflask/wqflask/templates/show_trait_mapping_tools.html b/wqflask/wqflask/templates/show_trait_mapping_tools.html index eca436c6..c42fe4aa 100755 --- a/wqflask/wqflask/templates/show_trait_mapping_tools.html +++ b/wqflask/wqflask/templates/show_trait_mapping_tools.html @@ -74,8 +74,8 @@ No collections available. Please add traits to a collection to use them as covariates. {% else %} <div class="select-covar-div"> - <button type="button" id="select_covariates" class="btn btn-default select-covar-button">Select</button> - <button type="button" id="remove_covariates" class="btn btn-default select-covar-button">Remove</button> + <button type="button" class="btn btn-default select-covar-button select_covariates">Select</button> + <button type="button" class="btn btn-default select-covar-button remove_covariates">Remove</button> </div> <textarea rows="3" cols="50" readonly placeholder="No covariates selected" class="selected-covariates"></textarea> {% endif %} @@ -317,8 +317,8 @@ No collections available. Please add traits to a collection to use them as covariates. {% else %} <div class="select-covar-div"> - <button type="button" id="select_covariates" class="btn btn-default select-covar-button">Select</button> - <button type="button" id="remove_covariates" class="btn btn-default select-covar-button">Remove</button> + <button type="button" class="btn btn-default select-covar-button select_covariates">Select</button> + <button type="button" class="btn btn-default select-covar-button remove_covariates">Remove</button> </div> <textarea rows="3" cols="50" readonly placeholder="No covariates selected" class="selected-covariates"></textarea> {% endif %} diff --git a/wqflask/wqflask/templates/show_trait_statistics.html b/wqflask/wqflask/templates/show_trait_statistics.html index 4f347d4e..865959b1 100644 --- a/wqflask/wqflask/templates/show_trait_statistics.html +++ b/wqflask/wqflask/templates/show_trait_statistics.html @@ -21,9 +21,6 @@ <li> <a href="#violin_plot_tab" class="violin_plot_tab" data-toggle="tab">Violin Plot</a> </li> - <li> - <a href="#scatterplot_matrix" data-toggle="tab">Scatterplot Matrix</a> - </li> </ul> <div class="tab-content"> <div class="tab-pane active" id="stats_tab"> @@ -116,19 +113,6 @@ <div id="violin_plot"></div> </div> </div> - <div class="tab-pane" id="scatterplot_matrix"> - <div class="btn-group scatterplot-btn-div"> - <button type="button" class="btn btn-default" id="select_compare_trait"> - <i class="icon-th-large"></i> Select Traits - </button> - <button type="button" class="btn btn-default" id="clear_compare_trait"> - <i class="icon-trash"></i> Clear - </button> - </div> - <div id="scatterplot_container"> - <div id="comparison_scatterplot" class="qtlcharts"></div> - </div> - </div> </div> </div> <div id="collections_holder_wrapper" style="display:none;"> diff --git a/wqflask/wqflask/templates/show_trait_transform_and_filter.html b/wqflask/wqflask/templates/show_trait_transform_and_filter.html index 0418d972..b70ca590 100644 --- a/wqflask/wqflask/templates/show_trait_transform_and_filter.html +++ b/wqflask/wqflask/templates/show_trait_transform_and_filter.html @@ -4,7 +4,7 @@ <strong>Reset</strong> option as needed. </p> - <div id="blockMenuSpan" class="input-append block-by-index-div"> + <div id="blockMenuSpan" class="input-append block-div"> <label for="remove_samples_field">Block samples by index:</label> <input type="text" id="remove_samples_field" placeholder="Example: 3, 5-10, 12"> <select id="block_group" size="1"> @@ -21,21 +21,66 @@ Please check that your input is formatted correctly, e.g. <strong>3, 5-10, 12</strong> </div> {% if sample_groups[0].attributes %} - <div class="input-append block-by-attribute-div"> - <label for="exclude_menu">Block samples by group:</label> - <select id="exclude_menu" size=1> + <div class="input-append block-div-2"> + <label for="exclude_column">Block samples by group:</label> + <select id="exclude_column" size=1> {% for attribute in sample_groups[0].attributes %} - <option value="{{ sample_groups[0].attributes[attribute].name.replace(' ', '_') }}"> - {{ sample_groups[0].attributes[attribute].name }}</option> + {% if sample_groups[0].attributes[attribute].distinct_values|length <= 10 %} + <option value="{{ loop.index }}"> + {{ sample_groups[0].attributes[attribute].name }} + </option> + {% endif %} {% endfor %} </select> <select id="attribute_values" size=1> </select> - <input type="button" id="exclude_group" class="btn" value="Block"> + <select id="exclude_by_attr_group" size="1"> + <option value="primary"> + {{ sample_group_types['samples_primary'] }} + </option> + <option value="other"> + {{ sample_group_types['samples_other'] }} + </option> + </select> + <input type="button" id="exclude_by_attr" class="btn btn-danger" value="Block"> </div> {% endif %} + <div id="filterMenuSpan" class="input-append block-div-2"> + <label for="filter_samples_field">Filter samples by {% if not sample_groups[0].attributes %}value{% endif %} </label> + {% if sample_groups[0].attributes %} + <select id="filter_column"> + <option value="value">Value</option> + {% if js_data.se_exists %} + <option value="stderr">SE</option> + {% endif %} + {% for attribute in sample_groups[0].attributes %} + + <option value="{{ loop.index }}"> + {{ sample_groups[0].attributes[attribute].name }} + </option> + + {% endfor %} + </select> + {% endif %} + <select id="filter_logic" size="1"> + <option value="greater_than">></option> + <option value="less_than"><</option> + <option value="greater_or_equal">≥</option> + <option value="less_or_equal">≤</option> + </select> + <input type="text" id="filter_value" placeholder="Example: 3, 10, 15"> + <select id="filter_group" size="1"> + <option value="primary"> + {{ sample_group_types['samples_primary'] }} + </option> + <option value="other"> + {{ sample_group_types['samples_other'] }} + </option> + </select> + <input type="button" id="filter_by_value" class="btn btn-danger" value="Filter"> + </div> <div> - <input type="button" id="hide_no_value" class="btn btn-default" value="Hide No Value"> + <input data-active="false" type="button" id="hide_no_value" class="btn btn-default" value="Hide No Value"> <input type="button" id="block_outliers" class="btn btn-default" value="Block Outliers"> <input type="button" class="btn btn-success reset" value="Reset"> <span class="input-append"> diff --git a/wqflask/wqflask/templates/snp_browser.html b/wqflask/wqflask/templates/snp_browser.html index 129d03c2..b9aea570 100644 --- a/wqflask/wqflask/templates/snp_browser.html +++ b/wqflask/wqflask/templates/snp_browser.html @@ -219,7 +219,7 @@ {% block js %} <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.js') }}"></script> <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/natural.js') }}"></script> - <script language="javascript" type="text/javascript" src="/static/new/js_external/typeahead.bundle.js"></script> + <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='typeahead/typeahead.bundle.js') }}"></script> <script language="javascript" type="text/javascript" src="/static/new/javascript/typeahead_rn6.json"></script> diff --git a/wqflask/wqflask/templates/tool_buttons.html b/wqflask/wqflask/templates/tool_buttons.html new file mode 100644 index 00000000..5b2dbf3d --- /dev/null +++ b/wqflask/wqflask/templates/tool_buttons.html @@ -0,0 +1,35 @@ +<button id="corr_matrix" class="btn btn-primary submit_special" data-url="/corr_matrix" title="Correlation Matrix" >
+ Correlations
+</button>
+
+<button id="network_graph" class="btn btn-primary submit_special" data-url="/network_graph" title="Network Graph" >
+ Networks
+</button>
+
+<button id="send_to_webgestalt" class="btn btn-primary submit_special" data-url="/webgestalt_page" title="WebGestalt" >
+ WebGestalt
+</button>
+
+<button id="send_to_geneweaver" class="btn btn-primary submit_special" data-url="/geneweaver_page" title="GeneWeaver" >
+ GeneWeaver
+</button>
+
+<button id="send_to_bnw" class="btn btn-primary submit_special" data-url="/bnw_page" title="Bayesian network software for causal modeling and reasoning, with an intuitive interface to incorporate biological knowledge and a complete pipeline from data to model to prediction" >
+ BNW
+</button>
+
+<button id="wgcna_setup" class="btn btn-primary submit_special" data-url="/wgcna_setup" title="WGCNA Analysis" >
+ WGCNA
+</button>
+
+<button id="ctl_setup" class="btn btn-primary submit_special" data-url="/ctl_setup" title="CTL Analysis" >
+ CTL Maps
+</button>
+
+<button id="heatmap" class="btn btn-primary submit_special" data-url="/heatmap" title="Heatmap" >
+ MultiMap
+</button>
+
+<button id="comp_bar_chart" class="btn btn-primary submit_special" data-url="/comparison_bar_chart" title="Comparison Bar Chart" >
+ Comparison Bar Chart
+</button>
\ No newline at end of file diff --git a/wqflask/wqflask/user_login.py b/wqflask/wqflask/user_login.py index f25ebc32..bc608e84 100644 --- a/wqflask/wqflask/user_login.py +++ b/wqflask/wqflask/user_login.py @@ -25,7 +25,7 @@ from utility.logger import getLogger logger = getLogger(__name__) from smtplib import SMTP -from utility.tools import SMTP_CONNECT, SMTP_USERNAME, SMTP_PASSWORD, LOG_SQL_ALCHEMY +from utility.tools import SMTP_CONNECT, SMTP_USERNAME, SMTP_PASSWORD, LOG_SQL_ALCHEMY, GN2_BRANCH_URL THREE_DAYS = 60 * 60 * 24 * 3 @@ -239,7 +239,7 @@ def github_oauth2(): } result = requests.post("https://github.com/login/oauth/access_token", json=data) - result_dict = {arr[0]:arr[1] for arr in [tok.split("=") for tok in [token.encode("utf-8") for token in result.text.split("&")]]} + result_dict = {arr[0]:arr[1] for arr in [tok.split("=") for tok in result.text.split("&")]} github_user = get_github_user_details(result_dict["access_token"]) @@ -277,9 +277,11 @@ def orcid_oauth2(): data = { "client_id": ORCID_CLIENT_ID, "client_secret": ORCID_CLIENT_SECRET, - "grant_type": "authorization_code", + "grant_type": "authorization_code", + "redirect_uri": GN2_BRANCH_URL + "n/login/orcid_oauth2", "code": code } + result = requests.post(ORCID_TOKEN_URL, data=data) result_dict = json.loads(result.text.encode("utf-8")) diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py index 2df7113e..632e0d2d 100644 --- a/wqflask/wqflask/views.py +++ b/wqflask/wqflask/views.py @@ -1,6 +1,4 @@ -# -*- coding: utf-8 -*- -# -# Main routing table for GN2 +"""Main routing table for GN2""" import traceback # for error page import os # for error gifs @@ -332,28 +330,13 @@ def news(): doc = Docs("news", request.args) return render_template("docs.html", **doc.__dict__) -@app.route("/references") -def references(): - doc = Docs("references", request.args) - return render_template("docs.html", **doc.__dict__) - #return render_template("reference.html") @app.route("/intro") def intro(): doc = Docs("intro", request.args) return render_template("docs.html", **doc.__dict__) -@app.route("/policies") -def policies(): - doc = Docs("policies", request.args) - #return render_template("policies.html") - return render_template("docs.html", **doc.__dict__) -@app.route("/links") -def links(): - #doc = Docs("links", request.args) - #return render_template("docs.html", **doc.__dict__) - return render_template("links.html") @app.route("/tutorials") def tutorials(): @@ -367,12 +350,6 @@ def credits(): #return render_template("docs.html", **doc.__dict__) return render_template("credits.html") -@app.route("/environments") -def environments(): - doc = Docs("environments", request.args) - return render_template("docs.html", **doc.__dict__) - #return render_template("environments.html", **doc.__dict__) - @app.route("/update_text", methods=('POST',)) def update_page(): update_text(request.form) @@ -749,6 +726,8 @@ def mapping_results_page(): 'maf', 'use_loco', 'manhattan_plot', + 'color_scheme', + 'manhattan_single_color', 'control_marker', 'control_marker_db', 'do_control', @@ -849,6 +828,17 @@ def export_mapping_results(): return response +@app.route("/export_corr_matrix", methods = ('POST',)) +def export_corr_matrix(): + file_path = request.form.get("export_filepath") + file_name = request.form.get("export_filename") + results_csv = open(file_path, "r").read() + response = Response(results_csv, + mimetype='text/csv', + headers={"Content-Disposition":"attachment;filename=" + file_name + ".csv"}) + + return response + @app.route("/export", methods = ('POST',)) def export(): logger.info("request.form:", request.form) |