Commit f7c15354 authored by Li's avatar Li
Browse files

Merge branch 'master' into sam_pair

parents e2775f7f 29bc02d0
Loading
Loading
Loading
Loading
+91 −47
Original line number Diff line number Diff line
@@ -321,6 +321,49 @@ uint32_t Chromap::SampleInputBarcodesAndExamineLength() {
void Chromap::LoadBarcodeWhitelist() {
  double real_start_time = GetRealTime();
  int num_barcodes = 0;

  if (1) {
    gzFile barcode_whitelist_file = 
      gzopen(mapping_parameters_.barcode_whitelist_file_path.c_str(), "r"); 
    const uint32_t barcode_buffer_size = 256;
    char barcode[barcode_buffer_size];
    while (gzgets(barcode_whitelist_file, barcode, barcode_buffer_size) != NULL) {
      size_t barcode_length = strlen(barcode);
      if (barcode[barcode_length - 1] == '\n') {
        barcode[barcode_length - 1] = '\0';
        --barcode_length;
      }
      if (barcode_length > 32) {
        ExitWithMessage("ERROR: barcode length is greater than 32!");
      }

      if (barcode_length != barcode_length_) {
        if (num_barcodes == 0) {
          ExitWithMessage(
              "ERROR: whitelist and input barcode lengths are not equal!");
        } else {
          ExitWithMessage(
              "ERROR: barcode lengths are not equal in the whitelist!");
        }
      }
      
      uint64_t barcode_key = GenerateSeedFromSequence(
          barcode, barcode_length, 0, barcode_length);
      
      int khash_return_code;
      khiter_t barcode_whitelist_lookup_table_iterator =
        kh_put(k64_seq, barcode_whitelist_lookup_table_, barcode_key,
            &khash_return_code);
      kh_value(barcode_whitelist_lookup_table_,
          barcode_whitelist_lookup_table_iterator) = 0;
      assert(khash_return_code != -1 && khash_return_code != 0);
      ++num_barcodes;
    }
    if (!gzeof(barcode_whitelist_file)) {
      ExitWithMessage("ERROR: barcode whitelist file does not exist or is truncated!");
    }
    gzclose(barcode_whitelist_file);
  } else { 
    std::ifstream barcode_whitelist_file_stream(
        mapping_parameters_.barcode_whitelist_file_path);
    std::string barcode_whitelist_file_line;
@@ -374,6 +417,7 @@ void Chromap::LoadBarcodeWhitelist() {
      ++num_barcodes;
    }
    barcode_whitelist_file_stream.close();
  }
  std::cerr << "Loaded " << num_barcodes << " barcodes in "
            << GetRealTime() - real_start_time << "s.\n";
}
+1 −1
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@
#include "temp_mapping.h"
#include "utils.h"

#define CHROMAP_VERSION "0.2.3-r458"
#define CHROMAP_VERSION "0.2.3-r462"

namespace chromap {