Skip to content

Commit

Permalink
Use an asterisk for empty SEQ fields in SAM
Browse files Browse the repository at this point in the history
Otherwise (when the field is left empty), samtools view converts it to "*"
in the output, which makes testing harder because of spurious differences.
  • Loading branch information
marcelm committed Nov 17, 2023
1 parent 8c74210 commit fd798bd
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 8 deletions.
10 changes: 5 additions & 5 deletions src/sam.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ void Sam::add_unmapped(const KSeq& record, uint16_t flags) {
sam_string.append("\t");
sam_string.append(std::to_string(flags));
sam_string.append("\t*\t0\t" SAM_UNMAPPED_MAPQ_STRING "\t*\t*\t0\t0\t");
sam_string.append(record.seq);
append_seq(record.seq);
append_qual(record.qual);
append_rg_and_newline();
}
Expand All @@ -105,7 +105,7 @@ void Sam::add_unmapped_mate(const KSeq& record, uint16_t flags, const std::strin
sam_string.append("\t");
sam_string.append(std::to_string(mate_pos + 1));
sam_string.append("\t0\t");
sam_string.append(record.seq);
append_seq(record.seq);
append_qual(record.qual);
append_rg_and_newline();
}
Expand Down Expand Up @@ -176,11 +176,11 @@ void Sam::add_record(
sam_string.append("\t");

if (flags & SECONDARY) {
sam_string.append("*");
append_seq("");
} else if (flags & REVERSE) {
sam_string.append(query_sequence_rc);
append_seq(query_sequence_rc);
} else {
sam_string.append(query_sequence);
append_seq(query_sequence);
}

if (!(flags & UNMAP)) {
Expand Down
5 changes: 5 additions & 0 deletions src/sam.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,11 @@ class Sam {

private:
void add_record(const std::string& query_name, uint16_t flags, const std::string& reference_name, uint32_t pos, uint8_t mapq, const Cigar& cigar, const std::string& mate_reference_name, uint32_t mate_pos, int32_t template_len, const std::string& query_sequence, const std::string& query_sequence_rc, const std::string& qual, int ed, int aln_score, const Details& details);

void append_seq(const std::string& seq) {
sam_string.append(seq.empty() ? "*" : seq);
}

void append_qual(const std::string& qual) {
sam_string.append("\t");
sam_string.append(qual.empty() ? "*" : qual);
Expand Down
4 changes: 2 additions & 2 deletions tests/phix.pe.sam
Original file line number Diff line number Diff line change
Expand Up @@ -89,5 +89,5 @@ rescuable.43 83 NC_001422.1 3137 60 120S14=1X4=1X9=1X4=1X4=1X9=1X4=1X4=1X4=1X9=1
rescuable.43 163 NC_001422.1 2955 60 1X177=1X122= = 3137 362 NTTGCTTCTGCTCTTGCTGGTGGCGCCATGTCTAAATTGTTTGGAGGCGGTCAAAAAGCCGCCTCCGGTGGCATTCAAGGTGATGTGCTTGCTACCGATAACAATACTGTAGGCATGGGTGATGCTGGTATTAAATCTGCCATTCAAGGCTCTAATGTTCCTAACCCTGATGAGGCCGTCCCTAGTTTTGTTTCTGGTGCTATGGCTAAAGCTGGTAAAGGACTTCTTGAAGGTACGTTGCAGGCTGGCACTTCTGCCGTTTCTGATAAGTTGCTTGATTTGGTTGGACTTGGTGGCAAGT #8BCCGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGFEFGGGCFGGGGFGGGGGGGGGGGGGGGGFGGGFFCGGGFGGGGGGGGGGGGGGGFGGDEG>C9:FCFFDFGCFGGGGGGFFGFFFFF4AAFFFFFFFFFFFFFBEFFFFFE=@@8C@3>BF=4=>;?6?@F@;E<CE@FF<E3.<?37);?E?94<>:<A>BFF?F6?F?)))<?FFF### NM:i:2 AS:i:602 RG:Z:1
not.rescuable 89 NC_001422.1 3017 60 116=1X183=1X = 3017 0 CTCCGGTGGCATTCAAGGTGATGTGCTTGCTACCGATAACAATACTGTAGGCATGGGTGATGCTGGTATTAAATCTGCCATTCAAGGCTCTAATGTTCCTAACCCTGATGAGGCCGTCCCTAGTTTTGTTTCTGGTGCTATGGCTAAAGCTGGTAAAGGACTTCTTGAAGGTACGTTGCAGGCTGGCACTTCTGCCGTTTCTGATAAGTTGCTTGATTTGGTTGGACTTGGTGGCAAGTCTGCCGCTGATAAAGGAAAGGATACTCGTGATTATCTTGCTGCTGCATTTCCTGAGCTTAAN 6FFFFFB?FBFFFBFFFFE@<@;FDFEC62,+;FEFFFFECFEFFFFFFFFFFFFFGFGFGGFGFGGGGFD>?7DGGGGGGGGGGGGGGFGGGGGGGGGGGEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGCCB8# NM:i:2 AS:i:602 RG:Z:1
not.rescuable 165 NC_001422.1 3017 0 * = 3017 0 GGTTTCGCAGCACCTGCACGGCGCCGTTTCTAGGACGTACATACCGGACAAGAGTATATCCGCGATGGACGGGTGATCCATGTAGGAAGTCTAGT GGGGGFFFFFFFFEEB@F29?3>EGGGGG8#GGGGGFAFEFFFFB=6>EEEGGGGBGGGGGGG;<;7EF;@EEC9CEFF??6?EF<@EDFFF### RG:Z:1
empty 77 * 0 0 * * 0 0 * RG:Z:1
empty 141 * 0 0 * * 0 0 * RG:Z:1
empty 77 * 0 0 * * 0 0 * * RG:Z:1
empty 141 * 0 0 * * 0 0 * * RG:Z:1
2 changes: 1 addition & 1 deletion tests/phix.se.sam
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,4 @@ unmappable.41 4 * 0 0 * * 0 0 TGCATGCAGTACGTGCTCGCCGTAGGTTGTGGCTCATTCCTGCAACACGT
rescuable.42 16 NC_001422.1 3017 60 116=1X183=1X * 0 0 CTCCGGTGGCATTCAAGGTGATGTGCTTGCTACCGATAACAATACTGTAGGCATGGGTGATGCTGGTATTAAATCTGCCATTCAAGGCTCTAATGTTCCTAACCCTGATGAGGCCGTCCCTAGTTTTGTTTCTGGTGCTATGGCTAAAGCTGGTAAAGGACTTCTTGAAGGTACGTTGCAGGCTGGCACTTCTGCCGTTTCTGATAAGTTGCTTGATTTGGTTGGACTTGGTGGCAAGTCTGCCGCTGATAAAGGAAAGGATACTCGTGATTATCTTGCTGCTGCATTTCCTGAGCTTAAN 6FFFFFB?FBFFFBFFFFE@<@;FDFEC62,+;FEFFFFECFEFFFFFFFFFFFFFGFGFGGFGFGGGGFD>?7DGGGGGGGGGGGGGGFGGGGGGGGGGGEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGCCB8# NM:i:2 AS:i:602 RG:Z:1
rescuable.43 4 * 0 0 * * 0 0 ATAAGATCAGAAAATACAGCAGCAAAATAAACACGAGTATACTTTACTTTATCAGAGGCAAACTTACCACAAAGTACAACAAAATAAAGCAACTTATCAGAAACGACAGAAGTGCAAGCCAGCAAAGTACATTCAAGAAGACCTTAACCAACTTTAGCCAAAGCAACAGAAACAAAACTAAGGACAGCCTAATCAAGGTTAGGAAAATTAAAGCCATGAAAGGCAAATTTAATACAAGCAACACCAATGCATACAATATTATTATAGGTAACAAGAACATAACCTAGAATACCACAGGAG 8BCCGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEGGGGGGGGGGGFGGGGGGGGGGGGGGD7?>DFGGGGFGFGGFGFGFFFFFFFFFFFFFEFCEFFFFEF;+,26CEFDF;@<@EFFFFBFFFBF?BFFFFF6 RG:Z:1
not.rescuable 16 NC_001422.1 3017 60 116=1X183=1X * 0 0 CTCCGGTGGCATTCAAGGTGATGTGCTTGCTACCGATAACAATACTGTAGGCATGGGTGATGCTGGTATTAAATCTGCCATTCAAGGCTCTAATGTTCCTAACCCTGATGAGGCCGTCCCTAGTTTTGTTTCTGGTGCTATGGCTAAAGCTGGTAAAGGACTTCTTGAAGGTACGTTGCAGGCTGGCACTTCTGCCGTTTCTGATAAGTTGCTTGATTTGGTTGGACTTGGTGGCAAGTCTGCCGCTGATAAAGGAAAGGATACTCGTGATTATCTTGCTGCTGCATTTCCTGAGCTTAAN 6FFFFFB?FBFFFBFFFFE@<@;FDFEC62,+;FEFFFFECFEFFFFFFFFFFFFFGFGFGGFGFGGGGFD>?7DGGGGGGGGGGGGGGFGGGGGGGGGGGEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGCCB8# NM:i:2 AS:i:602 RG:Z:1
empty 4 * 0 0 * * 0 0 * RG:Z:1
empty 4 * 0 0 * * 0 0 * * RG:Z:1

0 comments on commit fd798bd

Please sign in to comment.