singler_classic_markers
Classic marker detection for SingleR
Loading...
Searching...
No Matches
number.hpp
1#ifndef SINGLER_CLASSIC_MARKERS_NUMBER_HPP
2#define SINGLER_CLASSIC_MARKERS_NUMBER_HPP
3
4#include <cmath>
5#include <cstddef>
6
7#include "sanisizer/sanisizer.hpp"
8
10
23inline std::size_t default_number(std::size_t num_labels) {
24 if (num_labels == 0) {
25 return 0;
26 } else {
27 return sanisizer::from_float<std::size_t>(std::round(500.0 * std::pow(2.0/3.0, std::log2(static_cast<double>(num_labels)))));
28 }
29}
30
34template<typename Index_>
35Index_ get_num_keep(const std::size_t ngroups, const std::optional<std::size_t>& request) {
36 std::size_t num_keep;
37 if (request.has_value()) {
38 num_keep = *request;
39 } else {
40 num_keep = default_number(ngroups);
41 }
42 return sanisizer::cap<Index_>(num_keep);
43}
48}
49
50#endif
Implementation of the classic SingleR marker detection.
Definition choose.hpp:21
std::size_t default_number(std::size_t num_labels)
Definition number.hpp:23