Commit 4af36173 authored by Li's avatar Li Committed by Li Song
Browse files

Fix a bug in summary the alignment stats when outputing SAM format

parent 16792ede
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1119,6 +1119,8 @@ void Chromap::MapPairedEndReads() {
    //  }
    //}
  }
  if (mapping_parameters_.mapping_output_format == MAPPINGFORMAT_SAM)
    mapping_writer.AdjustSummaryPairedEndOverCount() ;
  mapping_writer.OutputSummaryMetadata();

  reference.FinalizeLoading();
+12 −0
Original line number Diff line number Diff line
@@ -70,6 +70,7 @@ class MappingWriter {

  void OutputSummaryMetadata();
  void UpdateSummaryMetadata(uint64_t barcode, int type, int change);
  void AdjustSummaryPairedEndOverCount();

 protected:
  void AppendMapping(uint32_t rid, const SequenceBatch &reference,
@@ -438,8 +439,10 @@ void MappingWriter<MappingRecord>::OutputMappings(
template <typename MappingRecord>
void MappingWriter<MappingRecord>::OutputSummaryMetadata() {
  if (!mapping_parameters_.summary_metadata_file_path.empty())
  {
    summary_metadata_.Output(mapping_parameters_.summary_metadata_file_path.c_str());
  }
}

template <typename MappingRecord>
  void MappingWriter<MappingRecord>::UpdateSummaryMetadata(uint64_t barcode, int type, int change)
@@ -448,6 +451,15 @@ template <typename MappingRecord>
    summary_metadata_.UpdateCount(barcode, type, change);
}

template <typename MappingRecord>
  void MappingWriter<MappingRecord>::AdjustSummaryPairedEndOverCount()
{
  if (!mapping_parameters_.summary_metadata_file_path.empty()
      && mapping_parameters_.mapping_output_format == MAPPINGFORMAT_SAM)
      summary_metadata_.AdjustPairedEndOverCount() ; 
}


// Specialization for BED format.
template <>
void MappingWriter<MappingWithBarcode>::OutputHeader(
+11 −0
Original line number Diff line number Diff line
@@ -75,6 +75,17 @@ class SummaryMetadata {
    barcode_length_ = l;
  }

  // In SAM format for paired-end data, some count will be counted twice
  void AdjustPairedEndOverCount() {
    khiter_t k;
    for (k = kh_begin(barcode_metadata_); k != kh_end(barcode_metadata_); ++k)
      if (kh_exist(barcode_metadata_, k)) {
        kh_value(barcode_metadata_, k).counts[SUMMARY_METADATA_DUP] /= 2 ;
        kh_value(barcode_metadata_, k).counts[SUMMARY_METADATA_LOWMAPQ] /= 2 ;
        kh_value(barcode_metadata_, k).counts[SUMMARY_METADATA_MAPPED] /= 2 ;
      } 
  }

 private:
  khash_t(k64_barcode_metadata) *barcode_metadata_;    
  int barcode_length_;