Commit 46072416 authored by Haowen Zhang's avatar Haowen Zhang
Browse files

Use struct to hold index parameters.

parent 8256b385
Loading
Loading
Loading
Loading
+17 −23
Original line number Diff line number Diff line
@@ -6029,10 +6029,8 @@ void ChromapDriver::ParseArgsAndRun(int argc, char *argv[]) {
    return;
  }
  // Parameters and their default
  IndexParameters index_parameters;
  MappingParameters mapping_parameters;
  int min_fragment_length = 30;
  int kmer_size = 17;
  int window_size = 7;

  if (result.count("preset")) {
    std::string read_type = result["preset"].as<std::string>();
@@ -6065,23 +6063,23 @@ void ChromapDriver::ParseArgsAndRun(int argc, char *argv[]) {
  }
  // Optional parameters
  if (result.count("min-frag-length")) {
    min_fragment_length = result["min-frag-length"].as<int>();
    int min_fragment_length = result["min-frag-length"].as<int>();
    if (min_fragment_length <= 60) {
      kmer_size = 17;
      window_size = 7;
      index_parameters.kmer_size = 17;
      index_parameters.window_size = 7;
    } else if (min_fragment_length <= 80) {
      kmer_size = 19;
      window_size = 10;
      index_parameters.kmer_size = 19;
      index_parameters.window_size = 10;
    } else {
      kmer_size = 23;
      window_size = 11;
      index_parameters.kmer_size = 23;
      index_parameters.window_size = 11;
    }
  }
  if (result.count("k")) {
    kmer_size = result["kmer"].as<int>();
    index_parameters.kmer_size = result["kmer"].as<int>();
  }
  if (result.count("w")) {
    window_size = result["window"].as<int>();
    index_parameters.window_size = result["window"].as<int>();
  }
  if (result.count("e")) {
    mapping_parameters.error_threshold = result["error-threshold"].as<int>();
@@ -6232,26 +6230,22 @@ void ChromapDriver::ParseArgsAndRun(int argc, char *argv[]) {

  std::cerr << std::setprecision(2) << std::fixed;
  if (result.count("i")) {
    std::string reference_file_path;
    if (result.count("r")) {
      reference_file_path = result["ref"].as<std::string>();
      index_parameters.reference_file_path = result["ref"].as<std::string>();
    } else {
      chromap::Chromap<>::ExitWithMessage("No reference specified!");
    }
    std::string output_file_path;
    if (result.count("o")) {
      output_file_path = result["output"].as<std::string>();
      index_parameters.index_output_file_path = result["output"].as<std::string>();
    } else {
      chromap::Chromap<>::ExitWithMessage("No output file specified!");
    }
    std::cerr << "Build index for the reference.\n";
    std::cerr << "Kmer length: " << kmer_size
              << ", window size: " << window_size << "\n";
    std::cerr << "Reference file: " << reference_file_path << "\n";
    std::cerr << "Output file: " << output_file_path << "\n";
    chromap::Chromap<> chromap_for_indexing(
        kmer_size, window_size, /*num_threads=*/1, reference_file_path,
        output_file_path);
    std::cerr << "Kmer length: " << index_parameters.kmer_size
              << ", window size: " << index_parameters.window_size << "\n";
    std::cerr << "Reference file: " << index_parameters.reference_file_path << "\n";
    std::cerr << "Output file: " << index_parameters.index_output_file_path << "\n";
    chromap::Chromap<> chromap_for_indexing(index_parameters);
    chromap_for_indexing.ConstructIndex();
  } else if (result.count("1")) {
    std::cerr << "Start to map reads.\n";
+14 −8
Original line number Diff line number Diff line
@@ -64,6 +64,14 @@ struct BarcodeWithQual {
  }
};

struct IndexParameters {
  int kmer_size = 17;
  int window_size = 7;
  int num_threads = 1;
  std::string reference_file_path;
  std::string index_output_file_path;
};

struct MappingParameters {
  int error_threshold = 8;
  int match_score = 1;
@@ -131,14 +139,12 @@ template <typename MappingRecord = MappingWithoutBarcode>
class Chromap {
 public:
  // For index construction
  Chromap(int kmer_size, int window_size, int num_threads,
          const std::string &reference_file_path,
          const std::string &index_file_path)
      : kmer_size_(kmer_size),
        window_size_(window_size),
        num_threads_(num_threads),
        reference_file_path_(reference_file_path),
        index_file_path_(index_file_path) {
  Chromap(const IndexParameters &index_parameters)
      : kmer_size_(index_parameters.kmer_size),
        window_size_(index_parameters.window_size),
        num_threads_(index_parameters.num_threads),
        reference_file_path_(index_parameters.reference_file_path),
        index_file_path_(index_parameters.index_output_file_path) {
    barcode_lookup_table_ = NULL;
    barcode_whitelist_lookup_table_ = NULL;
    barcode_histogram_ = NULL;