libStatGen Software  1
SamRecordHelper Class Reference

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. More...
 
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. More...
 
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. More...
 

Detailed Description

Class for extracting information from a SAM Flag.

Definition at line 24 of file SamRecordHelper.h.

Member Function Documentation

◆ checkSequence()

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.

23 {
24  const char* readSeq = record.getSequence();
25 
26  // Get the cigar.
27  Cigar* cigar = record.getCigarInfo();
28 
29  if(cigar == NULL)
30  {
31  throw std::runtime_error("Failed to get Cigar.");
32  }
33 
34  int32_t readStartIndex =
35  cigar->getQueryIndex(pos0Based, record.get0BasedPosition());
36 
37  // if the read start is negative, this position was deleted, so
38  // return false, it doesn't match.
39  if(readStartIndex == Cigar::INDEX_NA)
40  {
41  return(false);
42  }
43 
44  // Increment the readSeq start to where this position is found.
45  readSeq += readStartIndex;
46  if(strncmp(readSeq, sequence, strlen(sequence)) == 0)
47  {
48  // Match, so return the readStartIndex (cycle).
49  return(readStartIndex);
50  }
51  // Did not match.
52  return(-1);
53 }

References SamRecord::get0BasedPosition(), SamRecord::getCigarInfo(), Cigar::getQueryIndex(), SamRecord::getSequence(), and Cigar::INDEX_NA.

◆ genSamTagsString()

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.

59 {
60  char tag[3];
61  char vtype;
62  void* value;
63 
64  // Reset the tag iterator to ensure that all the tags are written.
65  record.resetTagIter();
66 
67  // While there are more tags, write them to the recordString.
68  bool firstEntry = true;
69  bool returnStatus = true;
70  while(record.getNextSamTag(tag, vtype, &value) != false)
71  {
72  if(!firstEntry)
73  {
74  returnString += delim;
75  }
76  else
77  {
78  firstEntry = false;
79  }
80  returnStatus &= genSamTagString(tag, vtype, value, returnString);
81  }
82  return(returnStatus);
83 }

References genSamTagString(), SamRecord::getNextSamTag(), and SamRecord::resetTagIter().

◆ genSamTagString()

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.

88 {
89  returnString += tag;
90  returnString += ":";
91  returnString += vtype;
92  returnString += ":";
93  if(SamRecord::isIntegerType(vtype))
94  {
95  returnString += (int)*(int*)value;
96  }
97  else if(SamRecord::isFloatType(vtype))
98  {
99  returnString.appendFullFloat(*(float*)value);
100  }
101  else if(SamRecord::isCharType(vtype))
102  {
103  returnString += (char)*(char*)value;
104  }
105  else if(SamRecord::isStringType(vtype))
106  {
107  // String type.
108  returnString += (String)*(String*)value;
109  }
110  else
111  {
112  // Could not determine the type.
113  return(false);
114  }
115  return(true);
116 }

References SamRecord::isCharType(), SamRecord::isFloatType(), SamRecord::isIntegerType(), and SamRecord::isStringType().

Referenced by genSamTagsString().


The documentation for this class was generated from the following files:
Cigar
This class represents the CIGAR without any methods to set the cigar (see CigarRoller for that).
Definition: Cigar.h:84
SamRecord::get0BasedPosition
int32_t get0BasedPosition()
Get the 0-based(BAM) leftmost position of the record.
Definition: SamRecord.cpp:1307
String
Definition: StringBasics.h:39
SamRecord::isCharType
static bool isCharType(char vtype)
Returns whether or not the specified vtype is a char type.
Definition: SamRecord.cpp:2050
SamRecord::isStringType
static bool isStringType(char vtype)
Returns whether or not the specified vtype is a string type.
Definition: SamRecord.cpp:2060
Cigar::INDEX_NA
static const int32_t INDEX_NA
Value associated with an index that is not applicable/does not exist, used for converting between que...
Definition: Cigar.h:492
SamRecordHelper::genSamTagString
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.
Definition: SamRecordHelper.cpp:86
SamRecord::resetTagIter
void resetTagIter()
Reset the tag iterator to the beginning of the tags.
Definition: SamRecord.cpp:2022
SamRecord::getSequence
const char * getSequence()
Returns the SAM formatted sequence string (SEQ), translating the base as specified by setSequenceTran...
Definition: SamRecord.cpp:1556
SamRecord::isIntegerType
static bool isIntegerType(char vtype)
Returns whether or not the specified vtype is an integer type.
Definition: SamRecord.cpp:2028
Cigar::getQueryIndex
int32_t getQueryIndex(int32_t refOffset)
Return the query index associated with the specified reference offset or INDEX_NA based on this cigar...
Definition: Cigar.cpp:202
SamRecord::getCigarInfo
Cigar * getCigarInfo()
Returns a pointer to the Cigar object associated with this record.
Definition: SamRecord.cpp:1824
SamRecord::isFloatType
static bool isFloatType(char vtype)
Returns whether or not the specified vtype is a float type.
Definition: SamRecord.cpp:2040
SamRecord::getNextSamTag
bool getNextSamTag(char *tag, char &vtype, void **value)
Get the next tag from the record.
Definition: SamRecord.cpp:1950