|
libStatGen Software
1
|
Class for extracting information from a SAM Flag. More...
#include <SamRecordHelper.h>
Static Public Member Functions | |
| static int | checkSequence (SamRecord &record, int32_t pos0Based, const char *sequence) |
| Helper method that checks if the record's read sequence starting at the specified 0-based reference position matches the passed in sequence. | |
| static bool | genSamTagsString (SamRecord &record, String &returnString, char delim= '\t') |
| Helper to append the SAM string representation of all the tags to the specified string. | |
| static bool | genSamTagString (const char *tag, char vtype, void *value, String &returnString) |
| Helper to append the SAM string representation of the specified tag to the specified string. | |
Class for extracting information from a SAM Flag.
Definition at line 24 of file SamRecordHelper.h.
| int SamRecordHelper::checkSequence | ( | SamRecord & | record, |
| int32_t | pos0Based, | ||
| const char * | sequence | ||
| ) | [static] |
Helper method that checks if the record's read sequence starting at the specified 0-based reference position matches the passed in sequence.
Definition at line 21 of file SamRecordHelper.cpp.
References SamRecord::get0BasedPosition(), SamRecord::getCigarInfo(), Cigar::getQueryIndex(), SamRecord::getSequence(), and Cigar::INDEX_NA.
{
const char* readSeq = record.getSequence();
// Get the cigar.
Cigar* cigar = record.getCigarInfo();
if(cigar == NULL)
{
throw std::runtime_error("Failed to get Cigar.");
}
int32_t readStartIndex =
cigar->getQueryIndex(pos0Based, record.get0BasedPosition());
// if the read start is negative, this position was deleted, so
// return false, it doesn't match.
if(readStartIndex == Cigar::INDEX_NA)
{
return(false);
}
// Increment the readSeq start to where this position is found.
readSeq += readStartIndex;
if(strncmp(readSeq, sequence, strlen(sequence)) == 0)
{
// Match, so return the readStartIndex (cycle).
return(readStartIndex);
}
// Did not match.
return(-1);
}
| bool SamRecordHelper::genSamTagsString | ( | SamRecord & | record, |
| String & | returnString, | ||
| char | delim = '\t' |
||
| ) | [static] |
Helper to append the SAM string representation of all the tags to the specified string.
Does NOT add a preceding delimiter before the first tag.
| record | record whose tags to append. |
| returnString | string to append the tags to. |
| delim | delimiter to use to separate different tags. |
Definition at line 56 of file SamRecordHelper.cpp.
References genSamTagString(), SamRecord::getNextSamTag(), and SamRecord::resetTagIter().
{
char tag[3];
char vtype;
void* value;
// Reset the tag iterator to ensure that all the tags are written.
record.resetTagIter();
// While there are more tags, write them to the recordString.
bool firstEntry = true;
bool returnStatus = true;
while(record.getNextSamTag(tag, vtype, &value) != false)
{
if(!firstEntry)
{
returnString += delim;
}
else
{
firstEntry = false;
}
returnStatus &= genSamTagString(tag, vtype, value, returnString);
}
return(returnStatus);
}
| bool SamRecordHelper::genSamTagString | ( | const char * | tag, |
| char | vtype, | ||
| void * | value, | ||
| String & | returnString | ||
| ) | [static] |
Helper to append the SAM string representation of the specified tag to the specified string.
| tag | the tag name. |
| vtype | the vtype. |
| value | pointer to the value of the tag (will be cast to int, double, char, or string based on vtype). |
| returnString | string to append the tag to. |
Definition at line 86 of file SamRecordHelper.cpp.
References SamRecord::isCharType(), SamRecord::isFloatType(), SamRecord::isIntegerType(), and SamRecord::isStringType().
Referenced by genSamTagsString().
{
returnString += tag;
returnString += ":";
returnString += vtype;
returnString += ":";
if(SamRecord::isIntegerType(vtype))
{
returnString += (int)*(int*)value;
}
else if(SamRecord::isFloatType(vtype))
{
returnString.appendFullFloat(*(float*)value);
}
else if(SamRecord::isCharType(vtype))
{
returnString += (char)*(char*)value;
}
else if(SamRecord::isStringType(vtype))
{
// String type.
returnString += (String)*(String*)value;
}
else
{
// Could not determine the type.
return(false);
}
return(true);
}