1#ifndef SCRAN_QC_CHOOSE_FILTER_THRESHOLDS_HPP
2#define SCRAN_QC_CHOOSE_FILTER_THRESHOLDS_HPP
73template<
typename Float_>
95template<
typename Float_>
96Float_ unlog_threshold(
const Float_ val,
const bool was_logged) {
98 if (std::isinf(val)) {
103 return std::exp(val);
109template<
bool lower_,
typename Float_>
110std::vector<Float_> strip_threshold(
const std::vector<ChooseFilterThresholdsResults<Float_> >& res) {
111 std::vector<Float_> output;
112 output.reserve(res.size());
113 for (
const auto& r : res) {
114 if constexpr(lower_) {
115 output.push_back(r.lower);
117 output.push_back(r.upper);
142template<
typename Float_>
144 static_assert(std::is_floating_point<Float_>::value);
146 Float_& lthresh = output.
lower;
147 Float_& uthresh = output.
upper;
148 lthresh = -std::numeric_limits<Float_>::infinity();
149 uthresh = std::numeric_limits<double>::infinity();
151 const auto median = mm.
median;
152 const auto mad = mm.
mad;
153 if (!std::isnan(median) && !std::isnan(mad)) {
154 auto delta = std::max(
static_cast<Float_
>(options.
min_diff), options.
num_mads * mad);
156 lthresh = internal::unlog_threshold(median - delta, options.
log);
159 uthresh = internal::unlog_threshold(median + delta, options.
log);
178template<
typename Float_>
200template<
typename Value_,
typename Float_>
224template<
typename Float_>
229 std::vector<ChooseFilterThresholdsResults<Float_> > output;
230 output.reserve(mms.size());
231 for (
auto& mm : mms) {
252template<
typename Value_,
typename Block_,
typename Float_>
254 const std::size_t num,
255 const Value_*
const metrics,
256 const Block_*
const block,
Simple quality control for single-cell data.
Definition adt_quality_control.hpp:23
std::vector< ChooseFilterThresholdsResults< Float_ > > choose_filter_thresholds_blocked(const std::vector< FindMedianMadResults< Float_ > > &mms, const ChooseFilterThresholdsOptions &options)
Definition choose_filter_thresholds.hpp:225
FindMedianMadResults< Float_ > find_median_mad(std::size_t num, Float_ *metrics, const FindMedianMadOptions &options)
Definition find_median_mad.hpp:81
std::vector< FindMedianMadResults< Output_ > > find_median_mad_blocked(const std::size_t num, const Value_ *const metrics, const Block_ *const block, FindMedianMadWorkspace< Output_ > *workspace, const FindMedianMadOptions &options)
Definition find_median_mad.hpp:273
ChooseFilterThresholdsResults< Float_ > choose_filter_thresholds(const FindMedianMadResults< Float_ > &mm, const ChooseFilterThresholdsOptions &options)
Definition choose_filter_thresholds.hpp:143
Options for choose_filter_thresholds().
Definition choose_filter_thresholds.hpp:21
bool upper
Definition choose_filter_thresholds.hpp:32
bool log
Definition choose_filter_thresholds.hpp:66
double num_mads
Definition choose_filter_thresholds.hpp:39
double min_diff
Definition choose_filter_thresholds.hpp:46
bool lower
Definition choose_filter_thresholds.hpp:26
Results of compute_adt_qc_metrics().
Definition choose_filter_thresholds.hpp:74
Float_ upper
Definition choose_filter_thresholds.hpp:87
Float_ lower
Definition choose_filter_thresholds.hpp:80