--- a +++ b/src/dash/apps/clustergrammer.py @@ -0,0 +1,190 @@ + +import dash +import dash_table +import dash_bootstrap_components as dbc +import dash_core_components as dcc +import dash_html_components as html +from dash.dependencies import Input, Output +import datetime +import pandas as pd + +from data import get_omics_data, get_biomolecule_names, get_combined_data, get_p_values, get_volcano_data +from plot import volcano_plot +from nav import navbar + +# importing app through index page +from app import app + +print() +print(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")) +print("Loading data for heatmap...") +print() + +# load metabolomics data matrix +print("Loading metabolomics data...") +from app import metabolomics_df, metabolomics_quant_range +print("Metabolomics data shape: {}".format(metabolomics_df.shape)) +print("Loading lipidomics data...") +from app import lipidomics_df, lipidomics_quant_range +print("Lipidomics data shape: {}".format(lipidomics_df.shape)) +print("Loading proteomics data...") +from app import proteomics_df, proteomics_quant_range +print("Proteomics data shape: {}".format(proteomics_df.shape)) +print("Loading transcriptomics data...") +from app import transcriptomics_df, transcriptomics_quant_range +print("Transcriptomics data shape: {}".format(transcriptomics_df.shape)) + +available_datasets = ['Proteins', 'Lipids', 'Metabolites', 'Transcripts'] + +# define dataset dictionaries +# define dataset dictionaries +from app import dataset_dict, df_dict, quant_value_range_dict +from app import metabolomics_biomolecule_names_dict +from app import lipidomics_biomolecule_names_dict +from app import proteomics_biomolecule_names_dict +from app import transcriptomics_biomolecule_names_dict + +global_names_dict = { + "proteomics":proteomics_biomolecule_names_dict, + "lipidomics":lipidomics_biomolecule_names_dict, + "metabolomics":metabolomics_biomolecule_names_dict, + "transcriptomics":transcriptomics_biomolecule_names_dict, + "combined":{**proteomics_biomolecule_names_dict, + **lipidomics_biomolecule_names_dict, + **metabolomics_biomolecule_names_dict, + **transcriptomics_biomolecule_names_dict} +} + + + +control_panel = dbc.Card( + [ + dbc.CardHeader("CONTROL PANEL", + style={"background-color":"#5bc0de", + "font-weight":"bold", + "font-size":"large"}), + dbc.CardBody( + [html.P("Select Dataset", className="card-title", style={"font-weight":"bold"}), + dcc.Dropdown( + id='dataset-hm', + options=[{'label': i, 'value': i} for i in available_datasets], + # only passing in quant value columns + value=available_datasets[0]), + + ]) + ]) + +first_card = html.Iframe( + id="cgrammer-iframe", + src="https://amp.pharm.mssm.edu/clustergrammer/viz/5eed203e8ec9bb2d622075e9/proteomics.txt", + height='600', + width='900', + style={"border-color":"transparent"} + ) + +#app.layout = dbc.Container([ +layout = dbc.Container([ + + navbar, + + html.Hr(), + + dbc.Row(dbc.Col(html.H1("COVID-19 Multi-Omics Data Dashboard"), width={"size": 6, "offset": 3})), + + html.Hr(), + + dbc.Row( + [dbc.Col( + dbc.Nav( + [ + html.H3("TYPE OF ANALYSIS", style={"font-weight":"bold", "color":"black"}), + + dbc.NavItem(dbc.NavLink(html.Span("PCA"), + disabled=False, + href="pca", + style={"color":"grey"})), + + dbc.NavItem(dbc.NavLink( + + html.Span( + "Linear Regression", + id="tooltip-lr", + style={"cursor": "pointer", "color":"grey"}, + ),disabled=False, href="linear_regression")), + + dbc.NavItem(dbc.NavLink( + + html.Span( + "Differential Expression", + id="tooltip-lr", + style={"cursor": "pointer", "color":"grey"}, + ),disabled=False, href="differential_expression")), + + dbc.NavItem(dbc.NavLink("Clustergrammer", active=True, href="clustergrammer", style={"background-color":"grey"})), + + html.Hr(), + control_panel + ], + vertical="md", + pills=True + ), md=2, className="mb-3"), + + dbc.Col(first_card, md=7), + ], + + className="mb-3"), + +], fluid=True, style={"height": "100vh"}) + + +@app.callback( + Output('cgrammer-iframe', 'src'), + [Input('dataset-hm', 'value')]) +def update_heatmap(dataset): + + url_dict = { + "Proteins": "https://amp.pharm.mssm.edu/clustergrammer/viz/5eed203e8ec9bb2d622075e9/proteomics.txt", + "Lipids": "https://amp.pharm.mssm.edu/clustergrammer/viz/5f061a208ec9bb6fb2f14a1d/lipidomics.txt", + "Metabolites": "https://amp.pharm.mssm.edu/clustergrammer/viz/5f061c7f8ec9bb6fb2f14a37/metabolomics.txt", + "Transcripts": "https://amp.pharm.mssm.edu/clustergrammer/viz/5f061cfc8ec9bb6fb2f14a45/transcriptomics.txt" + + } + + url = url_dict[dataset] + + return url + +if __name__ == '__main__': + + import dash_bootstrap_components as dbc + external_stylesheets=[dbc.themes.BOOTSTRAP] + + app = dash.Dash( + __name__, + external_stylesheets=external_stylesheets) + app.title = 'Clustergrammer' + + app.layout = layout + + @app.callback( + Output('cgrammer-iframe', 'src'), + [Input('dataset-hm', 'value')]) + def update_heatmap(dataset): + + url_dict = { + "Proteins": "https://amp.pharm.mssm.edu/clustergrammer/viz/5eed203e8ec9bb2d622075e9/proteomics.txt", + "Lipids": "https://amp.pharm.mssm.edu/clustergrammer/viz/5f061a208ec9bb6fb2f14a1d/lipidomics.txt", + "Metabolites": "https://amp.pharm.mssm.edu/clustergrammer/viz/5f061c7f8ec9bb6fb2f14a37/metabolomics.txt", + "Transcripts": "https://amp.pharm.mssm.edu/clustergrammer/viz/5f061cfc8ec9bb6fb2f14a45/transcriptomics.txt" + + } + + url = url_dict[dataset] + + return url + + app.run_server( + debug=True, + host='0.0.0.0', + #port='8080' + )