feature.cpp
来自「ncbi源码」· C++ 代码 · 共 710 行 · 第 1/2 页
CPP
710 行
} catch (CSeqportUtil::CBadIndex&) { // fall back to comment (if any) s_GetRnaRefLabelFromComment(feat, label, label_type, type_label); } break; }} }// Appends a label to tlabel for a CImp_feat. A return value of true indicates // that the label was created for a CImp_feat key = "Site-ref" inlinestatic bool s_GetImpLabel(const CSeq_feat& feat, string* tlabel, ELabelType label_type, const string* type_label){ // Return if tlablel does not exist or feature data is not Imp-feat if (!tlabel || !feat.GetData().IsImp()) { return false; } const string& key = feat.GetData().GetImp().GetKey(); bool empty = true; // If the key is Site-ref if (!NStr::CompareNocase(key, "Site-ref")) { if (feat.IsSetCit()) { // Create label based on Pub-set feat.GetCit().GetLabel(tlabel); return true; } // else if the key is not Site-ref } else if (label_type == eContent) { // If the key is CDS if (!NStr::CompareNocase(key, "CDS")) { *tlabel += "[CDS]"; // else if the key is repeat_unit or repeat_region } else if (!NStr::CompareNocase(key, "repeat_unit") || !NStr::CompareNocase(key, "repeat_region")) { if (feat.IsSetQual()) { // Loop thru the feature qualifiers ITERATE( CSeq_feat::TQual, it, feat.GetQual()) { // If qualifier qual is rpt_family append qualifier val if (!NStr::CompareNocase((*it)->GetQual(),"rpt_family")) { *tlabel += (*it)->GetVal(); empty = false; break; } } } // If nothing has been appended yet if (empty) { *tlabel += type_label ? *type_label : string(""); } // else if the key is STS } else if (!NStr::CompareNocase(key, "STS")) { if (feat.IsSetQual()) { ITERATE( CSeq_feat::TQual, it, feat.GetQual()) { if (!NStr::CompareNocase((*it)->GetQual(),"standard_name")) { *tlabel = (*it)->GetVal(); empty = false; break; } } } // If nothing has been appended yet if (empty) { if (feat.IsSetComment()) { size_t pos = feat.GetComment().find(";"); if (pos == string::npos) { *tlabel += feat.GetComment(); } else { *tlabel += feat.GetComment().substr(0, pos); } } else { *tlabel += type_label ? *type_label : string(""); } } // else if the key is misc_feature } else if (NStr::CompareNocase(key, "misc_feature")) { if (feat.IsSetQual()) { // Look for a single qualifier qual in order of preference // "standard_name", "function", "number", any and // append to tlabel and return if found ITERATE(CSeq_feat::TQual, it, feat.GetQual()) { if (!NStr::CompareNocase((*it)->GetQual(),"standard_name")) { *tlabel += (*it)->GetVal(); return false; } } ITERATE(CSeq_feat::TQual, it, feat.GetQual()) { if (!NStr::CompareNocase((*it)->GetQual(), "function")) { *tlabel += (*it)->GetVal(); return false; } } ITERATE(CSeq_feat::TQual, it, feat.GetQual()) { if (!NStr::CompareNocase((*it)->GetQual(), "number")) { *tlabel += (*it)->GetVal(); return false; } } ITERATE(CSeq_feat::TQual, it, feat.GetQual()) { *tlabel += (*it)->GetVal(); return false; } // Append type_label if there is one if (empty) { *tlabel += type_label ? *type_label : string(""); return false; } } } } return false; } // Return a label based on the content of the featurevoid s_GetContentLabel(const CSeq_feat& feat, string* label, const string* type_label, ELabelType label_type, CScope* scope){ string tlabel; // Get a content label dependent on the type of the feature data switch (feat.GetData().Which()) { case CSeqFeatData::e_Gene: feat.GetData().GetGene().GetLabel(&tlabel); break; case CSeqFeatData::e_Org: feat.GetData().GetOrg().GetLabel(&tlabel); break; case CSeqFeatData::e_Cdregion: s_GetCdregionLabel(feat, &tlabel, scope); break; case CSeqFeatData::e_Prot: feat.GetData().GetProt().GetLabel(&tlabel); break; case CSeqFeatData::e_Rna: s_GetRnaRefLabel(feat, &tlabel, label_type, type_label); break; case CSeqFeatData::e_Pub: feat.GetData().GetPub().GetPub().GetLabel(&tlabel); break; case CSeqFeatData::e_Seq: break; case CSeqFeatData::e_Imp: if (s_GetImpLabel(feat, &tlabel, label_type, type_label)) { *label += tlabel; return; } break; case CSeqFeatData::e_Region: if (feat.GetData().GetRegion().find("Domain") != string::npos && feat.IsSetComment()) { tlabel += feat.GetComment(); } else { tlabel += feat.GetData().GetRegion(); } break; case CSeqFeatData::e_Comment: tlabel += feat.IsSetComment() ? feat.GetComment() : string(""); break; case CSeqFeatData::e_Bond: // Get the ASN string name for the enumerated EBond type tlabel += CSeqFeatData::GetTypeInfo_enum_EBond() ->FindName(feat.GetData().GetBond(), true); break; case CSeqFeatData::e_Site: // Get the ASN string name for the enumerated ESite type tlabel += CSeqFeatData::GetTypeInfo_enum_ESite() ->FindName(feat.GetData().GetSite(), true); break; case CSeqFeatData::e_Rsite: switch (feat.GetData().GetRsite().Which()) { case CRsite_ref::e_Str: tlabel += feat.GetData().GetRsite().GetStr(); break; case CRsite_ref::e_Db: tlabel += feat.GetData().GetRsite().GetDb().GetTag().IsStr() ? feat.GetData().GetRsite().GetDb().GetTag().GetStr() : string("?"); break; default: break; } break; case CSeqFeatData::e_User: if (feat.GetData().GetUser().IsSetClass()) { tlabel += feat.GetData().GetUser().GetClass(); } else if (feat.GetData().GetUser().GetType().IsStr()) { tlabel += feat.GetData().GetUser().GetType().GetStr(); } case CSeqFeatData::e_Txinit: break; case CSeqFeatData::e_Num: break; case CSeqFeatData::e_Psec_str: tlabel += CSeqFeatData::GetTypeInfo_enum_EPsec_str() ->FindName(feat.GetData().GetPsec_str(), true); break; case CSeqFeatData::e_Non_std_residue: tlabel += feat.GetData().GetNon_std_residue(); break; case CSeqFeatData::e_Het: tlabel += feat.GetData().GetHet().Get(); break; case CSeqFeatData::e_Biosrc: feat.GetData().GetBiosrc().GetOrg().GetLabel(&tlabel); break; default: break; } // Return if a label has been calculated above if (!tlabel.empty()) { *label += tlabel; return; } // Put Seq-feat qual into label if (feat.IsSetQual()) { string prefix("/"); ITERATE(CSeq_feat::TQual, it, feat.GetQual()) { tlabel += prefix + (**it).GetQual(); prefix = " "; if (!(**it).GetVal().empty()) { tlabel += "=" + (**it).GetVal(); } } } // Put Seq-feat comment into label if (feat.IsSetComment()) { if (tlabel.empty()) { tlabel = feat.GetComment(); } else { tlabel += "; " + feat.GetComment(); } } *label += tlabel;}void GetLabel(const CSeq_feat& feat, string* label, ELabelType label_type, CScope* scope){ // Ensure that label exists if (!label) { return; } // Get the type label string type_label; s_GetTypeLabel(feat, &type_label); // Append the type label and return if content label not required if (label_type == eBoth) { *label += type_label + ": "; } else if (label_type == eType) { *label += type_label; return; } // Append the content label size_t label_len = label->size(); s_GetContentLabel(feat, label, &type_label, label_type, scope); // If there is no content label, append the type label if (label->size() == label_len && label_type == eContent) { *label += type_label; }}END_SCOPE(feature)END_SCOPE(objects)END_NCBI_SCOPE/** ===========================================================================* $Log: feature.cpp,v $* Revision 1000.1 2004/06/01 19:25:23 gouriano* PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.13** Revision 1.13 2004/05/21 21:42:14 gorelenk* Added PCH ncbi_pch.hpp** Revision 1.12 2003/08/21 12:09:08 dicuccio* Added processing of CDS in case the CDS is just an open reading frame** Revision 1.11 2003/08/08 18:12:19 dicuccio* Fixed bug in s_GetRnaRefLabel(): inadverted '&' instead of '&&'** Revision 1.10 2003/07/22 21:48:26 vasilche* Use typedef for member access.** Revision 1.9 2003/06/02 16:06:39 dicuccio* Rearranged src/objects/ subtree. This includes the following shifts:* - src/objects/asn2asn --> arc/app/asn2asn* - src/objects/testmedline --> src/objects/ncbimime/test* - src/objects/objmgr --> src/objmgr* - src/objects/util --> src/objmgr/util* - src/objects/alnmgr --> src/objtools/alnmgr* - src/objects/flat --> src/objtools/flat* - src/objects/validator --> src/objtools/validator* - src/objects/cddalignview --> src/objtools/cddalignview* In addition, libseq now includes six of the objects/seq... libs, and libmmdb* replaces the three libmmdb? libs.** Revision 1.8 2003/03/11 16:00:58 kuznets* iterate -> ITERATE** Revision 1.7 2002/12/31 15:09:58 dicuccio* Removed unneeded headers for Featdef classes** Revision 1.6 2002/12/26 21:17:06 dicuccio* Minor tweaks to avoid compiler warnings in MSVC (remove unused variables)** Revision 1.5 2002/08/26 16:29:41 ucko* Be even more careful with TRNA extensions.** Revision 1.4 2002/08/21 15:30:30 ucko* Handle empty tRNA extensions.** Revision 1.3 2002/08/20 20:01:50 ucko* s_GetRnaRefLabel: factor out code to look at comments, and fall back* on it for bogus TRNA extensions.** Revision 1.2 2002/06/07 16:11:21 ucko* Move everything into the "feature" namespace.** Revision 1.1 2002/06/06 18:45:03 clausen* Initial version** ===========================================================================*/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?