dbsource_item.cpp

来自「ncbi源码」· C++ 代码 · 共 523 行 · 第 1/2 页

CPP
523
字号
    switch (sp.GetClass()) {    case CSP_block::eClass_standard:        m_DBSource.push_back("class: standard.");        break;    case CSP_block::eClass_prelim:        m_DBSource.push_back("class: preliminary.");        break;    default:        break;    }    // laid out slightly differently from the C version, but I think that's    // a bug in the latter (which runs some things together)    if (sp.CanGetExtra_acc()  &&  !sp.GetExtra_acc().empty() ) {        m_DBSource.push_back("extra_accessions:"                             + NStr::Join(sp.GetExtra_acc(), ","));    }    if (sp.GetImeth()) {        m_DBSource.push_back("seq starts with Met");    }    if (sp.CanGetPlasnm()  &&  !sp.GetPlasnm().empty() ) {        m_DBSource.push_back("plasmid:" + NStr::Join(sp.GetPlasnm(), ","));    }    if (sp.CanGetCreated()) {        string s("created: ");        sp.GetCreated().GetDate(&s, "%3N %D %Y");        m_DBSource.push_back(s + '.');    }    if (sp.CanGetSequpd()) {        string s("sequence updated: ");        sp.GetSequpd().GetDate(&s, "%3N %D %Y");        m_DBSource.push_back(s + '.');    }    if (sp.CanGetAnnotupd()) {        string s("annotation updated: ");        sp.GetAnnotupd().GetDate(&s, "%3N %D %Y");        m_DBSource.push_back(s + '.');    }    if (sp.CanGetSeqref()  &&  !sp.GetSeqref().empty() ) {        list<string> xrefs;        ITERATE (CSP_block::TSeqref, it, sp.GetSeqref()) {            const char* s = 0;            switch ((*it)->Which()) {            case CSeq_id::e_Genbank:  s = "genbank accession ";          break;            case CSeq_id::e_Embl:     s = "embl accession ";             break;            case CSeq_id::e_Pir:      s = "pir locus ";                  break;            case CSeq_id::e_Swissprot: s = "swissprot accession ";       break;            case CSeq_id::e_Gi:       s = "gi: ";                        break;            case CSeq_id::e_Ddbj:     s = "ddbj accession ";             break;            case CSeq_id::e_Prf:      s = "prf accession ";              break;            case CSeq_id::e_Pdb:      s = "pdb accession ";              break;            case CSeq_id::e_Tpg:   s = "genbank third party accession "; break;            case CSeq_id::e_Tpe:      s = "embl third party accession "; break;            case CSeq_id::e_Tpd:      s = "ddbj third party accession "; break;            default:                  break;            }            if ( s ) {                string acc = (*it)->GetSeqIdString(true);                xrefs.push_back(s + acc);            }        }        if ( !xrefs.empty() ) {            m_DBSource.push_back("xrefs: " + NStr::Join(xrefs, ", "));        }    }    if (sp.CanGetDbref()  &&  !sp.GetDbref().empty() ) {        list<string> xrefs;        ITERATE (CSP_block::TDbref, it, sp.GetDbref()) {            const CObject_id& tag = (*it)->GetTag();            string id = (tag.IsStr() ? tag.GetStr()                                     : NStr::IntToString(tag.GetId()));            if ((*it)->GetDb() == "MIM") {                xrefs.push_back                    ("MIM <a href=\""                     "http://www.ncbi.nlm.nih.gov/entrez/dispomim.cgi?id=" + id                     + "\">" + id + "</a>");            } else {                xrefs.push_back((*it)->GetDb() + id); // no space(!)            }        }        m_DBSource.push_back            ("xrefs (non-sequence databases): " + NStr::Join(xrefs, ", "));    }}void CDBSourceItem::x_AddPRFBlock(CBioseqContext& ctx){    CSeqdesc_CI dsc(ctx.GetHandle(), CSeqdesc::e_Prf);    if ( !dsc ) {        return;    }    x_SetObject(*dsc);    const CPRF_block& prf = dsc->GetPrf();    if (prf.CanGetExtra_src()) {        const CPRF_ExtraSrc& es = prf.GetExtra_src();        if (es.CanGetHost()) {            m_DBSource.push_back("host: " + es.GetHost());        }        if (es.CanGetPart()) {            m_DBSource.push_back("part: " + es.GetPart());        }        if (es.CanGetState()) {            m_DBSource.push_back("state: " + es.GetState());        }        if (es.CanGetStrain()) {            m_DBSource.push_back("strain: " + es.GetStrain());        }        if (es.CanGetTaxon()) {            m_DBSource.push_back("taxonomy: " + es.GetTaxon());        }    }    NON_CONST_ITERATE (list<string>, it, m_DBSource) {        *it += (&*it == &m_DBSource.back() ? '.' : ';');    }}void CDBSourceItem::x_AddPDBBlock(CBioseqContext& ctx){    CSeqdesc_CI dsc(ctx.GetHandle(), CSeqdesc::e_Pdb);    if ( !dsc ) {        return;    }    x_SetObject(*dsc);    const CPDB_block& pdb = dsc->GetPdb();    {{        string s("deposition: ");        DateToString(pdb.GetDeposition(), s);        m_DBSource.push_back(s);    }}    m_DBSource.push_back("class: " + pdb.GetClass());    if (!pdb.GetSource().empty() ) {        m_DBSource.push_back("source: " + NStr::Join(pdb.GetSource(), ", "));    }    if (pdb.CanGetExp_method()) {        m_DBSource.push_back("Exp. method: " + pdb.GetExp_method());    }    if (pdb.CanGetReplace()) {        const CPDB_replace& rep = pdb.GetReplace();        if ( !rep.GetIds().empty() ) {            m_DBSource.push_back                ("ids replaced: " + NStr::Join(pdb.GetSource(), ", "));        }        string s("replacement date: ");        DateToString(rep.GetDate(), s);        m_DBSource.push_back(s);    }    NON_CONST_ITERATE (list<string>, it, m_DBSource) {        *it += (&*it == &m_DBSource.back() ? '.' : ';');    }}string CDBSourceItem::x_FormatDBSourceID(const CSeq_id& id) {    switch ( id.Which() ) {    case CSeq_id::e_Local:        {{            const CObject_id& oi = id.GetLocal();            return (oi.IsStr() ? oi.GetStr() : NStr::IntToString(oi.GetId()));        }}    case CSeq_id::e_Gi:        {{            return "gi: " + NStr::IntToString(id.GetGi());        }}    case CSeq_id::e_Pdb:        {{            const CPDB_seq_id& pdb = id.GetPdb();            string s("pdb: "), sep;            if ( !pdb.GetMol().Get().empty() ) {                s += "molecule " + pdb.GetMol().Get();                sep = ",";            }            if (pdb.GetChain() > 0) {                s += sep + "chain " + NStr::IntToString(pdb.GetChain());                sep = ",";            }            if (pdb.CanGetRel()) {                s += sep + "release ";                DateToString(pdb.GetRel(), s);                sep = ",";            }            return s;        }}    default:        {{            const CTextseq_id* tsid = id.GetTextseq_Id();            if ( !tsid ) {                return kEmptyStr;            }            string s, sep, comma;            switch (id.Which()) {            case CSeq_id::e_Embl:       s = "embl ";        comma = ",";  break;            case CSeq_id::e_Other:      s = "REFSEQ: ";                   break;            case CSeq_id::e_Swissprot:  s = "swissprot: ";  comma = ",";  break;            case CSeq_id::e_Pir:        s = "pir: ";                      break;            case CSeq_id::e_Prf:        s = "prf: ";                      break;            default:                    break;            }            if ( tsid->CanGetName() ) {                s += "locus " + tsid->GetName();                sep = " ";            } else {                comma.erase();            }            if (tsid->CanGetAccession()) {                string acc = tsid->GetAccession();                if (tsid->CanGetVersion()) {                    acc += '.' + NStr::IntToString(tsid->GetVersion());                }                s += comma + sep + "accession " + acc;                sep = " ";            }            if (tsid->CanGetRelease()) {                s += sep + "release " + tsid->GetRelease();            }            if (id.IsSwissprot()) {                s += ';';            }            return s;        }}    }}END_SCOPE(objects)END_NCBI_SCOPE/** ===========================================================================** $Log: dbsource_item.cpp,v $* Revision 1000.1  2004/06/01 19:44:02  gouriano* PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6** Revision 1.6  2004/05/21 21:42:54  gorelenk* Added PCH ncbi_pch.hpp** Revision 1.5  2004/04/22 15:55:04  shomrat* Changes in context** Revision 1.4  2004/03/25 20:36:31  shomrat* Use handles** Revision 1.3  2004/03/16 19:07:25  vasilche* Use CConstRef<CSeq_id> to store returned CConstRef<CSeq_id>.** Revision 1.2  2003/12/18 17:43:32  shomrat* context.hpp moved** Revision 1.1  2003/12/17 20:19:33  shomrat* Initial Revision (adapted from flat lib)*** ===========================================================================*/

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?