keywords_item.cpp

来自「ncbi源码」· C++ 代码 · 共 309 行

CPP
309
字号
/* * =========================================================================== * PRODUCTION $Log: keywords_item.cpp,v $ * PRODUCTION Revision 1000.1  2004/06/01 19:44:58  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6 * PRODUCTION * =========================================================================== *//*  $Id: keywords_item.cpp,v 1000.1 2004/06/01 19:44:58 gouriano Exp $* ===========================================================================**                            PUBLIC DOMAIN NOTICE*               National Center for Biotechnology Information**  This software/database is a "United States Government Work" under the*  terms of the United States Copyright Act.  It was written as part of*  the author's official duties as a United States Government employee and*  thus cannot be copyrighted.  This software/database is freely available*  to the public for use. The National Library of Medicine and the U.S.*  Government have not placed any restriction on its use or reproduction.**  Although all reasonable efforts have been taken to ensure the accuracy*  and reliability of the software and data, the NLM and the U.S.*  Government do not and cannot warrant the performance or results that*  may be obtained by using this software or data. The NLM and the U.S.*  Government disclaim all warranties, express or implied, including*  warranties of performance, merchantability or fitness for any particular*  purpose.**  Please cite the author in any work or product based on this material.** ===========================================================================** Author:  Mati Shomrat, NCBI** File Description:*   flat-file generator -- keywords item implementation**/#include <ncbi_pch.hpp>#include <corelib/ncbistd.hpp>#include <objects/seqblock/PIR_block.hpp>#include <objects/seqblock/PRF_block.hpp>#include <objects/seqblock/GB_block.hpp>#include <objects/seqblock/SP_block.hpp>#include <objects/seqblock/EMBL_block.hpp>#include <objects/seq/MolInfo.hpp>#include <objmgr/seqdesc_ci.hpp>#include <algorithm>#include <objtools/format/formatter.hpp>#include <objtools/format/text_ostream.hpp>#include <objtools/format/items/keywords_item.hpp>#include <objtools/format/context.hpp>BEGIN_NCBI_SCOPEBEGIN_SCOPE(objects)CKeywordsItem::CKeywordsItem(CBioseqContext& ctx) :    CFlatItem(&ctx){    x_GatherInfo(ctx);}void CKeywordsItem::Format(IFormatter& formatter, IFlatTextOStream& text_os) const{    formatter.FormatKeywords(*this, text_os);}const list<string>& CKeywordsItem::GetKeywords(void) const {     return m_Keywords; }/***************************************************************************//*                                  PRIVATE                                *//***************************************************************************/enum ETechFlags {    eEST = 1<<0,    eSTS = 1<<1,    eGSS = 1<<2};void CKeywordsItem::x_GatherInfo(CBioseqContext& ctx){    // add TPA keywords    if ( ctx.IsTPA() ) {        x_AddKeyword("Third Party Annotation");        x_AddKeyword("TPA");    }        // add keywords based on mol-info    Uint4 flags = 0;    switch ( ctx.GetTech() ) {    case CMolInfo::eTech_est:        flags |= eEST;        x_AddKeyword("EST");        break;            case CMolInfo::eTech_sts:        flags |= eSTS;        x_AddKeyword("STS");        break;            case CMolInfo::eTech_survey:        flags |= eGSS;        x_AddKeyword("GSS");        break;            case CMolInfo::eTech_htgs_0:        x_AddKeyword("HTG");        x_AddKeyword("HTGS_PHASE0");        break;            case CMolInfo::eTech_htgs_1:        x_AddKeyword("HTG");        x_AddKeyword("HTGS_PHASE1");        break;            case CMolInfo::eTech_htgs_2:        x_AddKeyword("HTG");        x_AddKeyword("HTGS_PHASE2");        break;            case CMolInfo::eTech_htgs_3:        x_AddKeyword("HTG");        break;            case CMolInfo::eTech_fli_cdna:        x_AddKeyword("FLI_CDNA");        break;            case CMolInfo::eTech_htc:        x_AddKeyword("HTC");        break;            case CMolInfo::eTech_wgs:        x_AddKeyword("WGS");        break;            default:        break;    }        for (CSeqdesc_CI it(ctx.GetHandle());  it;  ++it) {        const list<string>* keywords = 0;                switch (it->Which()) {                    case CSeqdesc::e_Pir:            if ( it->GetPir().CanGetKeywords() ) {                keywords = &(it->GetPir().GetKeywords());            }            break;                    case CSeqdesc::e_Genbank:            if (it->GetGenbank().CanGetKeywords()) {                keywords = &(it->GetGenbank().GetKeywords());            }            break;                    case CSeqdesc::e_Sp:            if (it->GetSp().CanGetKeywords()) {                keywords = &(it->GetSp().GetKeywords());            }            break;                    case CSeqdesc::e_Embl:            if (it->GetEmbl().CanGetKeywords()) {                keywords = &(it->GetEmbl().GetKeywords());            }            break;                    case CSeqdesc::e_Prf:            if (it->GetPrf().CanGetKeywords()) {                keywords = &(it->GetPrf().GetKeywords());            }            break;                    default:            break;        }                if ( keywords ) {            ITERATE ( list<string>, kwd, *keywords ) {                if ( x_CheckSpecialKeyword(*kwd, flags) ) {                    x_AddKeyword(*kwd);                }            }        }    }}// Add a keyword to the list void CKeywordsItem::x_AddKeyword(const string& keyword, Uint4 flags){    list<string>::const_iterator begin = m_Keywords.begin();    list<string>::const_iterator end = m_Keywords.end();    if ( find(begin, end, keyword) == end ) {        m_Keywords.push_back(keyword);    }}// EST keywordsstatic const string s_EST_kw[] = {  "EST", "EST PROTO((expressed sequence tag)", "expressed sequence tag",  "EST (expressed sequence tag)", "EST(expressed sequence tag)",  "partial cDNA sequence", "transcribed sequence fragment", "TSR",  "putatively transcribed partial sequence", "UK putts"};static const string* s_EST_kw_end = s_EST_kw +     sizeof(s_EST_kw) / sizeof(string);// GSS keywordsstatic const string s_GSS_kw[] = {  "GSS", "trapped exon"};static const string* s_GSS_kw_end = s_GSS_kw +     sizeof(s_GSS_kw) / sizeof(string);// STS keywordsstatic const string s_STS_kw[] = {  "STS", "STS(sequence tagged site)", "STS (sequence tagged site)",  "STS sequence", "sequence tagged site"};static const string* s_STS_kw_end = s_STS_kw +     sizeof(s_STS_kw) / sizeof(string);bool CKeywordsItem::x_CheckSpecialKeyword(const string& keyword, Uint4 flags) const{    if ( flags & eEST ) {        if ( find(s_STS_kw, s_STS_kw_end, keyword) != s_STS_kw_end ) {            return false;        }        if ( find(s_GSS_kw, s_GSS_kw_end, keyword) != s_GSS_kw_end ) {            return false;        }    }        if ( flags & eSTS ) {        if ( find(s_EST_kw, s_EST_kw_end, keyword) != s_EST_kw_end ) {            return false;        }        if ( find(s_GSS_kw, s_GSS_kw_end, keyword) != s_GSS_kw_end ) {            return false;        }    }        if ( flags & eGSS ) {        if ( find(s_EST_kw, s_EST_kw_end, keyword) != s_EST_kw_end ) {            return false;        }        if ( find(s_STS_kw, s_STS_kw_end, keyword) != s_STS_kw_end ) {            return false;        }    }        return true;}END_SCOPE(objects)END_NCBI_SCOPE/** ===========================================================================** $Log: keywords_item.cpp,v $* Revision 1000.1  2004/06/01 19:44:58  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:58:42  shomrat* Changes in context** Revision 1.4  2004/03/31 17:14:42  shomrat* EFlags -> ETechFlags** Revision 1.3  2004/03/25 20:44:42  shomrat* remove redundant include directive** Revision 1.2  2003/12/18 17:43:35  shomrat* context.hpp moved** Revision 1.1  2003/12/17 20:23:26  shomrat* Initial Revision (adapted from flat lib)*** ===========================================================================*/

⌨️ 快捷键说明

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