scran
C++ library for basic single-cell RNA-seq analyses
Loading...
Searching...
No Matches
PerCellAdtQcMetrics.hpp
Go to the documentation of this file.
1#ifndef SCRAN_PER_CELL_ADT_QC_METRICS_HPP
2#define SCRAN_PER_CELL_ADT_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
18namespace scran {
19
39public:
43 struct Defaults {
47 static constexpr int num_threads = 1;
48 };
49
55 num_threads = n;
56 return *this;
57 }
58
59private:
60 int num_threads = Defaults::num_threads;
61
62public:
68 template<typename Float = double, typename Integer = int>
69 struct Buffers {
73 Float* sums = NULL;
74
78 Integer* detected = NULL;
79
84 std::vector<Float*> subset_totals;
85 };
86
87public:
103 template<class Matrix, typename Subset = const uint8_t*, typename Float, typename Integer>
104 void run(const Matrix* mat, const std::vector<Subset>& subsets, Buffers<Float, Integer>& output) const {
105 // Calling the general-purpose PerCellQcMetrics function.
106 PerCellQcMetrics general;
107 general.set_num_threads(num_threads);
108
110 tmp.total = output.sums;
111 tmp.detected = output.detected;
112 tmp.subset_total = output.subset_totals;
113
114 general.run(mat, subsets, tmp);
115 return;
116 }
117
118public:
125 struct Results {
129 Results() {}
130
131 Results(size_t ncells, size_t nsubsets) : sums(ncells), detected(ncells), subset_totals(nsubsets, std::vector<double>(ncells)) {}
139 std::vector<double> sums;
140
144 std::vector<int> detected;
145
150 std::vector<std::vector<double> > subset_totals;
151
158 Buffers<> output;
159 populate_buffers(output, *this);
160 return output;
161 }
162
169 populate_buffers(output, *this);
170 return output;
171 }
172 private:
173 template<class SomeBuffer, class Results>
174 static void populate_buffers(SomeBuffer& x, Results& y) {
175 x.sums = y.sums.data();
176 x.detected = y.detected.data();
177
178 size_t nsubsets = y.subset_totals.size();
179 x.subset_totals.resize(nsubsets);
180 for (size_t s = 0; s < nsubsets; ++s) {
181 x.subset_totals[s] = y.subset_totals[s].data();
182 }
183 }
184 };
185
186public:
201 template<class Matrix, typename Subset = const uint8_t*>
202 Results run(const Matrix* mat, const std::vector<Subset>& subsets) const {
203 size_t nsubsets = subsets.size();
204 Results output(mat->ncol(), nsubsets);
205 auto buffers = output.buffers();
206 run(mat, subsets, buffers);
207 return output;
208 }
209};
210
211}
212
213#endif
Compute a variety of per-cell quality control metrics from a count matrix.
Compute per-cell quality control metrics from an ADT count matrix.
Definition PerCellAdtQcMetrics.hpp:38
Results run(const Matrix *mat, const std::vector< Subset > &subsets) const
Definition PerCellAdtQcMetrics.hpp:202
void run(const Matrix *mat, const std::vector< Subset > &subsets, Buffers< Float, Integer > &output) const
Definition PerCellAdtQcMetrics.hpp:104
PerCellAdtQcMetrics & set_num_threads(int n=Defaults::num_threads)
Definition PerCellAdtQcMetrics.hpp:54
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
Functions for single-cell RNA-seq analyses.
Definition AggregateAcrossCells.hpp:18
Buffers for direct storage of the calculated statistics.
Definition PerCellAdtQcMetrics.hpp:69
Float * sums
Definition PerCellAdtQcMetrics.hpp:73
Integer * detected
Definition PerCellAdtQcMetrics.hpp:78
std::vector< Float * > subset_totals
Definition PerCellAdtQcMetrics.hpp:84
Default parameters.
Definition PerCellAdtQcMetrics.hpp:43
static constexpr int num_threads
Definition PerCellAdtQcMetrics.hpp:47
Result store for QC metric calculations.
Definition PerCellAdtQcMetrics.hpp:125
std::vector< std::vector< double > > subset_totals
Definition PerCellAdtQcMetrics.hpp:150
std::vector< double > sums
Definition PerCellAdtQcMetrics.hpp:139
Buffers< const double, const int > buffers() const
Definition PerCellAdtQcMetrics.hpp:167
std::vector< int > detected
Definition PerCellAdtQcMetrics.hpp:144
Buffers buffers()
Definition PerCellAdtQcMetrics.hpp:157
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