Skip to content

Commit

Permalink
fix: Allow forward-only and normal in same dashboard
Browse files Browse the repository at this point in the history
  • Loading branch information
ChristianMichelsen committed Oct 17, 2022
1 parent ff737b7 commit 4acbe05
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 32 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
data/
data*/
real-data*/
raw_data/
!raw_data/alignment.bam
!raw_data/names-mdmg.dmp
Expand Down
23 changes: 12 additions & 11 deletions src/metaDMG/fit/frequentist.py
Original file line number Diff line number Diff line change
Expand Up @@ -696,16 +696,17 @@ def make_fits(

for var in vars_to_keep:
fit_result[f"reverse_{var}"] = np.nan
fit_result[f"reverse_valid"] = False

fit_result["asymmetry"] = np.nan
fit_result["LR_All"] = compute_LR_All(fit_forward)
fit_result["LR_ForRev"] = np.nan
fit_result["LR_ForRev_All"] = np.nan
# fit_result["LR_All"] = compute_LR_All(fit_forward)
# fit_result["LR_ForRev"] = np.nan
# fit_result["LR_ForRev_All"] = np.nan

fit_result["chi2_all"] = fit_forward.chi2
fit_result["chi2_forward"] = fit_forward.chi2
fit_result["chi2_forward"] = fit_result["chi2_all"]
fit_result["chi2_reverse"] = np.nan
fit_result["chi2_ForRev"] = np.nan
# fit_result["chi2_ForRev"] = np.nan
return fit_forward

for var in vars_to_keep:
Expand All @@ -721,16 +722,16 @@ def make_fits(
for var in vars_to_keep:
fit_result[f"reverse_{var}"] = getattr(fit_reverse, var)

fit_result["LR_All"] = compute_LR_All(fit_all)
fit_result["LR_ForRev"] = compute_LR_ForRev(fit_forward, fit_reverse)
fit_result["LR_ForRev_All"] = compute_LR_ForRev_All(
fit_all, fit_forward, fit_reverse
)
# fit_result["LR_All"] = compute_LR_All(fit_all)
# fit_result["LR_ForRev"] = compute_LR_ForRev(fit_forward, fit_reverse)
# fit_result["LR_ForRev_All"] = compute_LR_ForRev_All(
# fit_all, fit_forward, fit_reverse
# )

fit_result["chi2_all"] = fit_all.chi2
fit_result["chi2_forward"] = fit_forward.chi2
fit_result["chi2_reverse"] = fit_reverse.chi2
fit_result["chi2_ForRev"] = fit_forward.chi2 + fit_reverse.chi2
# fit_result["chi2_ForRev"] = fit_forward.chi2 + fit_reverse.chi2

return fit_all, fit_forward, fit_reverse

Expand Down
4 changes: 3 additions & 1 deletion src/metaDMG/viz/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import dash
import dash_bootstrap_components as dbc
import diskcache
import numpy as np
import pandas as pd
from dash import ALL, MATCH, Input, Output, State, dcc, html
from dash.exceptions import PreventUpdate
Expand Down Expand Up @@ -244,6 +245,7 @@ def update_sidebar_right_plot_reverse(click_data):
)
def update_sidebar_right_datatable_results(click_data):
if click_data:

sample, tax_id = viz_utils.get_sample_tax_id_from_click_data(
viz_results, click_data
)
Expand All @@ -255,7 +257,7 @@ def update_sidebar_right_datatable_results(click_data):
ds = df_fit.iloc[0]

forward_only = []
if viz_results.forward_only:
if ds["forward_only"]:
forward_only = ["Forward only!", html.Br(), html.Br()]

bayesian_list = []
Expand Down
2 changes: 1 addition & 1 deletion src/metaDMG/viz/figures.py
Original file line number Diff line number Diff line change
Expand Up @@ -557,7 +557,7 @@ def plt_errorplot(viz_results, group, fit=None):
label="Forward",
)

if not viz_results.forward_only:
if sum(mask_reverse) > 0:
ax.plot(
group.loc[mask_reverse, ["|x|"]].values,
group.loc[mask_reverse, ["f"]].values,
Expand Down
62 changes: 43 additions & 19 deletions src/metaDMG/viz/results.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@


def sort_dataframe(df):

samples_ordered = list(
df.groupby("sample")
.sum("N_reads")
Expand All @@ -24,11 +25,14 @@ def sort_dataframe(df):
# the dataframe numerically
df["sample_rank"] = df["sample"].map(sorterIndex)

df = df.sort_values(
["sample_rank", "tax_id"],
ascending=[True, True],
inplace=False,
).drop(columns="sample_rank")
df = (
df.sort_values(
["sample_rank", "N_reads"],
ascending=[True, False],
)
.drop(columns="sample_rank")
.reset_index(drop=True)
)

return df

Expand Down Expand Up @@ -130,7 +134,7 @@ def add_MAP_measures(df):
df["D_max_CI_high"] = df["D_max"] + df["D_max_std"]


def add_bayesia_measures(df):
def add_bayesian_measures(df):
df["Bayesian_significance"] = df["Bayesian_D_max"] / df["Bayesian_D_max_std"]
df["Bayesian_rho_Ac_abs"] = np.abs(df["Bayesian_rho_Ac"])

Expand All @@ -152,7 +156,11 @@ def __init__(self, results_dir):
self._set_hover_info()

def _load_parquet_file(self, results_dir):
df = pd.read_parquet(results_dir)
# df = pd.read_parquet(results_dir)
dfs = []
for path in results_dir.glob("*.parquet"):
dfs.append(pd.read_parquet(path))
df = pd.concat(dfs, ignore_index=True)
return correct_for_non_LCA(df)

def _load_df_results(self):
Expand All @@ -169,7 +177,7 @@ def _load_df_results(self):
not any(df["Bayesian_D_max"].isna())
):
self.Bayesian = True
add_bayesia_measures(df)
add_bayesian_measures(df)

log_columns = [
"N_reads",
Expand All @@ -184,10 +192,15 @@ def _load_df_results(self):
log_column = "log_" + column
df.loc[:, log_column] = np.log10(1 + df[column])

if np.isnan(df["asymmetry"]).all() and not "forward_A" in df.columns:
self.forward_only = True
if np.isnan(df["asymmetry"]).any():
self.contains_forward_only = True
df["forward_only"] = df["k-1"].isna()
df["forward_only_str"] = np.where(df["forward_only"], "Forward only!", "")

else:
self.forward_only = False
self.contains_forward_only = False
df["forward_only"] = False
df["forward_only_str"] = ""

self.df = df

Expand Down Expand Up @@ -376,11 +389,14 @@ def _set_hover_info(self):
" corr. Ac: %{customdata[_XXX_]:6.3f} <br><br>"
)

if self.forward_only:
if self.contains_forward_only:
index = self.custom_data_columns.index("D_max")
self.custom_data_columns[index:index] = ["forward_only_str"]

index = self.hovertemplate.find("<b>MAP results</b>: <br>")
self.hovertemplate = (
self.hovertemplate[:index]
+ "<b>Forward only! </b><br><br>"
+ "<b>%{customdata[_XXX_]}</b><br><br>"
+ self.hovertemplate[index:]
)

Expand Down Expand Up @@ -430,7 +446,7 @@ def parse_click_data(self, click_data, column):
def get_single_count_group(self, sample, tax_id, forward_reverse=""):
query = f"sample == '{sample}' & tax_id == '{tax_id}'"
group_wide = self.df.query(query)
group = wide_to_long_df(group_wide)
group = wide_to_long_df(group_wide).dropna(axis="rows")

if forward_reverse.lower() == "forward":
return group.query(f"direction=='Forward'")
Expand All @@ -445,13 +461,21 @@ def get_single_fit_prediction(self, sample, tax_id, forward_reverse=""):
if len(ds) != 1:
raise AssertionError(f"Something wrong here, got: {ds}")

if self.forward_only:
if forward_reverse.lower() == "reverse":
group = self.get_single_count_group(sample, tax_id, forward_reverse)

if len(group) == 0:
if ds.iloc[0]["forward_only"] and forward_reverse.lower() == "reverse":
return "FORWARD ONLY"
else:
forward_reverse = ""

group = self.get_single_count_group(sample, tax_id, forward_reverse)
raise AssertionError(
f"Something wrong here, got: {group=}, {tax_id=}, {forward_reverse=}"
)

# if self.contains_forward_only:
# if forward_reverse.lower() == "reverse":
# return "FORWARD ONLY"
# else:
# forward_reverse = ""

if forward_reverse.lower() == "forward":
prefix = "forward_"
Expand Down

0 comments on commit 4acbe05

Please sign in to comment.