Commit 077b2e50 authored by Li's avatar Li
Browse files

Fix a bug causing cache store empty entries.

parent 7d41b617
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -1175,6 +1175,7 @@ void Chromap<MappingRecord>::MapPairedEndReads() {
                //std::cerr << "After generation, #pc1: " << positive_candidates1.size() << ", #nc1: " << negative_candidates1.size() << ", #pc2: " << positive_candidates2.size() << ", #nc2: " << negative_candidates2.size() << "\n";
                uint32_t current_num_candidates2 = positive_candidates2.size() + negative_candidates2.size();
                if (pair_index < num_loaded_pairs && (pair_index < num_loaded_pairs / num_threads_ || num_reads_ <= 5000000)) {
									mm_history1[pair_index].timestamp = mm_history2[pair_index].timestamp = num_reads_;
                  mm_history1[pair_index].minimizers = minimizers1;
                  mm_history1[pair_index].positive_candidates = positive_candidates1;
                  mm_history1[pair_index].negative_candidates = negative_candidates1;
@@ -1333,6 +1334,9 @@ void Chromap<MappingRecord>::MapPairedEndReads() {
            if (num_reads_ > 5000000 && pair_index >= num_loaded_pairs / num_threads_) {
              break;
            }
						if (mm_history1[pair_index].timestamp != num_reads_)
							continue ;

            mm_to_candidates_cache.Update(mm_history1[pair_index].minimizers, mm_history1[pair_index].positive_candidates, mm_history1[pair_index].negative_candidates, mm_history1[pair_index].repetitive_seed_length);
            mm_to_candidates_cache.Update(mm_history2[pair_index].minimizers, mm_history2[pair_index].positive_candidates, mm_history2[pair_index].negative_candidates, mm_history2[pair_index].repetitive_seed_length);
            /*if (mm_history1[pair_index].positive_candidates.size() < mm_history1[pair_index].positive_candidates.capacity() / 50) {
@@ -2048,6 +2052,7 @@ void Chromap<MappingRecord>::MapSingleEndReads() {
                index.GenerateCandidates(error_threshold_, minimizers, &repetitive_seed_length, &positive_hits, &negative_hits, &positive_candidates, &negative_candidates);
              }
              if (read_index < num_loaded_reads && (read_index <  num_loaded_reads / num_threads_ || num_reads_ <= 2500000)) {
                mm_history[read_index].timestamp = num_reads_;
                mm_history[read_index].minimizers = minimizers;
                mm_history[read_index].positive_candidates = positive_candidates;
                mm_history[read_index].negative_candidates = negative_candidates;
@@ -2079,6 +2084,8 @@ void Chromap<MappingRecord>::MapSingleEndReads() {
            if (num_reads_ > 2500000 && read_index >= num_loaded_reads / num_threads_) {
              break;
            }
            if (mm_history[read_index].timestamp != num_reads_)
              continue;
            mm_to_candidates_cache.Update(mm_history[read_index].minimizers, mm_history[read_index].positive_candidates, mm_history[read_index].negative_candidates, mm_history[read_index].repetitive_seed_length);
            if (mm_history[read_index].positive_candidates.size() < mm_history[read_index].positive_candidates.capacity() / 2) {
              std::vector<Candidate>().swap(mm_history[read_index].positive_candidates);
+1 −1
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ struct StackCell {
};

struct _mm_history {
	bool skip;
	unsigned int timestamp;
	std::vector<std::pair<uint64_t, uint64_t> > minimizers;
	std::vector<Candidate> positive_candidates;
	std::vector<Candidate> negative_candidates;