libStatGen Software
1
|
Contains methods for converting between the query sequence and reference. More...
#include <SamQuerySeqWithRefHelper.h>
Static Public Member Functions | |
static void | seqWithEquals (const char *currentSeq, int32_t seq0BasedPos, Cigar &cigar, const char *referenceName, const GenomeSequence &refSequence, std::string &updatedSeq) |
Gets the sequence with '=' in any position where the sequence matches the reference. | |
static void | seqWithoutEquals (const char *currentSeq, int32_t seq0BasedPos, Cigar &cigar, const char *referenceName, const GenomeSequence &refSequence, std::string &updatedSeq) |
Gets the sequence converting '=' to the appropriate base using the reference. |
Contains methods for converting between the query sequence and reference.
Definition at line 101 of file SamQuerySeqWithRefHelper.h.
void SamQuerySeqWithRef::seqWithEquals | ( | const char * | currentSeq, |
int32_t | seq0BasedPos, | ||
Cigar & | cigar, | ||
const char * | referenceName, | ||
const GenomeSequence & | refSequence, | ||
std::string & | updatedSeq | ||
) | [static] |
Gets the sequence with '=' in any position where the sequence matches the reference.
NOTE: 'N' in both the sequence and the reference is not considered a match.
currentSeq | sequence that should be converted |
seq0BasedPos | 0 based start position of currentSeq on the reference. |
cigar | cigar string for currentSeq (used for determining how the sequence aligns to the reference) |
referenceName | reference name associated with this sequence |
refSequence | reference sequence object |
updatedSeq | return parameter that this method sets to the current sequence, replacing any matches to the reference with '='. |
Definition at line 243 of file SamQuerySeqWithRefHelper.cpp.
References BaseUtilities::areEqual(), GenomeSequence::getGenomePosition(), Cigar::getRefOffset(), Cigar::INDEX_NA, and BaseUtilities::isAmbiguous().
Referenced by SamRecord::getSequence().
{ updatedSeq = currentSeq; int32_t seqLength = updatedSeq.length(); int32_t queryIndex = 0; uint32_t startOfReadOnRefIndex = refSequence.getGenomePosition(referenceName); if(startOfReadOnRefIndex == INVALID_GENOME_INDEX) { // This reference name was not found in the reference file, so just // return. return; } startOfReadOnRefIndex += seq0BasedPos; // Loop until the entire sequence has been updated. while(queryIndex < seqLength) { // Still more bases, look for matches. // Get the reference offset for this read position. int32_t refOffset = cigar.getRefOffset(queryIndex); if(refOffset != Cigar::INDEX_NA) { // Both the reference and the read have a base, so get the bases. char readBase = currentSeq[queryIndex]; char refBase = refSequence[startOfReadOnRefIndex + refOffset]; // If neither base is unknown and they are the same, count it // as a match. if(!BaseUtilities::isAmbiguous(readBase) && !BaseUtilities::isAmbiguous(refBase) && (BaseUtilities::areEqual(readBase, refBase))) { // Match. updatedSeq[queryIndex] = '='; } } // Increment the query index to the next position. ++queryIndex; continue; } }
void SamQuerySeqWithRef::seqWithoutEquals | ( | const char * | currentSeq, |
int32_t | seq0BasedPos, | ||
Cigar & | cigar, | ||
const char * | referenceName, | ||
const GenomeSequence & | refSequence, | ||
std::string & | updatedSeq | ||
) | [static] |
Gets the sequence converting '=' to the appropriate base using the reference.
currentSeq | sequence that should be converted |
seq0BasedPos | 0 based start position of currentSeq on the reference. |
cigar | cigar string for currentSeq (used for determining how the sequence aligns to the reference) |
referenceName | reference name associated with this sequence |
refSequence | reference sequence object |
updatedSeq | return parameter that this method sets to the current sequence, replacing any '=' with the base from the reference. |
Definition at line 296 of file SamQuerySeqWithRefHelper.cpp.
References BaseUtilities::areEqual(), GenomeSequence::getGenomePosition(), Cigar::getRefOffset(), and Cigar::INDEX_NA.
Referenced by SamRecord::getSequence().
{ updatedSeq = currentSeq; int32_t seqLength = updatedSeq.length(); int32_t queryIndex = 0; uint32_t startOfReadOnRefIndex = refSequence.getGenomePosition(referenceName); if(startOfReadOnRefIndex == INVALID_GENOME_INDEX) { // This reference name was not found in the reference file, so just // return. return; } startOfReadOnRefIndex += seq0BasedPos; // Loop until the entire sequence has been updated. while(queryIndex < seqLength) { // Still more bases, look for matches. // Get the reference offset for this read position. int32_t refOffset = cigar.getRefOffset(queryIndex); if(refOffset != Cigar::INDEX_NA) { // Both the reference and the read have a base, so get the bases. char readBase = currentSeq[queryIndex]; char refBase = refSequence[startOfReadOnRefIndex + refOffset]; // If the bases are equal, set the sequence to the reference // base. (Skips the check for ambiguous to catch a case where // ambiguous had been converted to a '=', and if both are ambiguous, // it will still be set to ambiguous.) if(BaseUtilities::areEqual(readBase, refBase)) { // Match. updatedSeq[queryIndex] = refBase; } } // Increment the query index to the next position. ++queryIndex; continue; } }