1#ifndef SCRAN_SUGGEST_RNA_QC_FILTERS_H
2#define SCRAN_SUGGEST_RNA_QC_FILTERS_H
4#include "../utils/macros.hpp"
72 detected_num_mads = n;
105 detected_num_mads= n;
157 template<
bool overwrite = true,
typename Float,
typename Integer,
typename Output>
160 throw std::runtime_error(
"should use filter_blocked() for multiple batches");
162 filter_<overwrite>(n, buffers, output, [](
size_t i) ->
size_t {
return 0; });
175 template<
typename Output = u
int8_t>
177 std::vector<Output> output(metrics.
detected.size());
199 template<
bool overwrite = true,
typename Block,
typename Float,
typename Integer,
typename Output>
202 filter_<overwrite>(n, buffers, output, [&](
size_t i) -> Block {
return block[i]; });
204 filter<overwrite>(n, buffers, output);
221 template<
typename Output = u
int8_t,
typename Block>
223 std::vector<Output> output(metrics.
detected.size());
229 template<
bool overwrite,
typename Float,
typename Integer,
typename Output,
typename Function>
233 for (
size_t i = 0; i < n; ++i) {
235 if (quality_control::is_less_than(buffers.
sums[i],
sums[b])) {
240 if (quality_control::is_less_than<double>(buffers.
detected[i],
detected[b])) {
246 for (
size_t s = 0; s < nsubsets; ++s) {
257 if constexpr(overwrite) {
276 template<
typename Float,
typename Integer>
278 return run_blocked(n,
static_cast<int*
>(NULL), buffers);
304 template<
typename Block,
typename Float,
typename Integer>
307 std::vector<double> workspace(n);
308 std::vector<int> starts;
317 auto sums_res = meddler.
run_blocked(n, block, starts, buffers.
sums, workspace.data());
322 auto sums_filt = filter.
run(std::move(sums_res));
324 output.
sums = std::move(sums_filt.lower);
331 auto detected_res = meddler.
run_blocked(n, block, starts, buffers.
detected, workspace.data());
336 auto detected_filt = filter.
run(std::move(detected_res));
338 output.
detected = std::move(detected_filt.lower);
350 for (
size_t s = 0; s < nsubsets; ++s) {
352 auto subset_filt = filter.
run(std::move(subset_res));
370 template<
typename Block>
Define outlier filters using a MAD-based approach.
Compute typical per-cell quality control metrics from an RNA count matrix.
Create filters to identify low-quality cells from RNA-derived QC metrics.
Definition SuggestRnaQcFilters.hpp:47
Thresholds run(size_t n, const PerCellRnaQcMetrics::Buffers< Float, Integer > &buffers) const
Definition SuggestRnaQcFilters.hpp:277
Thresholds run_blocked(size_t n, const Block *block, const PerCellRnaQcMetrics::Buffers< Float, Integer > &buffers) const
Definition SuggestRnaQcFilters.hpp:305
SuggestRnaQcFilters & set_num_mads(double n=Defaults::num_mads)
Definition SuggestRnaQcFilters.hpp:104
SuggestRnaQcFilters & set_sums_num_mads(double n=Defaults::num_mads)
Definition SuggestRnaQcFilters.hpp:82
Thresholds run_blocked(const PerCellRnaQcMetrics::Results &metrics, const Block *block) const
Definition SuggestRnaQcFilters.hpp:371
SuggestRnaQcFilters & set_subset_num_mads(double n=Defaults::num_mads)
Definition SuggestRnaQcFilters.hpp:93
SuggestRnaQcFilters & set_detected_num_mads(double n=Defaults::num_mads)
Definition SuggestRnaQcFilters.hpp:71
Thresholds run(const PerCellRnaQcMetrics::Results &metrics) const
Definition SuggestRnaQcFilters.hpp:287
Functions for single-cell RNA-seq analyses.
Definition AggregateAcrossCells.hpp:18
Define outlier filters from the median and MAD.
Definition ChooseOutlierFilters.hpp:30
ChooseOutlierFilters & set_num_mads(double n=Defaults::num_mads)
Definition ChooseOutlierFilters.hpp:92
ChooseOutlierFilters & set_lower(bool l=Defaults::lower)
Definition ChooseOutlierFilters.hpp:70
Thresholds run(ComputeMedianMad::Results x) const
Definition ChooseOutlierFilters.hpp:273
ChooseOutlierFilters & set_upper(bool u=Defaults::upper)
Definition ChooseOutlierFilters.hpp:81
Buffers for direct storage of the calculated statistics.
Definition PerCellRnaQcMetrics.hpp:70
Integer * detected
Definition PerCellRnaQcMetrics.hpp:79
Float * sums
Definition PerCellRnaQcMetrics.hpp:74
std::vector< Float * > subset_proportions
Definition PerCellRnaQcMetrics.hpp:85
Result store for QC metric calculations.
Definition PerCellRnaQcMetrics.hpp:143
Buffers buffers()
Definition PerCellRnaQcMetrics.hpp:176
std::vector< int > detected
Definition PerCellRnaQcMetrics.hpp:162
Default parameters.
Definition SuggestRnaQcFilters.hpp:52
static constexpr double num_mads
Definition SuggestRnaQcFilters.hpp:56
Thresholds to define outliers on each metric.
Definition SuggestRnaQcFilters.hpp:119
std::vector< Output > filter_blocked(const PerCellRnaQcMetrics::Results &metrics, const Block *block) const
Definition SuggestRnaQcFilters.hpp:222
std::vector< Output > filter(const PerCellRnaQcMetrics::Results &metrics) const
Definition SuggestRnaQcFilters.hpp:176
void filter_blocked(size_t n, const Block *block, const PerCellRnaQcMetrics::Buffers< Float, Integer > &buffers, Output *output) const
Definition SuggestRnaQcFilters.hpp:200
void filter(size_t n, const PerCellRnaQcMetrics::Buffers< Float, Integer > &buffers, Output *output) const
Definition SuggestRnaQcFilters.hpp:158
std::vector< double > sums
Definition SuggestRnaQcFilters.hpp:125
std::vector< double > detected
Definition SuggestRnaQcFilters.hpp:132
std::vector< std::vector< double > > subset_proportions
Definition SuggestRnaQcFilters.hpp:139