|
|
|
import streamlit as st |
|
|
|
from utils import fetch_resource, get_degs, ui_model_selection |
|
|
|
st.set_page_config(layout="wide") |
|
|
|
st.markdown(""" |
|
# Differentially expressed genes |
|
|
|
Genes below have been determined using `sc.tl.rank_genes_groups` where `t-test_overestim_var` |
|
is the default method. |
|
""") |
|
|
|
ui_model_selection() |
|
|
|
filter_flag = [] |
|
|
|
if st.session_state["SPECIE"] and st.session_state["VERSION"]: |
|
adata = fetch_resource(st.session_state["SPECIE"], st.session_state["VERSION"]) |
|
|
|
degs_by = st.sidebar.selectbox( |
|
"**Select by**", |
|
[x for x in adata.uns_keys() if "degs" in x], |
|
index=None, |
|
placeholder="Differentially expressed genes by", |
|
) |
|
|
|
if degs_by: |
|
degs = get_degs(adata, degs_by) |
|
|
|
group = st.sidebar.multiselect( |
|
"**Cell type**", degs["group"].unique(), placeholder="Select group ..." |
|
) |
|
|
|
genes = st.sidebar.multiselect( |
|
"**Gene**", sorted(degs["names"].unique()), placeholder="Select genes ..." |
|
) |
|
|
|
foldchange = st.sidebar.number_input( |
|
"**Log2 fold-change**", |
|
value=1, |
|
) |
|
|
|
pval_adj = st.sidebar.number_input( |
|
"**Adjusted p-value**", |
|
value=0.05, |
|
) |
|
|
|
if group: |
|
filter_flag.append("group == @group") |
|
|
|
if genes: |
|
filter_flag.append("@genes in names") |
|
|
|
if foldchange: |
|
filter_flag.append( |
|
"logfoldchanges > @foldchange" |
|
if foldchange > 0 |
|
else "logfoldchanges < @foldchange" |
|
) |
|
|
|
if pval_adj: |
|
filter_flag.append("pvals_adj < @pval_adj") |
|
|
|
subset = degs.query(" & ".join(filter_flag)) if filter_flag else degs |
|
st.dataframe(subset, use_container_width=True, height=650) |
|
|