// ---------------------------------------------------------------------------- bool CSoMap::xMapRna( const CSeq_feat& feature, string& so_type) // ---------------------------------------------------------------------------- { static const map<CSeqFeatData::ESubtype, string> mapSubtypeStraight = { {CSeqFeatData::eSubtype_misc_RNA, "transcript"}, {CSeqFeatData::eSubtype_rRNA, "rRNA"}, {CSeqFeatData::eSubtype_tRNA, "tRNA"}, }; static const map<CSeqFeatData::ESubtype, string> mapSubtypePseudo = { {CSeqFeatData::eSubtype_misc_RNA, "pseudogenic_transcript"}, {CSeqFeatData::eSubtype_rRNA, "pseudogenic_rRNA"}, {CSeqFeatData::eSubtype_tRNA, "pseudogenic_tRNA"}, }; auto subtype = feature.GetData().GetSubtype(); if (feature.IsSetPseudo() && feature.GetPseudo()) { auto cit = mapSubtypePseudo.find(subtype); if (cit == mapSubtypePseudo.end()) { return false; } so_type = cit->second; return true; } if (feature.IsSetPseudo() && !feature.GetPseudo()) { auto cit = mapSubtypeStraight.find(subtype); if (cit == mapSubtypeStraight.end()) { return false; } so_type = cit->second; return true; } for (auto qual: feature.GetQual()) { if (qual->GetQual() == "pseudo" || qual->GetQual() == "pseudogene") { auto cit = mapSubtypePseudo.find(subtype); if (cit == mapSubtypePseudo.end()) { return false; } so_type = cit->second; return true; } } auto cit = mapSubtypeStraight.find(subtype); if (cit == mapSubtypeStraight.end()) { return false; } so_type = cit->second; return true; }
// ---------------------------------------------------------------------------- bool CSoMap::xMapGene( const CSeq_feat& feature, string& so_type) // ---------------------------------------------------------------------------- { if (feature.IsSetPseudo() && feature.GetPseudo()) { so_type = "pseudogene"; return true; } for (auto qual: feature.GetQual()) { if (qual->GetQual() == "pseudo" || qual->GetQual() == "pseudogene") { so_type = "pseudogene"; return true; } } so_type = "gene"; return true; }