-
Notifications
You must be signed in to change notification settings - Fork 0
/
weight_matrix_model.h
58 lines (44 loc) · 1.74 KB
/
weight_matrix_model.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/*
*
*
*/
#ifndef WEIGHT_MATRIX_MODEL_H_
#define WEIGHT_MATRIX_MODEL_H_
#include <vector>
namespace motif {
struct WeightMatrixModel {
// Constructor.
WeightMatrixModel();
// Constructor, constructs weight matrix model based on the provided
// 'frequency_matrix' and a 'background_frequency_vec'. The background
// frequency std::vector should be of length 4 with one column for each
// nucleotide. The relative entropy for the sequence is the sum of each
// column's relative entropy.
WeightMatrixModel(
const std::vector<std::vector<double>>& frequency_matrix,
const std::vector<double>& background_frequency_vec);
// Less than operator used for caomparison.
bool operator<(const WeightMatrixModel& other) const {
assert(entropy_history_vec.size() > 0);
assert(other.entropy_history_vec.size() > 0);
return entropy_history_vec.back() < other.entropy_history_vec.back();
}
// Print the matrix model to stdout.
void PrintWMM() const;
// Print the frequency matrix to stdout.
void PrintFrequencyMatrix() const;
// Returns the string representing the most probablye nucleotide at each
// index.
std::string GetConsensusString() const;
// Weight matrix model representing a 4 x K matrix of log2(f/b) where f
// is the foreground frequency of a particular nucleotide at a particular
// index and b is the expected background frequency.
std::vector<std::vector<double>> matrix_model;
// Frequency matrix associated with the WMM.
std::vector<std::vector<double>> frequency_matrix;
// Relative entropy between the probability distribution of this matrix
// model compared to background probability distribution.
std::vector<double> entropy_history_vec;
};
}
#endif // WEIGHT_MATRIX_MODEL_H_