utilities.cpp

来自「ncbi源码」· C++ 代码 · 共 1,229 行 · 第 1/4 页

CPP
1,229
字号
/* * =========================================================================== * PRODUCTION $Log: utilities.cpp,v $ * PRODUCTION Revision 1000.2  2004/06/01 19:47:34  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.20 * PRODUCTION * =========================================================================== *//*  $Id: utilities.cpp,v 1000.2 2004/06/01 19:47:34 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 * * File Description: *      Implementation of utility classes and functions. * */#include <ncbi_pch.hpp>#include <corelib/ncbistd.hpp>#include <corelib/ncbistr.hpp>#include <serial/enumvalues.hpp>#include <serial/serialimpl.hpp>#include <objects/seqloc/Seq_id.hpp>#include <objects/seqfeat/SeqFeatData.hpp>#include <objects/seqfeat/Gb_qual.hpp>#include <objects/seqset/Seq_entry.hpp>#include <objects/seqset/Bioseq_set.hpp>#include <objects/seq/Bioseq.hpp>#include <objmgr/bioseq_handle.hpp>#include <objmgr/scope.hpp>#include <objmgr/seq_vector.hpp>#include <objmgr/util/sequence.hpp>#include <vector>#include <algorithm>#include <list>#include "utilities.hpp"BEGIN_NCBI_SCOPEBEGIN_SCOPE(objects)BEGIN_SCOPE(validator)// =============================================================================//                           Enumeration of GBQual types// =============================================================================CGbqualType::EType CGbqualType::GetType(const string& qual){    EType type;    try {        type = static_cast<EType>(GetTypeInfo_enum_EType()->FindValue(qual));    } catch (runtime_error rt) {        type = CGbqualType::e_Bad;    }    return type;}CGbqualType::EType CGbqualType::GetType(const CGb_qual& qual){    return GetType(qual.GetQual());}const string& CGbqualType::GetString(CGbqualType::EType gbqual){    return GetTypeInfo_enum_EType()->FindName(gbqual, true);}        BEGIN_NAMED_ENUM_IN_INFO("", CGbqualType::, EType, false){    ADD_ENUM_VALUE("bad",               e_Bad);    ADD_ENUM_VALUE("allele",            e_Allele);    ADD_ENUM_VALUE("anticodon",         e_Anticodon);    ADD_ENUM_VALUE("bound_moiety",      e_Bound_moiety);    ADD_ENUM_VALUE("citation",          e_Citation);    ADD_ENUM_VALUE("clone",             e_Clone);    ADD_ENUM_VALUE("codon",             e_Codon);    ADD_ENUM_VALUE("codon_start",       e_Codon_start);    ADD_ENUM_VALUE("cons_splice",       e_Cons_splice);    ADD_ENUM_VALUE("direction",         e_Direction);    ADD_ENUM_VALUE("EC_number",         e_EC_number);    ADD_ENUM_VALUE("evidence",          e_Evidence);    ADD_ENUM_VALUE("exception",         e_Exception);    ADD_ENUM_VALUE("frequency",         e_Frequency);    ADD_ENUM_VALUE("function",          e_Function);    ADD_ENUM_VALUE("gene",              e_Gene);    ADD_ENUM_VALUE("insertion_seq",     e_Insertion_seq);    ADD_ENUM_VALUE("label",             e_Label);    ADD_ENUM_VALUE("locus_tag",         e_Locus_tag);    ADD_ENUM_VALUE("map",               e_Map);    ADD_ENUM_VALUE("mod_base",          e_Mod_base);    ADD_ENUM_VALUE("note",              e_Note);    ADD_ENUM_VALUE("number",            e_Number);    ADD_ENUM_VALUE("organism",          e_Organism);    ADD_ENUM_VALUE("partial",           e_Partial);    ADD_ENUM_VALUE("PCR_conditions",    e_PCR_conditions);    ADD_ENUM_VALUE("phenotype",         e_Phenotype);    ADD_ENUM_VALUE("product",           e_Product);    ADD_ENUM_VALUE("replace",           e_Replace);    ADD_ENUM_VALUE("rpt_family",        e_Rpt_family);    ADD_ENUM_VALUE("rpt_type",          e_Rpt_type);    ADD_ENUM_VALUE("rpt_unit",          e_Rpt_unit);    ADD_ENUM_VALUE("site",              e_Site);    ADD_ENUM_VALUE("site_type",         e_Site_type);    ADD_ENUM_VALUE("standard_name",     e_Standard_name);    ADD_ENUM_VALUE("transl_except",     e_Transl_except);    ADD_ENUM_VALUE("transl_table",      e_Transl_table);    ADD_ENUM_VALUE("translation",       e_Translation);    ADD_ENUM_VALUE("transposon",        e_Transposon);    ADD_ENUM_VALUE("usedin",            e_Usedin);}END_ENUM_INFO// =============================================================================//                        Associating Features and GBQuals// =============================================================================bool CFeatQualAssoc::IsLegalGbqual(CSeqFeatData::ESubtype ftype, CGbqualType::EType gbqual) {    return Instance()->IsLegal(ftype, gbqual);}const CFeatQualAssoc::TGBQualTypeVec& CFeatQualAssoc::GetMandatoryGbquals(CSeqFeatData::ESubtype ftype){    return Instance()->GetMandatoryQuals(ftype);}auto_ptr<CFeatQualAssoc> CFeatQualAssoc::sm_Instance;bool CFeatQualAssoc::IsLegal(CSeqFeatData::ESubtype ftype,  CGbqualType::EType gbqual){    if ( m_LegalGbquals.find(ftype) != m_LegalGbquals.end() ) {        if ( find( m_LegalGbquals[ftype].begin(),                    m_LegalGbquals[ftype].end(),                    gbqual) != m_LegalGbquals[ftype].end() ) {            return true;        }    }    return false;}const CFeatQualAssoc::TGBQualTypeVec& CFeatQualAssoc::GetMandatoryQuals(CSeqFeatData::ESubtype ftype){    static TGBQualTypeVec empty;    if ( m_MandatoryGbquals.find(ftype) != m_MandatoryGbquals.end() ) {        return m_MandatoryGbquals[ftype];    }    return empty;}CFeatQualAssoc* CFeatQualAssoc::Instance(void){    if ( !sm_Instance.get() ) {        sm_Instance.reset(new CFeatQualAssoc);    }    return sm_Instance.get();}CFeatQualAssoc::CFeatQualAssoc(void){    PoplulateLegalGbquals();    PopulateMandatoryGbquals();}void CFeatQualAssoc::Associate(CSeqFeatData::ESubtype feat_subtype, CGbqualType::EType gbqual_type){    // IMPORTANT: Bug in GCC compile prevent the code to be written as:    //    m_LegalGbqual[feat_subtype].push_back(gbqual_type);    TGBQualTypeVec& vec = m_LegalGbquals[feat_subtype];    vec.push_back(gbqual_type);}void CFeatQualAssoc::PoplulateLegalGbquals(void){    // gene    Associate( CSeqFeatData::eSubtype_gene, CGbqualType::e_Allele );    Associate( CSeqFeatData::eSubtype_gene, CGbqualType::e_Function );    Associate( CSeqFeatData::eSubtype_gene, CGbqualType::e_Label );    Associate( CSeqFeatData::eSubtype_gene, CGbqualType::e_Map );    Associate( CSeqFeatData::eSubtype_gene, CGbqualType::e_Phenotype );    Associate( CSeqFeatData::eSubtype_gene, CGbqualType::e_Product );    Associate( CSeqFeatData::eSubtype_gene, CGbqualType::e_Standard_name );    Associate( CSeqFeatData::eSubtype_gene, CGbqualType::e_Usedin );         // CDS    Associate( CSeqFeatData::eSubtype_cdregion, CGbqualType::e_Allele );    Associate( CSeqFeatData::eSubtype_cdregion, CGbqualType::e_Codon );    Associate( CSeqFeatData::eSubtype_cdregion, CGbqualType::e_Label );    Associate( CSeqFeatData::eSubtype_cdregion, CGbqualType::e_Map );    Associate( CSeqFeatData::eSubtype_cdregion, CGbqualType::e_Number );    Associate( CSeqFeatData::eSubtype_cdregion, CGbqualType::e_Standard_name );    Associate( CSeqFeatData::eSubtype_cdregion, CGbqualType::e_Usedin );    // prot    Associate( CSeqFeatData::eSubtype_prot, CGbqualType::e_Product );    // preRNA    Associate( CSeqFeatData::eSubtype_preRNA, CGbqualType::e_Allele );    Associate( CSeqFeatData::eSubtype_preRNA, CGbqualType::e_Function );    Associate( CSeqFeatData::eSubtype_preRNA, CGbqualType::e_Label );    Associate( CSeqFeatData::eSubtype_preRNA, CGbqualType::e_Map );    Associate( CSeqFeatData::eSubtype_preRNA, CGbqualType::e_Product );    Associate( CSeqFeatData::eSubtype_preRNA, CGbqualType::e_Standard_name );    Associate( CSeqFeatData::eSubtype_preRNA, CGbqualType::e_Usedin );    // mRNA    Associate( CSeqFeatData::eSubtype_mRNA, CGbqualType::e_Allele );    Associate( CSeqFeatData::eSubtype_mRNA, CGbqualType::e_Function );    Associate( CSeqFeatData::eSubtype_mRNA, CGbqualType::e_Label );    Associate( CSeqFeatData::eSubtype_mRNA, CGbqualType::e_Map );    Associate( CSeqFeatData::eSubtype_mRNA, CGbqualType::e_Product );    Associate( CSeqFeatData::eSubtype_mRNA, CGbqualType::e_Standard_name );    Associate( CSeqFeatData::eSubtype_mRNA, CGbqualType::e_Usedin );    // tRNA    Associate( CSeqFeatData::eSubtype_tRNA, CGbqualType::e_Function );    Associate( CSeqFeatData::eSubtype_tRNA, CGbqualType::e_Label );    Associate( CSeqFeatData::eSubtype_tRNA, CGbqualType::e_Map );    Associate( CSeqFeatData::eSubtype_tRNA, CGbqualType::e_Product );    Associate( CSeqFeatData::eSubtype_tRNA, CGbqualType::e_Standard_name );    Associate( CSeqFeatData::eSubtype_tRNA, CGbqualType::e_Usedin );    // rRNA    Associate( CSeqFeatData::eSubtype_rRNA, CGbqualType::e_Function );    Associate( CSeqFeatData::eSubtype_rRNA, CGbqualType::e_Label );    Associate( CSeqFeatData::eSubtype_rRNA, CGbqualType::e_Map );    Associate( CSeqFeatData::eSubtype_rRNA, CGbqualType::e_Product );    Associate( CSeqFeatData::eSubtype_rRNA, CGbqualType::e_Standard_name );    Associate( CSeqFeatData::eSubtype_rRNA, CGbqualType::e_Usedin );    // snRNA    Associate( CSeqFeatData::eSubtype_snRNA, CGbqualType::e_Function );    Associate( CSeqFeatData::eSubtype_snRNA, CGbqualType::e_Label );    Associate( CSeqFeatData::eSubtype_snRNA, CGbqualType::e_Map );    Associate( CSeqFeatData::eSubtype_snRNA, CGbqualType::e_Product );    Associate( CSeqFeatData::eSubtype_snRNA, CGbqualType::e_Standard_name );    Associate( CSeqFeatData::eSubtype_snRNA, CGbqualType::e_Usedin );    // scRNA    Associate( CSeqFeatData::eSubtype_scRNA, CGbqualType::e_Function );    Associate( CSeqFeatData::eSubtype_scRNA, CGbqualType::e_Label );    Associate( CSeqFeatData::eSubtype_scRNA, CGbqualType::e_Map );    Associate( CSeqFeatData::eSubtype_scRNA, CGbqualType::e_Product );    Associate( CSeqFeatData::eSubtype_scRNA, CGbqualType::e_Standard_name );    Associate( CSeqFeatData::eSubtype_scRNA, CGbqualType::e_Usedin );    // otherRNA    Associate( CSeqFeatData::eSubtype_otherRNA, CGbqualType::e_Function );    Associate( CSeqFeatData::eSubtype_otherRNA, CGbqualType::e_Label );    Associate( CSeqFeatData::eSubtype_otherRNA, CGbqualType::e_Map );    Associate( CSeqFeatData::eSubtype_otherRNA, CGbqualType::e_Product );    Associate( CSeqFeatData::eSubtype_otherRNA, CGbqualType::e_Standard_name );    Associate( CSeqFeatData::eSubtype_otherRNA, CGbqualType::e_Usedin );    // attenuator    Associate( CSeqFeatData::eSubtype_attenuator, CGbqualType::e_Label );    Associate( CSeqFeatData::eSubtype_attenuator, CGbqualType::e_Map );    Associate( CSeqFeatData::eSubtype_attenuator, CGbqualType::e_Phenotype );

⌨️ 快捷键说明

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