@@ -36,15 +36,29 @@ static void align_rep(ThreadPool& tp, const ChunkSeqs& chunk_seqs, vector<PairEn
3636 }
3737 DP ::Params params{ rep, nullptr , Frame (0 ), rep.length (), nullptr , DP ::Flags::FULL_MATRIX , false , max_len, HspValues::COORDS , stats, &tp };
3838 const list<Hsp> hsps = DP::BandedSwipe::swipe (targets, params);
39+ const bool unid = !config.mutual_cover .present ();
3940 for (const Hsp& h : hsps) {
4041 const int64_t member_oid = begin[h.swipe_target ].member_oid ;
4142 const Sequence member = chunk_seqs[member_oid];
4243 if (h.approx_id_percent (rep, member) < config.approx_min_id .get (0 ))
4344 continue ;
44- if (h.subject_cover_percent (member.length ()) >= config.member_cover .get (80 ))
45- out.write (MurmurHash ()(member_oid) & (RADIX_COUNT - 1 ), Edge (rep_oid, member_oid, rep.length (), member.length ()));
46- if (h.query_cover_percent (rep.length ()) >= config.member_cover .get (80 ))
47- out.write (MurmurHash ()(rep_oid) & (RADIX_COUNT - 1 ), Edge (member_oid, rep_oid, member.length (), rep.length ()));
45+ if (unid) {
46+ if (h.subject_cover_percent (member.length ()) >= config.member_cover .get (80 ))
47+ out.write (MurmurHash ()(member_oid) & (RADIX_COUNT - 1 ), Edge (rep_oid, member_oid, rep.length (), member.length ()));
48+ if (h.query_cover_percent (rep.length ()) >= config.member_cover .get (80 ))
49+ out.write (MurmurHash ()(rep_oid) & (RADIX_COUNT - 1 ), Edge (member_oid, rep_oid, member.length (), rep.length ()));
50+ }
51+ else if (h.subject_cover_percent (member.length ()) >= config.mutual_cover .get_present () && h.query_cover_percent (rep.length ()) >= config.mutual_cover .get_present ()) {
52+ int64_t oid1 = rep_oid;
53+ int64_t oid2 = member_oid;
54+ int64_t len1 = rep.length ();
55+ int64_t len2 = member.length ();
56+ if (oid1 > oid2) {
57+ std::swap (oid1, oid2);
58+ std::swap (len1, len2);
59+ }
60+ out.write (MurmurHash ()(oid1) & (RADIX_COUNT - 1 ), Edge (oid1, oid2, len1, len2));
61+ }
4862 }
4963}
5064
@@ -95,6 +109,7 @@ vector<string> align(Job& job, int chunk_count, int64_t db_size) {
95109 log_stream << " pairs=" << pairs_processed << endl;
96110 timer.go (" Deallocating memory" );
97111 pairs_file.close ();
112+ remove (pairs_file.file_name .c_str ());
98113 chunk_seqs.reset ();
99114 ++chunks_processed;
100115 timer.finish ();
0 commit comments