The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

diffHTS

diffHTS provides reusable methods for large-scale, two-condition high-throughput drug screening (HTS). It compares drug sensitivity between any two experimental conditions — for example irradiated versus non-irradiated cells, cancer versus normal cell lines, or treated versus untreated samples — across many plates and experiments, in a documented and tested toolkit.

Installation

Install from a local source checkout:

# install.packages("remotes")
remotes::install_local("diffHTS")

# or, from the built source tarball
install.packages("diffHTS_0.1.0.tar.gz", repos = NULL, type = "source")

Dose-response fitting is implemented in base R, so no external fitting package is needed. Some visualisation and I/O features use packages that are only suggested: the Bioconductor packages ComplexHeatmap and circlize (heatmaps), ggrepel (labelled scatter plots), readxl (Excel import) and rmarkdown (HTML reports).

Standard pipeline

diffHTS organises a complete HTS analysis into seven modules that take raw plate readouts all the way to an annotated, ranked hit list. It supports both single-concentration primary screens and gradient secondary (dose-response) confirmation screens. Each module pairs business functions with matching visualisation functions.

Module Business functions Visualisation
1. Import & pre-QC read_plate_layout(), apply_plate_layout(), read_hts_plate(), summarize_plate_setup(), baseline_subtract(), detect_outlier_wells(), calc_z_prime(), calc_robust_z_prime(), calc_z_factor(), calc_ssmd(), calc_sb_ratio(), calc_sn_ratio(), calc_cv(), calc_plate_qc(), calc_well_zscore(), filter_valid_plates() plot_plate_heatmap_raw(), plot_plate_qc()
2. Normalisation norm_by_control(), merge_plate_data() plot_plate_heatmap_inhibition(), plot_inhibition_hist()
3. Replicate consistency calc_replicate_cv(), calc_replicate_correlation(), filter_bad_replicate() plot_replicate_scatter(), plot_cv_distribution()
4. Primary hit selection select_primary_hit(), select_sigma_hits(), summarize_primary_hit(), summarize_sigma_hits() plot_primary_inhibition_rank(), plot_hit_bar_count(), plot_sigma_hits()
5. Dose-response & AUC import_dose_response(), fit_4pl_curve(), extract_drc_params(), calc_drc_auc(), filter_low_quality_curve() plot_single_drc(), plot_batch_drc_overlay(), plot_ic50_auc_cor()
6. AUC matrix & clustering build_auc_matrix(), cluster_auc_matrix(), extract_cluster_hit() plot_auc_heatmap(), plot_cluster_tree()
7. Ranking, annotation & report rank_hit_compound(), annotate_hit_info(), export_hit_table(), generate_hts_report() plot_hit_stratify_bar(), plot_primary_secondary_cor()

Utilities: plate_layout() / plate_layout_384() / plate_layout_1536(), convert_conc_log10(), check_control_label(), clean_compound_id().

The original two-condition (differential) analysis remains available: four_pl(), compute_auc(), fit_dose_response(), compute_delta_auc(), select_hits_cutoff(), select_hits_sigma(), calculate_qc_metrics(), plot_dose_response_curves(), plot_delta_auc_heatmap(), plot_condition_scatter() and the QC plots.

Quick start

library(diffHTS)

## --- Primary screen: raw signals -> hits ---------------------------------
## Author a plate map (which wells are NC / PC / blank / compound) yourself,
## then stamp it onto the instrument readings:
layout <- read_plate_layout(
  system.file("extdata", "plate_layout_example.csv", package = "diffHTS"),
  plate_id = "P01")
# raw <- apply_plate_layout(signal_export, layout)  # merge roles onto readings

raw  <- read_hts_plate(hts_primary_raw) # three 96-well plates in one object
summarize_plate_setup(raw)             # per-plate layout: controls & compounds
raw  <- baseline_subtract(raw)
qc   <- calc_plate_qc(raw)             # full QC panel: Z'/robust-Z'/SSMD/S:B/S:N/CV%
plot_plate_qc(qc, metric = "ssmd")     # one plot fn, choose any metric
good <- filter_valid_plates(raw)       # drop failed plates (P03)
norm <- norm_by_control(good)          # % inhibition vs NC/PC
hits <- select_primary_hit(norm, threshold = 50)
summarize_primary_hit(hits)

## --- Secondary screen: dose-response -> ranked hits ----------------------
dr   <- import_dose_response(hts_dose_response,
                             response_col = "viability",
                             group_cols   = "cell_line")
drc  <- calc_drc_auc(fit_4pl_curve(dr, group_cols = "cell_line"))
params <- merge(extract_drc_params(drc), drc$meta[, c("curve_id", "auc")])

ranked <- rank_hit_compound(params)                 # Strong/Moderate/Weak
annotate_hit_info(ranked, hts_compound_meta)        # add target/MoA
plot_single_drc(drc, drc$meta$curve_id[1])          # one fitted curve
plot_auc_heatmap(build_auc_matrix(drc$meta, zscore = "row"))

Example data

All are fully simulated (see data-raw/make_datasets.R) and do not correspond to any real compound or cell line.

Vignette

See vignette("diffHTS") for an end-to-end walkthrough.

License

GPL-3

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.