From 1423c594379266433760fbf8c97c9cbc9e4f4570 Mon Sep 17 00:00:00 2001 From: David-Degnan Date: Thu, 23 Oct 2025 12:30:23 -0700 Subject: [PATCH] Saving dockerfile --- zfBmd/Dockerfile | 14 ++++++-- zfBmd/main.py | 4 +-- zfBmd/support_functions.py | 15 +++++--- .../build_trelliscope_display.R | 34 ++++++++++--------- 4 files changed, 42 insertions(+), 25 deletions(-) diff --git a/zfBmd/Dockerfile b/zfBmd/Dockerfile index 41bb519..c2ebd64 100644 --- a/zfBmd/Dockerfile +++ b/zfBmd/Dockerfile @@ -1,3 +1,13 @@ +# Build command: docker build -t zfbmd . +# +# Morphology example using a local folder called tmp and data in the container: +# docker run -v ./tmp:/zfBmd/tmp zfbmd --morpho test_files/test_morphology.csv --output /zfBmd/tmp/ +# +# Both morphology and LPR example using a local folder called tmp and data in the container: +# docker run -v ./tmp:/zfBmd/tmp zfbmd --morpho test_files/test_morphology.csv --lpr test_files/test_behavioral.csv --output /zfBmd/tmp/ +# +# Both example using local data. It must be moved to the tmp folder to work +# docker run -v ./tmp:/zfBmd/tmp zfbmd --morpho /zfBmd/tmp/test_morphology.csv --lpr /zfBmd/tmp/test_behavioral.csv --output /zfBmd/tmp/ FROM python:3.10 RUN apt-get update && apt-get install -y net-tools \ @@ -13,6 +23,6 @@ COPY ./main.py zfBmd/main.py COPY ./support_functions.py zfBmd/support_functions.py COPY ./test_files/* zfBmd/test_files/ WORKDIR zfBmd +RUN mkdir ./tmp -ENTRYPOINT ["python3", "main.py"] -VOLUME ["/tmp"] +ENTRYPOINT ["python3", "-u", "main.py"] diff --git a/zfBmd/main.py b/zfBmd/main.py index 7a79e5a..3e2f492 100644 --- a/zfBmd/main.py +++ b/zfBmd/main.py @@ -133,12 +133,12 @@ def main(): if args.morpho is not None: # Output files - write_outputs(BC, "BC") + write_outputs(BC, "BC", args.output) if args.lpr is not None: # Output files - write_outputs(LPR, "LPR") + write_outputs(LPR, "LPR", args.output) if __name__ == "__main__": main() diff --git a/zfBmd/support_functions.py b/zfBmd/support_functions.py index 9deb741..ec48453 100644 --- a/zfBmd/support_functions.py +++ b/zfBmd/support_functions.py @@ -166,18 +166,23 @@ def run_filters(obj): ################### # Write all output files: BMDs, Dose, Fits, and Report markdown -def write_outputs(obj, tag): +def write_outputs(obj, tag, outname): + + if outname is None: + out = "." + else: + out = str(outname) # Output bmds: Chemical_ID, End_Point, Model, BMD10, BMDL, BMD50, AUC, Min_Dose, Max_Dose, AUC_Norm, # DataQC_Flag, BMD_Analysis_Flag, BMD10_Flag, BMD50_Flag, ids - obj.output_benchmark_dose("./new_BMDS" + "_" + tag + ".csv") + obj.output_benchmark_dose(out + "/new_BMDS" + "_" + tag + ".csv") # Output dose: Chemical_ID, End_Point, Dose, num.affected, num.nonna, ids, CI_Lo, CI_Hi - obj.output_dose_table("./new_Dose" + "_" + tag + ".csv") + obj.output_dose_table(out + "/new_Dose" + "_" + tag + ".csv") # Output fits: Chemical_ID, End_Point, X_vals, Y_vals - obj.output_fits_table("./new_Fits" + "_" + tag + ".csv") + obj.output_fits_table(out + "/new_Fits" + "_" + tag + ".csv") # Output reports - obj.report("./new_report" + "_" + tag + "/") + obj.report(out + "/new_report" + "_" + tag + "/") \ No newline at end of file diff --git a/zfBmd/support_scripts/build_trelliscope_display.R b/zfBmd/support_scripts/build_trelliscope_display.R index 3909dd4..8c2a895 100644 --- a/zfBmd/support_scripts/build_trelliscope_display.R +++ b/zfBmd/support_scripts/build_trelliscope_display.R @@ -2,32 +2,34 @@ library(trelliscope) library(tidyverse) library(data.table) -setwd("~/Git_Repos/srpAnalytics/zfBmd/") +setwd("~/Git_Repos/srpAnalytics/zfBmd/outputs/") # Load datasets -bmds <- rbind(fread("new_BMDS_LPR.csv")) %>% - rename(ids = bmdrc.Endpoint.ID) -dose <- rbind(fread("new_Dose_LPR.csv")) %>% - mutate(Response = num.affected/num.nonna) -fits <- rbind(fread("new_Fits_LPR.csv")) - -# Add an ids column to fits -fits$ids <- paste(fits$Chemical_ID, fits$End_Point) +bmds <- rbind(fread("20241204_BMDS_BC.csv"), + fread("20241204_BMDS_LPR.csv")) %>% + filter(Model != "") +dose <- rbind(fread("20241204_Dose_BC.csv"), + fread("20241204_Dose_LPR.csv")) %>% + filter(bmdrc.Endpoint.ID %in% bmds$bmdrc.Endpoint.ID) %>% + mutate(Response = num.affected / num.nonna) +fits <- rbind(fread("20241204_Fits_BC.csv"), + fread("20241204_Fits_LPR.csv")) %>% + filter(bmdrc.Endpoint.ID %in% bmds$bmdrc.Endpoint.ID) # Make the curve plot -curve_plot <- function(ids) { +curve_plot <- function(bmdrc.Endpoint.ID) { ggplot() + - geom_line(data = dplyr::filter(fits, ids == {{ids}}), mapping = aes(x = X_vals, y = Y_vals)) + - geom_point(data = dplyr::filter(dose, ids == {{ids}}), mapping = aes(x = Dose, y = Response)) + - geom_segment(data = dplyr::filter(dose, ids == {{ids}}), + geom_line(data = dplyr::filter(fits, bmdrc.Endpoint.ID == {{bmdrc.Endpoint.ID}}), mapping = aes(x = X_vals, y = Y_vals)) + + geom_point(data = dplyr::filter(dose, bmdrc.Endpoint.ID == {{bmdrc.Endpoint.ID}}), mapping = aes(x = Dose, y = Response)) + + geom_segment(data = dplyr::filter(dose, bmdrc.Endpoint.ID == {{bmdrc.Endpoint.ID}}), mapping = aes(x = Dose, xend = Dose, y = CI_Lo, yend = CI_Hi)) + - geom_point(data = dplyr::filter(bmds, ids == {{ids}}), mapping = aes(x = BMD10, y = 0.1), color = "red") + - geom_point(data = dplyr::filter(bmds, ids == {{ids}}), mapping = aes(x = BMDL, y = 0.1), color = "blue") + + geom_point(data = dplyr::filter(bmds, bmdrc.Endpoint.ID == {{bmdrc.Endpoint.ID}}), mapping = aes(x = BMD10, y = 0.1), color = "red") + + geom_point(data = dplyr::filter(bmds, bmdrc.Endpoint.ID == {{bmdrc.Endpoint.ID}}), mapping = aes(x = BMDL, y = 0.1), color = "blue") + xlab("Concentration (uM)") + ylab("Response (Proportion Affected)") + ylim(c(0, 1)) + - ggtitle(ids) + + ggtitle(bmdrc.Endpoint.ID) + theme_bw() + theme(plot.title = element_text(hjust = 0.5))