scran
C++ library for basic single-cell RNA-seq analyses
Loading...
Searching...
No Matches
PerCellRnaQcMetrics.hpp
Go to the documentation of this file.
1#ifndef SCRAN_PER_CELL_RNA_QC_METRICS_HPP
2#define SCRAN_PER_CELL_RNA_QC_METRICS_HPP
3
4#include "../utils/macros.hpp"
5
6#include <vector>
7#include <limits>
8
9#include "tatami/base/Matrix.hpp"
10#include "PerCellQcMetrics.hpp"
11#include "utils.hpp"
12
19namespace scran {
20
40public:
44 struct Defaults {
48 static constexpr int num_threads = 1;
49 };
50
56 num_threads = n;
57 return *this;
58 }
59
60private:
61 int num_threads = Defaults::num_threads;
62
63public:
69 template<typename Float = double, typename Integer = int>
70 struct Buffers {
74 Float* sums = NULL;
75
79 Integer* detected = NULL;
80
85 std::vector<Float*> subset_proportions;
86 };
87
88public:
104 template<class Matrix, typename Subset = const uint8_t*, typename Float, typename Integer>
105 void run(const Matrix* mat, const std::vector<Subset>& subsets, Buffers<Float, Integer>& output) const {
106 size_t NC = mat->ncol();
107
108 // Calling the general-purpose PerCellQcMetrics function.
109 PerCellQcMetrics general;
110 general.set_num_threads(num_threads);
111
113 tmp.total = output.sums;
114 tmp.detected = output.detected;
115 tmp.subset_total = output.subset_proportions;
116
117 // Make sure that sums are computed one way or another.
118 std::vector<Float> placeholder;
119 if (!tmp.total && tmp.subset_total.size()) {
120 placeholder.resize(NC);
121 tmp.total = placeholder.data();
122 }
123
124 general.run(mat, subsets, tmp);
125
126 // Computing the proportions safely.
127 for (auto s : output.subset_proportions) {
128 if (s) {
129 quality_control::safe_divide(NC, s, tmp.total);
130 }
131 }
132
133 return;
134 }
135
136public:
143 struct Results {
147 Results() {}
148
149 Results(size_t ncells, size_t nsubsets) : sums(ncells), detected(ncells), subset_proportions(nsubsets, std::vector<double>(ncells)) {}
157 std::vector<double> sums;
158
162 std::vector<int> detected;
163
168 std::vector<std::vector<double> > subset_proportions;
169
170 public:
177 Buffers<> output;
178 populate_buffers(output, *this);
179 return output;
180 }
181
188 populate_buffers(output, *this);
189 return output;
190 }
191
192 private:
193 template<class SomeBuffer, class Results>
194 static void populate_buffers(SomeBuffer& x, Results& y) {
195 x.sums = y.sums.data();
196 x.detected = y.detected.data();
197
198 size_t nsubsets = y.subset_proportions.size();
199 x.subset_proportions.resize(nsubsets);
200 for (size_t s = 0; s < nsubsets; ++s) {
201 x.subset_proportions[s] = y.subset_proportions[s].data();
202 }
203 }
204 };
205
206public:
221 template<class Matrix, typename Subset = const uint8_t*>
222 Results run(const Matrix* mat, const std::vector<Subset>& subsets) const {
223 size_t nsubsets = subsets.size();
224 Results output(mat->ncol(), nsubsets);
225 auto buffers = output.buffers();
226 run(mat, subsets, buffers);
227 return output;
228 }
229};
230
231}
232
233#endif
Compute a variety of per-cell quality control metrics from a count matrix.
Compute a variety of per-cell quality control metrics from a count matrix.
Definition PerCellQcMetrics.hpp:45
PerCellQcMetrics & set_num_threads(int n=Defaults::num_threads)
Definition PerCellQcMetrics.hpp:292
Results run(const Matrix *mat, const std::vector< Subset > &subsets) const
Definition PerCellQcMetrics.hpp:313
Compute typical per-cell quality control metrics from an RNA count matrix.
Definition PerCellRnaQcMetrics.hpp:39
Results run(const Matrix *mat, const std::vector< Subset > &subsets) const
Definition PerCellRnaQcMetrics.hpp:222
PerCellRnaQcMetrics & set_num_threads(int n=Defaults::num_threads)
Definition PerCellRnaQcMetrics.hpp:55
void run(const Matrix *mat, const std::vector< Subset > &subsets, Buffers< Float, Integer > &output) const
Definition PerCellRnaQcMetrics.hpp:105
Functions for single-cell RNA-seq analyses.
Definition AggregateAcrossCells.hpp:18
Buffers for direct storage of the calculated statistics.
Definition PerCellQcMetrics.hpp:111
std::vector< Float * > subset_total
Definition PerCellQcMetrics.hpp:152
Integer * detected
Definition PerCellQcMetrics.hpp:132
Float * total
Definition PerCellQcMetrics.hpp:126
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
Default parameters.
Definition PerCellRnaQcMetrics.hpp:44
static constexpr int num_threads
Definition PerCellRnaQcMetrics.hpp:48
Result store for QC metric calculations.
Definition PerCellRnaQcMetrics.hpp:143
Buffers buffers()
Definition PerCellRnaQcMetrics.hpp:176
std::vector< std::vector< double > > subset_proportions
Definition PerCellRnaQcMetrics.hpp:168
std::vector< int > detected
Definition PerCellRnaQcMetrics.hpp:162
Buffers< const double, const int > buffers() const
Definition PerCellRnaQcMetrics.hpp:186
std::vector< double > sums
Definition PerCellRnaQcMetrics.hpp:157