Commit 072fa11b authored by Haowen Zhang's avatar Haowen Zhang Committed by Li Song
Browse files

Change the name of OutputTools to MappingWriter.

parent 107b62ee
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@ CXX=g++
CXXFLAGS=-std=c++11 -Wall -O3 -fopenmp -msse4.1
LDFLAGS=-lm -lz

cpp_source=sequence_batch.cc index.cc candidate_processor.cc feature_barcode_matrix.cc ksw.cc output_tools.cc chromap.cc
cpp_source=sequence_batch.cc index.cc candidate_processor.cc feature_barcode_matrix.cc ksw.cc mapping_writer.cc chromap.cc
src_dir=src
objs_dir=objs
objs+=$(patsubst %.cc,$(objs_dir)/%.o,$(cpp_source))
+16 −16
Original line number Diff line number Diff line
@@ -500,7 +500,7 @@ void Chromap<MappingRecord>::PostProcessingInLowMemory(
    temp_mapping_file_handles_.emplace_back(temp_mapping_file_handle);
    SortOutputMappings(num_reference_sequences, mappings_on_diff_ref_seqs_);
    // double output_temp_mapping_start_time = Chromap<>::GetRealTime();
    output_tools_.OutputTempMapping(temp_mapping_file_handle.file_path,
    mapping_writer_.OutputTempMapping(temp_mapping_file_handle.file_path,
                                    num_reference_sequences,
                                    mappings_on_diff_ref_seqs_);
    // std::cerr << "Output temp mappings in " << Chromap<>::GetRealTime() -
@@ -637,7 +637,7 @@ void Chromap<MappingRecord>::PostProcessingInLowMemory(
            if (Tn5_shift_) {
              last_mapping.Tn5Shift();
            }
            output_tools_.AppendMapping(last_rid, reference, last_mapping);
            mapping_writer_.AppendMapping(last_rid, reference, last_mapping);
            ++num_mappings_passing_filters;
            //}
          }
@@ -708,7 +708,7 @@ void Chromap<MappingRecord>::PostProcessingInLowMemory(
    if (Tn5_shift_) {
      last_mapping.Tn5Shift();
    }
    output_tools_.AppendMapping(last_rid, reference, last_mapping);
    mapping_writer_.AppendMapping(last_rid, reference, last_mapping);
    ++num_mappings_passing_filters;
    //}
  }
@@ -877,12 +877,12 @@ void Chromap<MappingRecord>::MapPairedEndReads() {

  // Initialize output tools
  if (mapping_output_format_ == MAPPINGFORMAT_PAIRS) {
    output_tools_.SetPairsCustomRidRank(pairs_custom_rid_rank_);
    mapping_writer_.SetPairsCustomRidRank(pairs_custom_rid_rank_);
  }

  output_tools_.InitializeMappingOutput(
  mapping_writer_.InitializeMappingOutput(
      barcode_length_, mapping_output_file_path_, mapping_output_format_);
  output_tools_.OutputHeader(num_reference_sequences, reference);
  mapping_writer_.OutputHeader(num_reference_sequences, reference);

  CandidateProcessor candidate_processor(min_num_seeds_required_for_mapping_,
                                         max_seed_frequencies_);
@@ -930,7 +930,7 @@ void Chromap<MappingRecord>::MapPairedEndReads() {
      barcode_batch_for_loading.SwapSequenceBatch(barcode_batch);
      // TODO(Haowen): simplify this condition check.
      if (num_loaded_pairs > 0) {
        output_tools_.SetBarcodeLength(barcode_batch.GetSequenceLengthAt(0));
        mapping_writer_.SetBarcodeLength(barcode_batch.GetSequenceLengthAt(0));
      }
    }

@@ -958,7 +958,7 @@ void Chromap<MappingRecord>::MapPairedEndReads() {
      }
    }

#pragma omp parallel default(none) shared(output_mappings_not_in_whitelist_, barcode_whitelist_file_path_, trim_adapters_, window_size_, custom_rid_order_path_, split_alignment_, error_threshold_, max_seed_frequencies_, max_num_best_mappings_, max_insert_size_, num_threads_, num_reads_, low_memory_mode_, num_reference_sequences, reference, index, read_batch1, read_batch2, barcode_batch, read_batch1_for_loading, read_batch2_for_loading, barcode_batch_for_loading, candidate_processor, output_tools_, std::cerr, num_loaded_pairs_for_loading, num_loaded_pairs, mappings_on_diff_ref_seqs_for_diff_threads, mappings_on_diff_ref_seqs_for_diff_threads_for_saving, mappings_on_diff_ref_seqs_, mapping_output_file_path_, num_mappings_in_mem, max_num_mappings_in_mem, temp_mapping_file_handles_, mm_to_candidates_cache, mm_history1, mm_history2) num_threads(num_threads_) reduction(+:num_candidates_, num_mappings_, num_mapped_reads_, num_uniquely_mapped_reads_, num_barcode_in_whitelist_, num_corrected_barcode_)
#pragma omp parallel default(none) shared(output_mappings_not_in_whitelist_, barcode_whitelist_file_path_, trim_adapters_, window_size_, custom_rid_order_path_, split_alignment_, error_threshold_, max_seed_frequencies_, max_num_best_mappings_, max_insert_size_, num_threads_, num_reads_, low_memory_mode_, num_reference_sequences, reference, index, read_batch1, read_batch2, barcode_batch, read_batch1_for_loading, read_batch2_for_loading, barcode_batch_for_loading, candidate_processor, mapping_writer_, std::cerr, num_loaded_pairs_for_loading, num_loaded_pairs, mappings_on_diff_ref_seqs_for_diff_threads, mappings_on_diff_ref_seqs_for_diff_threads_for_saving, mappings_on_diff_ref_seqs_, mapping_output_file_path_, num_mappings_in_mem, max_num_mappings_in_mem, temp_mapping_file_handles_, mm_to_candidates_cache, mm_history1, mm_history2) num_threads(num_threads_) reduction(+:num_candidates_, num_mappings_, num_mapped_reads_, num_uniquely_mapped_reads_, num_barcode_in_whitelist_, num_corrected_barcode_)
    {
      thread_num_candidates = 0;
      thread_num_mappings = 0;
@@ -1261,7 +1261,7 @@ void Chromap<MappingRecord>::MapPairedEndReads() {
              temp_mapping_file_handles_.emplace_back(temp_mapping_file_handle);
              SortOutputMappings(num_reference_sequences,
                                 mappings_on_diff_ref_seqs_);
              output_tools_.OutputTempMapping(
              mapping_writer_.OutputTempMapping(
                  temp_mapping_file_handle.file_path, num_reference_sequences,
                  mappings_on_diff_ref_seqs_);
              num_mappings_in_mem = 0;
@@ -1361,7 +1361,7 @@ void Chromap<MappingRecord>::MapPairedEndReads() {
    //}
  }

  output_tools_.FinalizeMappingOutput();
  mapping_writer_.FinalizeMappingOutput();

  reference.FinalizeLoading();

@@ -1381,7 +1381,7 @@ void Chromap<MappingRecord>::OutputMappingsInVector(
      if (mapq >= mapq_threshold) {
        // if (allocate_multi_mappings_ || (only_output_unique_mappings_ &&
        // is_unique == 1)) {
        output_tools_.AppendMapping(ri, reference, *it);
        mapping_writer_.AppendMapping(ri, reference, *it);
        ++num_mappings_passing_filters;
        //}
      }
@@ -2213,9 +2213,9 @@ void Chromap<MappingRecord>::MapSingleEndReads() {
    }
  }

  output_tools_.InitializeMappingOutput(
  mapping_writer_.InitializeMappingOutput(
      barcode_length_, mapping_output_file_path_, mapping_output_format_);
  output_tools_.OutputHeader(num_reference_sequences, reference);
  mapping_writer_.OutputHeader(num_reference_sequences, reference);

  mm_cache mm_to_candidates_cache(2000003);
  mm_to_candidates_cache.SetKmerLength(kmer_size_);
@@ -2250,7 +2250,7 @@ void Chromap<MappingRecord>::MapSingleEndReads() {
      barcode_batch_for_loading.SwapSequenceBatch(barcode_batch);
      // TODO(Haowen): simplify this condition check.
      if (num_loaded_reads > 0) {
        output_tools_.SetBarcodeLength(barcode_batch.GetSequenceLengthAt(0));
        mapping_writer_.SetBarcodeLength(barcode_batch.GetSequenceLengthAt(0));
      }
    }

@@ -2279,7 +2279,7 @@ void Chromap<MappingRecord>::MapSingleEndReads() {
            num_threads_ / num_reference_sequences);
      }
    }
#pragma omp parallel default(none) shared(barcode_whitelist_file_path_, output_mappings_not_in_whitelist_, window_size_, custom_rid_order_path_, error_threshold_, max_num_best_mappings_, max_seed_frequencies_, num_threads_, num_reads_, mm_history, reference, index, read_batch, barcode_batch, read_batch_for_loading, barcode_batch_for_loading, std::cerr, num_loaded_reads_for_loading, num_loaded_reads, num_reference_sequences, mappings_on_diff_ref_seqs_for_diff_threads, mappings_on_diff_ref_seqs_for_diff_threads_for_saving, mm_to_candidates_cache, output_tools_, candidate_processor) num_threads(num_threads_) reduction(+:num_candidates_, num_mappings_, num_mapped_reads_, num_uniquely_mapped_reads_, num_barcode_in_whitelist_, num_corrected_barcode_)
#pragma omp parallel default(none) shared(barcode_whitelist_file_path_, output_mappings_not_in_whitelist_, window_size_, custom_rid_order_path_, error_threshold_, max_num_best_mappings_, max_seed_frequencies_, num_threads_, num_reads_, mm_history, reference, index, read_batch, barcode_batch, read_batch_for_loading, barcode_batch_for_loading, std::cerr, num_loaded_reads_for_loading, num_loaded_reads, num_reference_sequences, mappings_on_diff_ref_seqs_for_diff_threads, mappings_on_diff_ref_seqs_for_diff_threads_for_saving, mm_to_candidates_cache, mapping_writer_, candidate_processor) num_threads(num_threads_) reduction(+:num_candidates_, num_mappings_, num_mapped_reads_, num_uniquely_mapped_reads_, num_barcode_in_whitelist_, num_corrected_barcode_)
    {
      thread_num_candidates = 0;
      thread_num_mappings = 0;
@@ -2479,7 +2479,7 @@ void Chromap<MappingRecord>::MapSingleEndReads() {
    OutputMappings(num_reference_sequences, reference, mappings);
  }

  output_tools_.FinalizeMappingOutput();
  mapping_writer_.FinalizeMappingOutput();
  reference.FinalizeLoading();
  std::cerr << "Total time: " << GetRealTime() - real_start_time << "s.\n";
}
+3 −3
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@
#include "ksort.h"
#include "mapping_metadata.h"
#include "mapping_parameters.h"
#include "output_tools.h"
#include "mapping_writer.h"
#include "paired_end_mapping_metadata.h"
#include "sequence_batch.h"
#include "temp_mapping.h"
@@ -124,7 +124,7 @@ class Chromap {
    ParseReadFormat(mapping_parameters.read_format);
    if (mapping_parameters.barcode_translate_table_path.length() > 0) {
      std::string tmp = mapping_parameters.barcode_translate_table_path;
      output_tools_.SetBarcodeTranslateTable(tmp);
      mapping_writer_.SetBarcodeTranslateTable(tmp);
    }
  }

@@ -479,7 +479,7 @@ class Chromap {
  std::vector<std::vector<uint32_t> > tree_extras_on_diff_ref_seqs_;  // max
  // (max_level, # nodes)
  std::vector<std::pair<int, uint32_t> > tree_info_on_diff_ref_seqs_;
  OutputTools<MappingRecord> output_tools_;
  MappingWriter<MappingRecord> mapping_writer_;
  // For mapping stats.
  uint64_t num_candidates_ = 0;
  uint64_t num_mappings_ = 0;
+47 −44
Original line number Diff line number Diff line
#include "output_tools.h"
#include "mapping_writer.h"

namespace chromap {

// Specialization for BED format.
template <>
void OutputTools<MappingWithBarcode>::OutputHeader(
void MappingWriter<MappingWithBarcode>::OutputHeader(
    uint32_t num_reference_sequences, const SequenceBatch &reference) {}

template <>
void OutputTools<MappingWithBarcode>::AppendMapping(
void MappingWriter<MappingWithBarcode>::AppendMapping(
    uint32_t rid, const SequenceBatch &reference,
    const MappingWithBarcode &mapping) {
  if (mapping_output_format_ == MAPPINGFORMAT_BED) {
    std::string strand = mapping.IsPositiveStrand() ? "+" : "-";
    const char *reference_sequence_name = reference.GetSequenceNameAt(rid);
    uint32_t mapping_end_position = mapping.GetEndPosition();
    this->AppendMappingOutput(
        std::string(reference_sequence_name) + "\t" +
        std::to_string(mapping.GetStartPosition()) + "\t" +
        std::to_string(mapping_end_position) + "\t" +
        barcode_translator_.Translate(mapping.cell_barcode_, cell_barcode_length_) + 
    this->AppendMappingOutput(std::string(reference_sequence_name) + "\t" +
                              std::to_string(mapping.GetStartPosition()) +
                              "\t" + std::to_string(mapping_end_position) +
                              "\t" +
                              barcode_translator_.Translate(
                                  mapping.cell_barcode_, cell_barcode_length_) +
                              "\t" + std::to_string(mapping.num_dups_) + "\n");
  } else {
    std::string strand = mapping.IsPositiveStrand() ? "+" : "-";
@@ -34,11 +35,11 @@ void OutputTools<MappingWithBarcode>::AppendMapping(
}

template <>
void OutputTools<MappingWithoutBarcode>::OutputHeader(
void MappingWriter<MappingWithoutBarcode>::OutputHeader(
    uint32_t num_reference_sequences, const SequenceBatch &reference) {}

template <>
void OutputTools<MappingWithoutBarcode>::AppendMapping(
void MappingWriter<MappingWithoutBarcode>::AppendMapping(
    uint32_t rid, const SequenceBatch &reference,
    const MappingWithoutBarcode &mapping) {
  if (mapping_output_format_ == MAPPINGFORMAT_BED) {
@@ -64,11 +65,11 @@ void OutputTools<MappingWithoutBarcode>::AppendMapping(

// Specialization for BEDPE format.
template <>
void OutputTools<PairedEndMappingWithoutBarcode>::OutputHeader(
void MappingWriter<PairedEndMappingWithoutBarcode>::OutputHeader(
    uint32_t num_reference_sequences, const SequenceBatch &reference) {}

template <>
void OutputTools<PairedEndMappingWithoutBarcode>::AppendMapping(
void MappingWriter<PairedEndMappingWithoutBarcode>::AppendMapping(
    uint32_t rid, const SequenceBatch &reference,
    const PairedEndMappingWithoutBarcode &mapping) {
  if (mapping_output_format_ == MAPPINGFORMAT_BED) {
@@ -114,23 +115,24 @@ void OutputTools<PairedEndMappingWithoutBarcode>::AppendMapping(
}

template <>
void OutputTools<PairedEndMappingWithBarcode>::OutputHeader(
void MappingWriter<PairedEndMappingWithBarcode>::OutputHeader(
    uint32_t num_reference_sequences, const SequenceBatch &reference) {}

template <>
void OutputTools<PairedEndMappingWithBarcode>::AppendMapping(
void MappingWriter<PairedEndMappingWithBarcode>::AppendMapping(
    uint32_t rid, const SequenceBatch &reference,
    const PairedEndMappingWithBarcode &mapping) {
  if (mapping_output_format_ == MAPPINGFORMAT_BED) {
    std::string strand = mapping.IsPositiveStrand() ? "+" : "-";
    const char *reference_sequence_name = reference.GetSequenceNameAt(rid);
    uint32_t mapping_end_position = mapping.GetEndPosition();
    this->AppendMappingOutput(
        std::string(reference_sequence_name) + "\t" +
        std::to_string(mapping.GetStartPosition()) + "\t" +
        std::to_string(mapping_end_position) + "\t" +
        barcode_translator_.Translate(mapping.cell_barcode_, cell_barcode_length_) + "\t" +
        std::to_string(mapping.num_dups_) + "\n");
    this->AppendMappingOutput(std::string(reference_sequence_name) + "\t" +
                              std::to_string(mapping.GetStartPosition()) +
                              "\t" + std::to_string(mapping_end_position) +
                              "\t" +
                              barcode_translator_.Translate(
                                  mapping.cell_barcode_, cell_barcode_length_) +
                              "\t" + std::to_string(mapping.num_dups_) + "\n");
  } else {
    bool positive_strand = mapping.IsPositiveStrand();
    uint32_t positive_read_end =
@@ -166,11 +168,11 @@ void OutputTools<PairedEndMappingWithBarcode>::AppendMapping(

// Specialization for PAF format.
template <>
void OutputTools<PAFMapping>::OutputHeader(uint32_t num_reference_sequences,
void MappingWriter<PAFMapping>::OutputHeader(uint32_t num_reference_sequences,
                                             const SequenceBatch &reference) {}

template <>
void OutputTools<PAFMapping>::AppendMapping(uint32_t rid,
void MappingWriter<PAFMapping>::AppendMapping(uint32_t rid,
                                              const SequenceBatch &reference,
                                              const PAFMapping &mapping) {
  const char *reference_sequence_name = reference.GetSequenceNameAt(rid);
@@ -191,7 +193,7 @@ void OutputTools<PAFMapping>::AppendMapping(uint32_t rid,
}

template <>
void OutputTools<PAFMapping>::OutputTempMapping(
void MappingWriter<PAFMapping>::OutputTempMapping(
    const std::string &temp_mapping_output_file_path,
    uint32_t num_reference_sequences,
    const std::vector<std::vector<PAFMapping> > &mappings) {
@@ -215,11 +217,11 @@ void OutputTools<PAFMapping>::OutputTempMapping(

// Specialization for PairedPAF format.
template <>
void OutputTools<PairedPAFMapping>::OutputHeader(
void MappingWriter<PairedPAFMapping>::OutputHeader(
    uint32_t num_reference_sequences, const SequenceBatch &reference) {}

template <>
void OutputTools<PairedPAFMapping>::OutputTempMapping(
void MappingWriter<PairedPAFMapping>::OutputTempMapping(
    const std::string &temp_mapping_output_file_path,
    uint32_t num_reference_sequences,
    const std::vector<std::vector<PairedPAFMapping> > &mappings) {
@@ -242,7 +244,7 @@ void OutputTools<PairedPAFMapping>::OutputTempMapping(
}

template <>
void OutputTools<PairedPAFMapping>::AppendMapping(
void MappingWriter<PairedPAFMapping>::AppendMapping(
    uint32_t rid, const SequenceBatch &reference,
    const PairedPAFMapping &mapping) {
  bool positive_strand = mapping.IsPositiveStrand();
@@ -305,7 +307,7 @@ void OutputTools<PairedPAFMapping>::AppendMapping(

// Specialization for SAM format.
template <>
void OutputTools<SAMMapping>::OutputHeader(uint32_t num_reference_sequences,
void MappingWriter<SAMMapping>::OutputHeader(uint32_t num_reference_sequences,
                                             const SequenceBatch &reference) {
  for (uint32_t rid = 0; rid < num_reference_sequences; ++rid) {
    const char *reference_sequence_name = reference.GetSequenceNameAt(rid);
@@ -317,7 +319,7 @@ void OutputTools<SAMMapping>::OutputHeader(uint32_t num_reference_sequences,
}

template <>
void OutputTools<SAMMapping>::AppendMapping(uint32_t rid,
void MappingWriter<SAMMapping>::AppendMapping(uint32_t rid,
                                              const SequenceBatch &reference,
                                              const SAMMapping &mapping) {
  // const char *reference_sequence_name = reference.GetSequenceNameAt(rid);
@@ -338,14 +340,15 @@ void OutputTools<SAMMapping>::AppendMapping(uint32_t rid,
      mapping.GenerateIntTagString("NM", mapping.NM_) +
      "\tMD:Z:" + mapping.MD_);
  if (cell_barcode_length_ > 0) {
    this->AppendMappingOutput(
        "\tCB:Z:" + barcode_translator_.Translate(mapping.cell_barcode_, cell_barcode_length_));
    this->AppendMappingOutput("\tCB:Z:" +
                              barcode_translator_.Translate(
                                  mapping.cell_barcode_, cell_barcode_length_));
  }
  this->AppendMappingOutput("\n");
}

template <>
void OutputTools<SAMMapping>::OutputTempMapping(
void MappingWriter<SAMMapping>::OutputTempMapping(
    const std::string &temp_mapping_output_file_path,
    uint32_t num_reference_sequences,
    const std::vector<std::vector<SAMMapping> > &mappings) {
@@ -369,7 +372,7 @@ void OutputTools<SAMMapping>::OutputTempMapping(

// Specialization for pairs format.
template <>
void OutputTools<PairsMapping>::OutputHeader(uint32_t num_reference_sequences,
void MappingWriter<PairsMapping>::OutputHeader(uint32_t num_reference_sequences,
                                               const SequenceBatch &reference) {
  std::vector<uint32_t> rid_order;
  rid_order.resize(num_reference_sequences);
@@ -391,7 +394,7 @@ void OutputTools<PairsMapping>::OutputHeader(uint32_t num_reference_sequences,
}

template <>
void OutputTools<PairsMapping>::AppendMapping(uint32_t rid,
void MappingWriter<PairsMapping>::AppendMapping(uint32_t rid,
                                                const SequenceBatch &reference,
                                                const PairsMapping &mapping) {
  const char *reference_sequence_name1 =
@@ -408,7 +411,7 @@ void OutputTools<PairsMapping>::AppendMapping(uint32_t rid,
}

template <>
void OutputTools<PairsMapping>::OutputTempMapping(
void MappingWriter<PairsMapping>::OutputTempMapping(
    const std::string &temp_mapping_output_file_path,
    uint32_t num_reference_sequences,
    const std::vector<std::vector<PairsMapping> > &mappings) {
+35 −35
Original line number Diff line number Diff line
#ifndef OUTPUTTOOLS_H_
#define OUTPUTTOOLS_H_
#ifndef MAPPING_WRITER_H_
#define MAPPING_WRITER_H_

#include <assert.h>

@@ -28,10 +28,10 @@ bool ReadIdLess(const std::pair<uint32_t, MappingRecord> &a,
}

template <typename MappingRecord>
class OutputTools {
class MappingWriter {
 public:
  OutputTools() {}
  ~OutputTools() {}
  MappingWriter() {}
  ~MappingWriter() {}

  // Output the mappings in a temp file.
  inline void OutputTempMapping(
@@ -114,106 +114,106 @@ class OutputTools {

// Specialization for BED format.
template <>
void OutputTools<MappingWithBarcode>::OutputHeader(
void MappingWriter<MappingWithBarcode>::OutputHeader(
    uint32_t num_reference_sequences, const SequenceBatch &reference);

template <>
void OutputTools<MappingWithBarcode>::AppendMapping(
void MappingWriter<MappingWithBarcode>::AppendMapping(
    uint32_t rid, const SequenceBatch &reference,
    const MappingWithBarcode &mapping);

template <>
void OutputTools<MappingWithoutBarcode>::OutputHeader(
void MappingWriter<MappingWithoutBarcode>::OutputHeader(
    uint32_t num_reference_sequences, const SequenceBatch &reference);

template <>
void OutputTools<MappingWithoutBarcode>::AppendMapping(
void MappingWriter<MappingWithoutBarcode>::AppendMapping(
    uint32_t rid, const SequenceBatch &reference,
    const MappingWithoutBarcode &mapping);

// Specialization for BEDPE format.
template <>
void OutputTools<PairedEndMappingWithoutBarcode>::OutputHeader(
void MappingWriter<PairedEndMappingWithoutBarcode>::OutputHeader(
    uint32_t num_reference_sequences, const SequenceBatch &reference);

template <>
void OutputTools<PairedEndMappingWithoutBarcode>::AppendMapping(
void MappingWriter<PairedEndMappingWithoutBarcode>::AppendMapping(
    uint32_t rid, const SequenceBatch &reference,
    const PairedEndMappingWithoutBarcode &mapping);

template <>
void OutputTools<PairedEndMappingWithBarcode>::OutputHeader(
void MappingWriter<PairedEndMappingWithBarcode>::OutputHeader(
    uint32_t num_reference_sequences, const SequenceBatch &reference);

template <>
void OutputTools<PairedEndMappingWithBarcode>::AppendMapping(
void MappingWriter<PairedEndMappingWithBarcode>::AppendMapping(
    uint32_t rid, const SequenceBatch &reference,
    const PairedEndMappingWithBarcode &mapping);

// Specialization for PAF format.
template <>
void OutputTools<PAFMapping>::OutputHeader(uint32_t num_reference_sequences,
void MappingWriter<PAFMapping>::OutputHeader(uint32_t num_reference_sequences,
                                             const SequenceBatch &reference);

template <>
void OutputTools<PAFMapping>::AppendMapping(uint32_t rid,
void MappingWriter<PAFMapping>::AppendMapping(uint32_t rid,
                                              const SequenceBatch &reference,
                                              const PAFMapping &mapping);

template <>
void OutputTools<PAFMapping>::OutputTempMapping(
void MappingWriter<PAFMapping>::OutputTempMapping(
    const std::string &temp_mapping_output_file_path,
    uint32_t num_reference_sequences,
    const std::vector<std::vector<PAFMapping> > &mappings);

// Specialization for PairedPAF format.
template <>
void OutputTools<PairedPAFMapping>::OutputHeader(
void MappingWriter<PairedPAFMapping>::OutputHeader(
    uint32_t num_reference_sequences, const SequenceBatch &reference);

template <>
void OutputTools<PairedPAFMapping>::OutputTempMapping(
void MappingWriter<PairedPAFMapping>::OutputTempMapping(
    const std::string &temp_mapping_output_file_path,
    uint32_t num_reference_sequences,
    const std::vector<std::vector<PairedPAFMapping> > &mappings);

template <>
void OutputTools<PairedPAFMapping>::AppendMapping(
void MappingWriter<PairedPAFMapping>::AppendMapping(
    uint32_t rid, const SequenceBatch &reference,
    const PairedPAFMapping &mapping);

// Specialization for SAM format.
template <>
void OutputTools<SAMMapping>::OutputHeader(uint32_t num_reference_sequences,
void MappingWriter<SAMMapping>::OutputHeader(uint32_t num_reference_sequences,
                                             const SequenceBatch &reference);

template <>
void OutputTools<SAMMapping>::AppendMapping(uint32_t rid,
void MappingWriter<SAMMapping>::AppendMapping(uint32_t rid,
                                              const SequenceBatch &reference,
                                              const SAMMapping &mapping);

template <>
void OutputTools<SAMMapping>::OutputTempMapping(
void MappingWriter<SAMMapping>::OutputTempMapping(
    const std::string &temp_mapping_output_file_path,
    uint32_t num_reference_sequences,
    const std::vector<std::vector<SAMMapping> > &mappings);

// Specialization for pairs format.
template <>
void OutputTools<PairsMapping>::OutputHeader(uint32_t num_reference_sequences,
void MappingWriter<PairsMapping>::OutputHeader(uint32_t num_reference_sequences,
                                               const SequenceBatch &reference);

template <>
void OutputTools<PairsMapping>::AppendMapping(uint32_t rid,
void MappingWriter<PairsMapping>::AppendMapping(uint32_t rid,
                                                const SequenceBatch &reference,
                                                const PairsMapping &mapping);

template <>
void OutputTools<PairsMapping>::OutputTempMapping(
void MappingWriter<PairsMapping>::OutputTempMapping(
    const std::string &temp_mapping_output_file_path,
    uint32_t num_reference_sequences,
    const std::vector<std::vector<PairsMapping> > &mappings);

}  // namespace chromap

#endif  // OUTPUTTOOLS_H_
#endif  // MAPPING_WRITER_H_