@@ -28,7 +28,7 @@ void Extender::run(int _threads) {
28
28
}
29
29
clips.insert (clips.begin (), _p_clips[i].begin (), _p_clips[i].end ()) ;
30
30
}
31
- lprint ({" Extension complete." }) ;
31
+ lprint ({" Extension complete." , to_string (clips. size ()), " clipped SFS. " }) ;
32
32
// build a separate interval tree for each chromosome
33
33
cluster_no_interval_tree () ;
34
34
// put all clusters in a single vector
@@ -60,6 +60,7 @@ void Extender::run(int _threads) {
60
60
lprint ({" Extracted" , to_string (svs.size ()), " SVs." });
61
61
sam_close (bam_file) ;
62
62
filter_sv_chains () ;
63
+ // lprint({"Error stats: ", to_string(skip_1), " can't be mapped, ", to_string(skip_2), " can't be extended ", to_string(skip_3), " anomalies.", to_string(skip_4), " clipped."}) ;
63
64
}
64
65
65
66
pair<int , int > Extender::get_unique_kmers (const vector<pair<int , int >> &alpairs, const uint k, const bool from_end, string chrom) {
@@ -207,9 +208,6 @@ bool Extender::load_batch_bam(int threads, int batch_size, int p) {
207
208
if (aln->core .flag & BAM_FUNMAP || aln->core .flag & BAM_FSUPPLEMENTARY || aln->core .flag & BAM_FSECONDARY) {
208
209
continue ;
209
210
}
210
- if (aln->core .qual != 0 ) {
211
- continue ;
212
- }
213
211
char *qname = bam_get_qname (aln);
214
212
if (SFSs->find (qname) == SFSs->end ()) {
215
213
continue ;
@@ -298,6 +296,7 @@ void Extender::extend_alignment(bam1_t* aln, int index) {
298
296
uint l = bam_cigar_oplen (*(cigar + 0 ));
299
297
if (op == BAM_CSOFT_CLIP) {
300
298
lclip = make_pair (aln->core .pos , l);
299
+ skip_4++ ;
301
300
}
302
301
// we skip this SFS
303
302
continue ;
@@ -306,6 +305,7 @@ void Extender::extend_alignment(bam1_t* aln, int index) {
306
305
uint l = bam_cigar_oplen (*(cigar + aln->core .n_cigar - 1 ));
307
306
if (op == BAM_CSOFT_CLIP) {
308
307
rclip = make_pair (bam_endpos (aln), l);
308
+ skip_4++ ;
309
309
}
310
310
// we skip this SFS
311
311
continue ;
@@ -382,12 +382,12 @@ void Extender::extend_alignment(bam1_t* aln, int index) {
382
382
} else {
383
383
_p_extended_sfs[index ].push_back (ExtSFS (string (chrom), string (qname), prekmer.second , postkmer.second + kmer_size));
384
384
}
385
- if (lclip. second > 0 ) {
386
- _p_clips[ index ]. push_back ( Clip (qname, chrom, lclip.first , lclip. second , true )) ;
387
- }
388
- if (rclip. second > 0 ) {
389
- _p_clips[ index ]. push_back ( Clip (qname, chrom, rclip.first , rclip. second , false )) ;
390
- }
385
+ }
386
+ if ( lclip.second > 0 ) {
387
+ _p_clips[ index ]. push_back ( Clip (qname, chrom, lclip. first , lclip. second , true )) ;
388
+ }
389
+ if ( rclip.second > 0 ) {
390
+ _p_clips[ index ]. push_back ( Clip (qname, chrom, rclip. first , rclip. second , false )) ;
391
391
}
392
392
}
393
393
@@ -607,7 +607,9 @@ void Extender::extract_sfs_sequences() {
607
607
cerr << endl ;
608
608
}
609
609
for (int i = 0 ; i < threads; i++) {
610
- free (seq[i]) ;
610
+ if (len[i] > 0 ) {
611
+ free (seq[i]) ;
612
+ }
611
613
bam_destroy1 (_p_aln[i]) ;
612
614
sam_close (_p_bam_file[i]) ;
613
615
}
@@ -784,6 +786,9 @@ void Extender::call() {
784
786
785
787
void Extender::filter_sv_chains () {
786
788
std::sort (svs.begin (), svs.end ()) ;
789
+ if (svs.size () < 2 ) {
790
+ return ;
791
+ }
787
792
lprint ({to_string (svs.size ()), " SVs before chain filtering." }) ;
788
793
vector<SV> _svs ;
789
794
auto & prev = svs[0 ] ;
@@ -796,7 +801,7 @@ void Extender::filter_sv_chains() {
796
801
}
797
802
auto & sv = svs[i] ;
798
803
if (sv.chrom == prev.chrom && sv.s - prev.e < 2 * sv.l && prev.type == sv.type ) {
799
- cout << sv.chrom << " " << sv.s << " " << sv.type << " ---- " << prev.s << endl ;
804
+ // cout << sv.chrom << " " << sv.s << " " << sv.type << " ---- " << prev.s << endl ;
800
805
// check for sequence similarity
801
806
double w_r = max ((double )sv.w , (double )prev.w ) / min ((double )sv.w , (double )prev.w ) ;
802
807
double l_r = min ((double )sv.l , (double )prev.l ) / max ((double )sv.l , (double )prev.l ) ;
@@ -807,7 +812,7 @@ void Extender::filter_sv_chains() {
807
812
} else {
808
813
d = rapidfuzz::fuzz::ratio (sv.altall , prev.altall ) ;
809
814
}
810
- cout << w_r << " " << l_r << " " << d << endl ;
815
+ // cout << w_r << " " << l_r << " " << d << endl ;
811
816
if (d > 70 ) {
812
817
if (sv.w > prev.w ) {
813
818
_svs.push_back (sv) ;
0 commit comments