1#ifndef SCRAN_NORM_CHOOSE_PSEUDO_COUNT_HPP 
    2#define SCRAN_NORM_CHOOSE_PSEUDO_COUNT_HPP 
   46template<
typename Float_>
 
   47Float_ find_quantile(Float_ quantile, std::size_t n, Float_* ptr) {
 
   48    double raw = 
static_cast<double>(n - 1) * quantile;
 
   49    std::size_t index = std::ceil(raw);
 
   50    std::nth_element(ptr, ptr + index, ptr + n);
 
   51    double upper = *(ptr + index);
 
   52    std::nth_element(ptr, ptr + index - 1, ptr + index);
 
   53    double lower = *(ptr + index - 1);
 
   54    return lower * (index - raw) + upper * (raw - (index - 1));
 
   96template<
typename Float_>
 
  103    decltype(I(num)) counter = 0;
 
  104    for (
decltype(I(num)) i = 0; i < num; ++i) {
 
  105        const auto val = size_factors[i];
 
  106        if (std::isfinite(val) && val > 0) {
 
  108                size_factors[counter] = val;
 
  119    Float_ lower_sf, upper_sf;
 
  121        lower_sf = *std::min_element(size_factors, size_factors + num);
 
  122        upper_sf = *std::max_element(size_factors, size_factors + num);
 
  124        lower_sf = internal::find_quantile(options.
quantile, num, size_factors);
 
  125        upper_sf = internal::find_quantile(1 - options.
quantile, num, size_factors);
 
  129    const Float_ pseudo_count = (1.0 / lower_sf - 1.0 / upper_sf) / (8 * options.
max_bias);
 
  131    return std::max(options.
min_value, pseudo_count);
 
 
  146template<
typename Float_>
 
  148    std::vector<Float_> buffer(size_factors, size_factors + num);
 
 
Scaling normalization of single-cell data.
Definition center_size_factors.hpp:20
 
Float_ choose_pseudo_count(const std::size_t num, const Float_ *const size_factors, const ChoosePseudoCountOptions &options)
Definition choose_pseudo_count.hpp:147
 
Float_ choose_pseudo_count_raw(std::size_t num, Float_ *const size_factors, const ChoosePseudoCountOptions &options)
Definition choose_pseudo_count.hpp:97
 
Options for choose_pseudo_count().
Definition choose_pseudo_count.hpp:20
 
double quantile
Definition choose_pseudo_count.hpp:26
 
double max_bias
Definition choose_pseudo_count.hpp:32
 
double min_value
Definition choose_pseudo_count.hpp:38