Commit 025dd8ec authored by Haowen Zhang's avatar Haowen Zhang
Browse files

Move mapping moving functions to MappingProcessor.

parent 63f985cf
Loading
Loading
Loading
Loading
+10 −36
Original line number Diff line number Diff line
@@ -1031,7 +1031,8 @@ void Chromap<MappingRecord>::MapPairedEndReads() {
#pragma omp task
          {
            // Handle output
            num_mappings_in_mem += MoveMappingsInBuffersToMappingContainer(
            num_mappings_in_mem +=
                mapping_processor.MoveMappingsInBuffersToMappingContainer(
                    num_reference_sequences,
                    mappings_on_diff_ref_seqs_for_diff_threads_for_saving,
                    mappings_on_diff_ref_seqs);
@@ -1424,7 +1425,8 @@ void Chromap<MappingRecord>::MapSingleEndReads() {
              mappings_on_diff_ref_seqs_for_diff_threads_for_saving);
#pragma omp task
          {
            num_mappings_in_mem += MoveMappingsInBuffersToMappingContainer(
            num_mappings_in_mem +=
                mapping_processor.MoveMappingsInBuffersToMappingContainer(
                    num_reference_sequences,
                    mappings_on_diff_ref_seqs_for_diff_threads_for_saving,
                    mappings_on_diff_ref_seqs);
@@ -1577,34 +1579,6 @@ void Chromap<MappingRecord>::ConstructIndex() {
  reference.FinalizeLoading();
}

template <typename MappingRecord>
uint32_t Chromap<MappingRecord>::MoveMappingsInBuffersToMappingContainer(
    uint32_t num_reference_sequences,
    std::vector<std::vector<std::vector<MappingRecord>>>
        &mappings_on_diff_ref_seqs_for_diff_threads_for_saving,
    std::vector<std::vector<MappingRecord>> &mappings_on_diff_ref_seqs) {
  // double real_start_time = Chromap<>::GetRealTime();
  uint32_t num_moved_mappings = 0;
  for (int ti = 0; ti < num_threads_; ++ti) {
    for (uint32_t i = 0; i < num_reference_sequences; ++i) {
      num_moved_mappings +=
          mappings_on_diff_ref_seqs_for_diff_threads_for_saving[ti][i].size();
      mappings_on_diff_ref_seqs[i].insert(
          mappings_on_diff_ref_seqs[i].end(),
          std::make_move_iterator(
              mappings_on_diff_ref_seqs_for_diff_threads_for_saving[ti][i]
                  .begin()),
          std::make_move_iterator(
              mappings_on_diff_ref_seqs_for_diff_threads_for_saving[ti][i]
                  .end()));
      mappings_on_diff_ref_seqs_for_diff_threads_for_saving[ti][i].clear();
    }
  }
  // std::cerr << "Moved mappings in " << Chromap<>::GetRealTime() -
  // real_start_time << "s.\n";
  return num_moved_mappings;
}

template <typename MappingRecord>
void Chromap<MappingRecord>::OutputBarcodeStatistics() {
  std::cerr << "Number of barcodes in whitelist: " << num_barcode_in_whitelist_
+0 −6
Original line number Diff line number Diff line
@@ -173,12 +173,6 @@ class Chromap {
                        uint64_t &num_barcode_in_whitelist,
                        uint64_t &num_corrected_barcode);

  uint32_t MoveMappingsInBuffersToMappingContainer(
      uint32_t num_reference_sequences,
      std::vector<std::vector<std::vector<MappingRecord> > >
          &mappings_on_diff_ref_seqs_for_diff_threads_for_saving,
      std::vector<std::vector<MappingRecord> > &mappings_on_diff_ref_seqs);

  void OutputBarcodeStatistics();

  void OutputMappingStatistics();
+38 −1
Original line number Diff line number Diff line
@@ -60,6 +60,12 @@ class MappingProcessor {
      uint32_t num_reference_sequences,
      std::vector<std::vector<MappingRecord>> &mappings);

  uint32_t MoveMappingsInBuffersToMappingContainer(
      uint32_t num_reference_sequences,
      std::vector<std::vector<std::vector<MappingRecord>>>
          &mappings_on_diff_ref_seqs_for_diff_threads_for_saving,
      std::vector<std::vector<MappingRecord>> &mappings_on_diff_ref_seqs);

 private:
  void BuildAugmentedTree(
      uint32_t ref_id,
@@ -386,6 +392,37 @@ void MappingProcessor<MappingRecord>::ApplyTn5ShiftOnMappings(
  std::cerr << "# shifted mappings: " << num_shifted_mappings << ".\n";
}

template <typename MappingRecord>
uint32_t
MappingProcessor<MappingRecord>::MoveMappingsInBuffersToMappingContainer(
    uint32_t num_reference_sequences,
    std::vector<std::vector<std::vector<MappingRecord>>>
        &mappings_on_diff_ref_seqs_for_diff_threads_for_saving,
    std::vector<std::vector<MappingRecord>> &mappings_on_diff_ref_seqs) {
  // double real_start_time = Chromap<>::GetRealTime();
  uint32_t num_moved_mappings = 0;
  for (size_t ti = 0;
       ti < mappings_on_diff_ref_seqs_for_diff_threads_for_saving.size();
       ++ti) {
    for (uint32_t i = 0; i < num_reference_sequences; ++i) {
      num_moved_mappings +=
          mappings_on_diff_ref_seqs_for_diff_threads_for_saving[ti][i].size();
      mappings_on_diff_ref_seqs[i].insert(
          mappings_on_diff_ref_seqs[i].end(),
          std::make_move_iterator(
              mappings_on_diff_ref_seqs_for_diff_threads_for_saving[ti][i]
                  .begin()),
          std::make_move_iterator(
              mappings_on_diff_ref_seqs_for_diff_threads_for_saving[ti][i]
                  .end()));
      mappings_on_diff_ref_seqs_for_diff_threads_for_saving[ti][i].clear();
    }
  }
  // std::cerr << "Moved mappings in " << Chromap<>::GetRealTime() -
  // real_start_time << "s.\n";
  return num_moved_mappings;
}

}  // namespace chromap

#endif  // MAPPING_PROCESSOR_H_