Skip to content

Commit f0fda91

Browse files
committed
bridge optm
1 parent a0c795e commit f0fda91

File tree

1 file changed

+18
-21
lines changed

1 file changed

+18
-21
lines changed

src/junction.h

+18-21
Original file line numberDiff line numberDiff line change
@@ -271,33 +271,30 @@ namespace torali
271271
bridgeInsertions(TReadBp const& readBp, std::vector<std::vector<SRBamRecord> >& br) {
272272
// Insertion map
273273
std::set<std::size_t> readIds;
274-
typedef std::map<uint32_t, int32_t> TPosInsMap;
274+
typedef std::pair<uint32_t, uint32_t> TRefCoord;
275+
typedef std::map<TRefCoord, int32_t> TPosInsMap;
275276
TPosInsMap pins;
276277

277-
// Iterate all chromosomes with insertions
278-
std::set<int32_t> refIndices;
279-
for(uint32_t i = 0; i < br[4].size(); ++i) refIndices.insert(br[4][i].chr);
280-
for(std::set<int32_t>::const_iterator refIndex = refIndices.begin(); refIndex != refIndices.end(); ++refIndex) {
281-
pins.clear();
282-
readIds.clear();
283-
for(uint32_t i = 0; i < br[4].size(); ++i) {
284-
if (br[4][i].chr == *refIndex) {
285-
readIds.insert(br[4][i].id);
286-
for(int32_t k = br[4][i].pos; k <= br[4][i].pos2; ++k) {
287-
typename TPosInsMap::iterator it = pins.find(k);
288-
if (it == pins.end()) pins.insert(std::make_pair(k, br[4][i].inslen));
289-
else it->second = (it->second + br[4][i].inslen) / 2;
290-
}
291-
}
278+
// Iterate all split-reads with insertions
279+
for(uint32_t i = 0; i < br[4].size(); ++i) {
280+
readIds.insert(br[4][i].id);
281+
for(int32_t k = br[4][i].pos; k <= br[4][i].pos2; ++k) {
282+
TRefCoord rc = std::make_pair(br[4][i].chr, k);
283+
typename TPosInsMap::iterator it = pins.find(rc);
284+
if (it == pins.end()) pins.insert(std::make_pair(rc, br[4][i].inslen));
285+
else it->second = (it->second + br[4][i].inslen) / 2;
292286
}
293-
if (!pins.empty()) {
294-
for(typename TReadBp::const_iterator it = readBp.begin(); it != readBp.end(); ++it) {
295-
int32_t rst = _selectReadStart(it->second);
287+
}
288+
if (!pins.empty()) {
289+
for(typename TReadBp::const_iterator it = readBp.begin(); it != readBp.end(); ++it) {
290+
if (readIds.find(it->first) == readIds.end()) {
296291
for(uint32_t i = 0; i < it->second.size(); ++i) {
297292
// Any insertion?
298-
if ((it->second[i].refidx == *refIndex) && (readIds.find(it->first) == readIds.end()) && (pins.find(it->second[i].refpos) != pins.end())) {
293+
TRefCoord rc = std::make_pair(it->second[i].refidx, it->second[i].refpos);
294+
if (pins.find(rc) != pins.end()) {
299295
int32_t qval = (int32_t) it->second[i].qual;
300-
br[4].push_back(SRBamRecord(it->second[i].refidx, it->second[i].refpos, it->second[i].refidx, it->second[i].refpos + 1, rst, it->second[i].seqpos, qval, pins[it->second[i].refpos], it->first));
296+
int32_t rst = _selectReadStart(it->second);
297+
br[4].push_back(SRBamRecord(it->second[i].refidx, it->second[i].refpos, it->second[i].refidx, it->second[i].refpos + 1, rst, it->second[i].seqpos, qval, pins[rc], it->first));
301298
}
302299
}
303300
}

0 commit comments

Comments
 (0)