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 + -
显示快捷键?