int SNPBamProcessor::get_haplotype(BamTools::BamAlignment& aln){ if (!aln.HasTag(HAPLOTYPE_TAG)) return -1; uint8_t haplotype; if (!aln.GetTag(HAPLOTYPE_TAG, haplotype)){ char type; aln.GetTagType(HAPLOTYPE_TAG, type); printErrorAndDie("Failed to extract haplotype tag"); } assert(haplotype == 1 || haplotype == 2); return (int)haplotype; }
std::string get_library(BamTools::BamAlignment& aln, std::map<std::string, std::string>& rg_to_library){ std::string rg; std::string rg_tag = "RG"; char tag_type = 'Z'; if (!aln.GetTagType(rg_tag, tag_type)) printErrorAndDie("Failed to retrieve BAM alignment's RG tag"); aln.GetTag("RG", rg); auto iter = rg_to_library.find(rg); if (iter == rg_to_library.end()) printErrorAndDie("No library found for read group " + rg + " in BAM file headers"); return iter->second; }
bool ReadContainer::GetIntBamTag(const BamTools::BamAlignment& aln, const std::string& tag_name, int* destination) { char tag_type; if (!aln.GetTagType(tag_name, tag_type)) {return false;} switch (tag_type) { case (BamTools::Constants::BAM_TAG_TYPE_INT32): return aln.GetTag(tag_name, *destination); case (BamTools::Constants::BAM_TAG_TYPE_INT8): int8_t d8; if (!aln.GetTag(tag_name, d8)) { return false; } *destination = static_cast<int>(d8); return true; case (BamTools::Constants::BAM_TAG_TYPE_UINT8): uint8_t ud8; if (!aln.GetTag(tag_name, ud8)) { return false; } *destination = static_cast<int>(ud8); return true; case (BamTools::Constants::BAM_TAG_TYPE_INT16): int16_t d16; if (!aln.GetTag(tag_name, d16)) { return false; } *destination = static_cast<int>(d16); return true; case (BamTools::Constants::BAM_TAG_TYPE_UINT16): uint16_t ud16; if (!aln.GetTag(tag_name, ud16)) { return false; } *destination = static_cast<int>(ud16); return true; case (BamTools::Constants::BAM_TAG_TYPE_UINT32): uint32_t ud32; if (!aln.GetTag(tag_name, ud32)) { return false; } *destination = static_cast<int>(ud32); return true; default: stringstream msg; msg << "Encountered unsupported tag type " << tag_type; PrintMessageDieOnError(msg.str(), ERROR); } return false; }
bool getTagParanoid(BamTools::BamAlignment &alignment, const std::string &tag, int64_t &value) { char tagType = ' '; if(alignment.GetTagType(tag, tagType)) { switch(tagType) { case BamTools::Constants::BAM_TAG_TYPE_INT8: { int8_t value_int8 = 0; alignment.GetTag(tag, value_int8); value = value_int8; } break; case BamTools::Constants::BAM_TAG_TYPE_UINT8: { uint8_t value_uint8 = 0; alignment.GetTag(tag, value_uint8); value = value_uint8; } break; case BamTools::Constants::BAM_TAG_TYPE_INT16: { int16_t value_int16 = 0; alignment.GetTag(tag, value_int16); value = value_int16; } break; case BamTools::Constants::BAM_TAG_TYPE_UINT16: { uint16_t value_uint16 = 0; alignment.GetTag(tag, value_uint16); value = value_uint16; } break; case BamTools::Constants::BAM_TAG_TYPE_INT32: { int32_t value_int32 = 0; alignment.GetTag(tag, value_int32); value = value_int32; } break; case BamTools::Constants::BAM_TAG_TYPE_UINT32: { uint32_t value_uint32 = 0; alignment.GetTag(tag, value_uint32); value = value_uint32; } break; default: { alignment.GetTag(tag, value); } break; } return(true); } else { return(false); } }