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); }