gsdecon
C++ port of the GSDecon algorithm
Loading...
Searching...
No Matches
compute.hpp
Go to the documentation of this file.
1#ifndef GSDECON_COMPUTE_HPP
2#define GSDECON_COMPUTE_HPP
3
4#include <algorithm>
5#include <numeric>
6
7#include "tatami/tatami.hpp"
8#include "irlba/irlba.hpp"
9#include "scran_pca/scran_pca.hpp"
10#include "sanisizer/sanisizer.hpp"
11#include "quickstats/quickstats.hpp"
12
13#include "Options.hpp"
14#include "Results.hpp"
15#include "utils.hpp"
16
22namespace gsdecon {
23
47template<typename Value_, typename Index_, typename Float_>
48irlba::Metrics compute(const tatami::Matrix<Value_, Index_>& matrix, const Options& options, const Buffers<Float_>& output) {
49 if (check_edge_cases(matrix, options.rank, output)) {
50 irlba::Metrics metrics;
51 metrics.converged = true;
52 return metrics;
53 }
54
55 scran_pca::SimplePcaOptions sopt;
56 sopt.number = options.rank;
57 sopt.scale = options.scale;
58 sopt.realize_matrix = options.realize_matrix;
59 sopt.num_threads = options.num_threads;
60 sopt.irlba_options = options.irlba_options;
61 const auto res = scran_pca::simple_pca(matrix, sopt);
62
63 quickstats::PairwiseSumWorkspace<Float_> pswrk;
64 quickstats::PairwiseSumOptions psopt;
65 const Float_ shift = quickstats::pairwise_sum(res.center.size(), res.center.data(), pswrk, psopt) / matrix.nrow();
66 std::fill_n(output.scores, matrix.ncol(), shift);
67
68 process_output(res.rotation, res.components, options.scale, res.scale, output);
69
70 return res.metrics;
71}
72
86template<typename Float_ = double, typename Value_, typename Index_>
88 Results<Float_> output;
89 sanisizer::resize(output.weights, matrix.nrow()
90#ifdef SCRAN_QC_TEST_INIT
91 , SCRAN_QC_TEST_INIT
92#endif
93 );
94 sanisizer::resize(output.scores, matrix.ncol()
95#ifdef SCRAN_QC_TEST_INIT
96 , SCRAN_QC_TEST_INIT
97#endif
98 );
99
100 Buffers<Float_> buffers;
101 buffers.weights = output.weights.data();
102 buffers.scores = output.scores.data();
103
104 output.metrics = compute(matrix, options, buffers);
105 return output;
106}
107
108}
109
110#endif
Options for the gsdecon algorithm.
Classes for storing the results.
virtual Index_ ncol() const=0
virtual Index_ nrow() const=0
Gene set scoring with gsdecon.
Definition blocked.hpp:21
irlba::Metrics compute(const tatami::Matrix< Value_, Index_ > &matrix, const Options &options, const Buffers< Float_ > &output)
Definition compute.hpp:48
Buffers for the results of compute() and compute_blocked().
Definition Results.hpp:20
Float_ * scores
Definition Results.hpp:25
Float_ * weights
Definition Results.hpp:31
Options for compute() and compute_blocked().
Definition Options.hpp:18
bool realize_matrix
Definition Options.hpp:64
int rank
Definition Options.hpp:34
irlba::Options< Eigen::VectorXd > irlba_options
Definition Options.hpp:69
int num_threads
Definition Options.hpp:58
bool scale
Definition Options.hpp:41
Results of compute() and compute_blocked().
Definition Results.hpp:39
std::vector< Float_ > weights
Definition Results.hpp:51
std::vector< Float_ > scores
Definition Results.hpp:44
irlba::Metrics metrics
Definition Results.hpp:56