Skip to content

Commit d542ccb

Browse files
updated protocol guessing criteria and added confidence field
1 parent 9743296 commit d542ccb

1 file changed

Lines changed: 13 additions & 6 deletions

File tree

src/utils/guessprotocol.cpp

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ struct nucleotide_model {
8686
double operator()(const string &s) const {
8787
return accumulate(cbegin(s), cend(s), 0.0,
8888
[&](const double x, const char c) {
89-
const auto i = nuc_to_idx[c];
89+
const auto i = nuc_to_idx[static_cast<uint8_t>(c)];
9090
return i == 4 ? x : x + lpr[i];
9191
});
9292
};
@@ -106,6 +106,9 @@ struct guessprotocol_summary {
106106
// protocol is the guessed protocol (wgbs, pbat, rpbat, or inconclusive)
107107
// based on the content of the reads.
108108
string protocol;
109+
// confidence indicates the level of confidence in the guess for the
110+
// protocol.
111+
string confidence;
109112
// layout indicates whether the reads are paired or single-ended.
110113
string layout;
111114
// n_reads_wgbs is the average number of reads (for single-ended reads) or
@@ -118,17 +121,21 @@ struct guessprotocol_summary {
118121
double wgbs_fraction{};
119122

120123
void evaluate() {
121-
const auto frac = n_reads_wgbs / n_reads;
122-
protocol = "inconclusive";
123-
if (frac > 0.8) protocol = "wgbs";
124-
if (frac < 0.2) protocol = "pbat";
125-
if (frac > 0.4 && frac < 0.6) protocol = "rpbat";
124+
const auto frac = n_reads_wgbs / std::max(1ul, n_reads);
125+
if (frac <= 0.01) {protocol = "pbat"; confidence = "high";}
126+
else if (frac <= 0.1) {protocol = "pbat"; confidence = "low";}
127+
else if (frac <= 0.2) {protocol = "rpbat"; confidence = "low";}
128+
else if (frac <= 0.8) {protocol = "rpbat"; confidence = "high";}
129+
else if (frac <= 0.9) {protocol = "rpbat"; confidence = "low";}
130+
else if (frac <= 0.99) {protocol = "wgbs"; confidence = "low";}
131+
else {protocol = "wgbs"; confidence = "high";}
126132
wgbs_fraction = frac;
127133
}
128134

129135
string tostring() const {
130136
std::ostringstream oss;
131137
oss << "protocol: " << protocol << '\n'
138+
<< "confidence: " << confidence << '\n'
132139
<< "wgbs_fraction: " << wgbs_fraction << '\n'
133140
<< "n_reads_wgbs: " << n_reads_wgbs << '\n'
134141
<< "n_reads: " << n_reads;

0 commit comments

Comments
 (0)