@@ -271,33 +271,30 @@ namespace torali
271
271
bridgeInsertions (TReadBp const & readBp, std::vector<std::vector<SRBamRecord> >& br) {
272
272
// Insertion map
273
273
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;
275
276
TPosInsMap pins;
276
277
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 ;
292
286
}
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 ()) {
296
291
for (uint32_t i = 0 ; i < it->second .size (); ++i) {
297
292
// 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 ()) {
299
295
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 ));
301
298
}
302
299
}
303
300
}
0 commit comments