Skip to content

Commit 180f8bb

Browse files
committed
ultra-deep coverage
1 parent cfc47b8 commit 180f8bb

File tree

6 files changed

+29
-11
lines changed

6 files changed

+29
-11
lines changed

Makefile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ endif
3333
ifeq (${EBROOTHTSLIB}, ${PWD}/src/htslib/)
3434
SUBMODULES += .htslib
3535
endif
36-
36+
ifdef COVTYPE
37+
CXXFLAGS += -DCOVTYPE=${COVTYPE}
38+
endif
3739

3840
# External sources
3941
HTSLIBSOURCES = $(wildcard src/htslib/*.c) $(wildcard src/htslib/*.h)

src/bamstats.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,10 @@ namespace bamstats
211211
if (itRg->second.bc.cov[i] == 1) ++itRg->second.bc.n1;
212212
if (itRg->second.bc.cov[i] == 2) ++itRg->second.bc.n2;
213213
}
214-
if (!nrun[i]) ++itRg->second.bc.bpWithCoverage[itRg->second.bc.cov[i]];
214+
if (!nrun[i]) {
215+
if (itRg->second.bc.cov[i] >= itRg->second.bc.bpWithCoverage.size()) itRg->second.bc.bpWithCoverage.resize(itRg->second.bc.cov[i] + 1, 0);
216+
++itRg->second.bc.bpWithCoverage[itRg->second.bc.cov[i]];
217+
}
215218
}
216219
itRg->second.bc.cov.clear();
217220
}
@@ -567,7 +570,10 @@ namespace bamstats
567570
if (itRg->second.bc.cov[i] == 1) ++itRg->second.bc.n1;
568571
if (itRg->second.bc.cov[i] == 2) ++itRg->second.bc.n2;
569572
}
570-
if (!nrun[i]) ++itRg->second.bc.bpWithCoverage[itRg->second.bc.cov[i]];
573+
if (!nrun[i]) {
574+
if (itRg->second.bc.cov[i] >= itRg->second.bc.bpWithCoverage.size()) itRg->second.bc.bpWithCoverage.resize(itRg->second.bc.cov[i] + 1, 0);
575+
++itRg->second.bc.bpWithCoverage[itRg->second.bc.cov[i]];
576+
}
571577
}
572578
itRg->second.bc.cov.clear();
573579
}

src/json.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -540,13 +540,14 @@ namespace bamstats
540540

541541
// Coverage Histogram
542542
{
543-
uint32_t lastValidCO = _lastNonZeroIdx(itRg->second.bc.bpWithCoverage, itRg->second.bc.maxCoverage);
544-
float lastFrac = _lastPercentage(itRg->second.bc.bpWithCoverage, itRg->second.bc.maxCoverage);
543+
// Ignore last bucket because it counts >= the max. coverage value
544+
uint32_t lastValidCO = _lastNonZeroIdx(itRg->second.bc.bpWithCoverage, itRg->second.bc.bpWithCoverage.size() - 1);
545+
float lastFrac = _lastPercentage(itRg->second.bc.bpWithCoverage);
545546
nlohmann::json j;
546547
j["id"] = "coverageHistogram";
547548
j["title"] = "Coverage histogram";
548549
if (lastFrac > 0) {
549-
std::string rlstr = boost::lexical_cast<std::string>(lastFrac) + "% of all bases with >= " + boost::lexical_cast<std::string>(itRg->second.bc.maxCoverage) + "x coverage";
550+
std::string rlstr = boost::lexical_cast<std::string>(lastFrac) + "% of all bases with >= " + boost::lexical_cast<std::string>(itRg->second.bc.bpWithCoverage.size() - 1) + "x coverage";
550551
j["subtitle"] = rlstr;
551552
}
552553
j["x"]["data"] = nlohmann::json::array();

src/qcstruct.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,10 @@ namespace bamstats
5252
typedef uint32_t TCountType;
5353
typedef std::vector<TCountType> TCoverageBp;
5454

55-
typedef uint16_t TMaxCoverage;
55+
typedef COVTYPE TMaxCoverage;
5656
typedef std::vector<TMaxCoverage> TBpCoverage;
5757

58-
uint32_t maxCoverage;
58+
TMaxCoverage maxCoverage;
5959
uint32_t maxIndelSize;
6060
uint64_t n1;
6161
uint64_t n2;
@@ -76,7 +76,7 @@ namespace bamstats
7676
BaseCounts() : maxCoverage(std::numeric_limits<TMaxCoverage>::max()), maxIndelSize(50), n1(0), n2(0), nd(0), matchCount(0), mismatchCount(0), delCount(0), insCount(0), softClipCount(0), hardClipCount(0) {
7777
delHomACGTN.resize(6, 0);
7878
insHomACGTN.resize(6, 0);
79-
bpWithCoverage.resize(maxCoverage + 1, 0);
79+
bpWithCoverage.resize(std::numeric_limits<uint16_t>::max() + 1, 0);
8080
delSize.resize(maxIndelSize + 1, 0);
8181
insSize.resize(maxIndelSize + 1, 0);
8282
cov.clear();

src/tsv.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,13 @@ namespace bamstats
5757
if (vec[i] > 0) lastNonZeroIdx = i;
5858
return lastNonZeroIdx;
5959
}
60-
60+
6161
template<typename TVector>
6262
inline uint32_t
6363
_lastNonZeroIdx(TVector const& vec) {
6464
return _lastNonZeroIdx(vec, vec.size());
6565
}
6666

67-
6867
template<typename TVector>
6968
inline float
7069
_lastPercentage(TVector const& vec, uint32_t const lastIdx) {
@@ -73,6 +72,12 @@ namespace bamstats
7372
return ((float) (vec[lastIdx]) * 100.0) / cumsum;
7473
}
7574

75+
template<typename TVector>
76+
inline float
77+
_lastPercentage(TVector const& vec) {
78+
return _lastPercentage(vec, vec.size() - 1);
79+
}
80+
7681
template<typename TVector>
7782
inline uint32_t
7883
_lastNonZeroIdxACGTN(TVector const& vec, uint32_t const read12) {

src/util.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@
1717
namespace bamstats
1818
{
1919

20+
#ifndef COVTYPE
21+
#define COVTYPE uint16_t
22+
#endif
23+
2024
struct Interval {
2125
int32_t start;
2226
int32_t end;

0 commit comments

Comments
 (0)