libStatGen Software  1
SamRecordHelper Class Reference

Class for extracting information from a SAM Flag. More...

#include <SamRecordHelper.h>

List of all members.

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.

Detailed Description

Class for extracting information from a SAM Flag.

Definition at line 24 of file SamRecordHelper.h.


Member Function Documentation

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.

Returns:
returns -1 if it does not match, returns the cycle (read position) of pos0Based if it does match.

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.

Parameters:
recordrecord whose tags to append.
returnStringstring to append the tags to.
delimdelimiter to use to separate different tags.
Returns:
true on success, false on failure/partial generation.

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.

Parameters:
tagthe tag name.
vtypethe vtype.
valuepointer to the value of the tag (will be cast to int, double, char, or string based on vtype).
returnStringstring to append the tag to.
Returns:
true on success, false on failure/partial generation.

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

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends