bioseq_handle.cpp

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

CPP
1,051
字号
/* * =========================================================================== * PRODUCTION $Log: bioseq_handle.cpp,v $ * PRODUCTION Revision 1000.5  2004/06/01 19:22:54  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.66 * PRODUCTION * =========================================================================== *//*  $Id: bioseq_handle.cpp,v 1000.5 2004/06/01 19:22:54 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: Aleksey Grichenko, Eugene Vasilchenko** File Description:**/#include <ncbi_pch.hpp>#include <objmgr/bioseq_handle.hpp>#include <objmgr/seq_annot_handle.hpp>#include <objmgr/seq_entry_handle.hpp>#include <objmgr/impl/scope_impl.hpp>#include <objmgr/seq_vector.hpp>#include <objmgr/seqmatch_info.hpp>#include <objmgr/impl/data_source.hpp>#include <objmgr/impl/tse_info.hpp>#include <objmgr/impl/handle_range.hpp>#include <objmgr/impl/bioseq_info.hpp>#include <objmgr/impl/seq_entry_info.hpp>#include <objmgr/impl/bioseq_set_info.hpp>#include <objmgr/impl/tse_info.hpp>#include <objmgr/impl/synonyms.hpp>#include <objmgr/seq_loc_mapper.hpp>#include <objects/general/Object_id.hpp>#include <objects/seqloc/Seq_loc.hpp>#include <objects/seqloc/Seq_interval.hpp>#include <objects/seqloc/Seq_point.hpp>#include <objects/seqloc/Seq_id.hpp>#include <objects/seq/Bioseq.hpp>#include <objects/seqset/Seq_entry.hpp>BEGIN_NCBI_SCOPEBEGIN_SCOPE(objects)/////////////////////////////////////////////////////////////////////////////// CBioseq_Handle/////////////////////////////////////////////////////////////////////////////CBioseq_Handle::CBioseq_Handle(const CSeq_id_Handle& id,                               CBioseq_ScopeInfo* bioseq_info)    : m_Seq_id(id),      m_Bioseq_Info(bioseq_info){}bool CBioseq_Handle::operator==(const CBioseq_Handle& h) const{    if ( m_Scope != m_Scope ) {        return false;    }    if ( *this && h )        return &x_GetInfo() == &h.x_GetInfo();    // Compare by id key    return GetSeq_id_Handle() == h.GetSeq_id_Handle();}bool CBioseq_Handle::operator< (const CBioseq_Handle& h) const{    if ( m_Scope != h.m_Scope ) {        return m_Scope < h.m_Scope;    }    if ( *this && h )        return &x_GetInfo() < &h.x_GetInfo();    return GetSeq_id_Handle() < h.GetSeq_id_Handle();}const CBioseq_Info& CBioseq_Handle::x_GetInfo(void) const{    return x_GetScopeInfo().GetBioseq_Info();}CConstRef<CSeq_id> CBioseq_Handle::GetSeqId(void) const{    return GetSeq_id_Handle().GetSeqIdOrNull();}CConstRef<CBioseq> CBioseq_Handle::GetCompleteBioseq(void) const{    return x_GetInfo().GetCompleteBioseq();}const CBioseq& CBioseq_Handle::GetBioseq(void) const{    ERR_POST_ONCE(Warning<<                  "CBioseq_Handle::GetBioseq() is deprecated, "                  "use GetCompleteBioseq() or GetBioseqCore().");    return *GetCompleteBioseq();}const CSeq_entry& CBioseq_Handle::GetTopLevelSeqEntry(void) const{    ERR_POST_ONCE(Warning<<                  "CBioseq_Handle::GetTopLevelSeqEntry() is deprecated, "                  "use GetTopLevelEntry().");    return *GetTopLevelEntry().GetCompleteSeq_entry();}CBioseq_Handle::TBioseqCore CBioseq_Handle::GetBioseqCore(void) const{    return x_GetInfo().GetBioseqCore();}CBioseq_EditHandle CBioseq_Handle::GetEditHandle(void) const{    return m_Scope->GetEditHandle(*this);}/////////////////////////////////////////////////////////////////////////////// Bioseq membersbool CBioseq_Handle::IsSetId(void) const{    return x_GetInfo().IsSetId();}bool CBioseq_Handle::CanGetId(void) const{    return bool(m_Bioseq_Info)  &&  x_GetInfo().CanGetId();}const CBioseq_Handle::TId& CBioseq_Handle::GetId(void) const{    return x_GetInfo().GetId();}bool CBioseq_Handle::IsSetDescr(void) const{    return x_GetInfo().IsSetDescr();}bool CBioseq_Handle::CanGetDescr(void) const{    return bool(m_Bioseq_Info)  &&  x_GetInfo().CanGetDescr();}const CSeq_descr& CBioseq_Handle::GetDescr(void) const{    return x_GetInfo().GetDescr();}bool CBioseq_Handle::IsSetInst(void) const{    return x_GetInfo().IsSetInst();}bool CBioseq_Handle::CanGetInst(void) const{    return bool(m_Bioseq_Info)  &&  x_GetInfo().CanGetInst();}const CSeq_inst& CBioseq_Handle::GetInst(void) const{    return x_GetInfo().GetInst();}bool CBioseq_Handle::IsSetInst_Repr(void) const{    return x_GetInfo().IsSetInst_Repr();}bool CBioseq_Handle::CanGetInst_Repr(void) const{    return bool(m_Bioseq_Info)  &&  x_GetInfo().CanGetInst_Repr();}CBioseq_Handle::TInst_Repr CBioseq_Handle::GetInst_Repr(void) const{    return x_GetInfo().GetInst_Repr();}bool CBioseq_Handle::IsSetInst_Mol(void) const{    return x_GetInfo().IsSetInst_Mol();}bool CBioseq_Handle::CanGetInst_Mol(void) const{    return bool(m_Bioseq_Info)  &&  x_GetInfo().CanGetInst_Mol();}CBioseq_Handle::TInst_Mol CBioseq_Handle::GetInst_Mol(void) const{    return x_GetInfo().GetInst_Mol();}bool CBioseq_Handle::IsSetInst_Length(void) const{    return x_GetInfo().IsSetInst_Length();}bool CBioseq_Handle::CanGetInst_Length(void) const{    return bool(m_Bioseq_Info)  &&  x_GetInfo().CanGetInst_Length();}CBioseq_Handle::TInst_Length CBioseq_Handle::GetInst_Length(void) const{    return x_GetInfo().GetInst_Length();}TSeqPos CBioseq_Handle::GetBioseqLength(void) const{    return x_GetInfo().GetBioseqLength();}bool CBioseq_Handle::IsSetInst_Fuzz(void) const{    return x_GetInfo().IsSetInst_Fuzz();}bool CBioseq_Handle::CanGetInst_Fuzz(void) const{    return bool(m_Bioseq_Info)  &&  x_GetInfo().CanGetInst_Fuzz();}const CBioseq_Handle::TInst_Fuzz& CBioseq_Handle::GetInst_Fuzz(void) const{    return x_GetInfo().GetInst_Fuzz();}bool CBioseq_Handle::IsSetInst_Topology(void) const{    return x_GetInfo().IsSetInst_Topology();}bool CBioseq_Handle::CanGetInst_Topology(void) const{    return bool(m_Bioseq_Info)  &&  x_GetInfo().CanGetInst_Topology();}CBioseq_Handle::TInst_Topology CBioseq_Handle::GetInst_Topology(void) const{    return x_GetInfo().GetInst_Topology();}bool CBioseq_Handle::IsSetInst_Strand(void) const{    return x_GetInfo().IsSetInst_Strand();}bool CBioseq_Handle::CanGetInst_Strand(void) const{    return bool(m_Bioseq_Info)  &&  x_GetInfo().CanGetInst_Strand();}CBioseq_Handle::TInst_Strand CBioseq_Handle::GetInst_Strand(void) const{    return x_GetInfo().GetInst_Strand();}bool CBioseq_Handle::IsSetInst_Seq_data(void) const{    return x_GetInfo().IsSetInst_Seq_data();}bool CBioseq_Handle::CanGetInst_Seq_data(void) const{    return bool(m_Bioseq_Info)  &&  x_GetInfo().CanGetInst_Seq_data();}const CBioseq_Handle::TInst_Seq_data&CBioseq_Handle::GetInst_Seq_data(void) const{    return x_GetInfo().GetInst_Seq_data();}bool CBioseq_Handle::IsSetInst_Ext(void) const{    return x_GetInfo().IsSetInst_Ext();}bool CBioseq_Handle::CanGetInst_Ext(void) const{    return bool(m_Bioseq_Info)  &&  x_GetInfo().CanGetInst_Ext();}const CBioseq_Handle::TInst_Ext& CBioseq_Handle::GetInst_Ext(void) const{    return x_GetInfo().GetInst_Ext();}bool CBioseq_Handle::IsSetInst_Hist(void) const{    return x_GetInfo().IsSetInst_Hist();}bool CBioseq_Handle::CanGetInst_Hist(void) const{    return bool(m_Bioseq_Info)  &&  x_GetInfo().CanGetInst_Hist();}const CBioseq_Handle::TInst_Hist& CBioseq_Handle::GetInst_Hist(void) const{    return x_GetInfo().GetInst_Hist();}bool CBioseq_Handle::HasAnnots(void) const{    return x_GetInfo().HasAnnots();}// end of Bioseq members/////////////////////////////////////////////////////////////////////////////CSeq_inst::TMol CBioseq_Handle::GetBioseqMolType(void) const{    return x_GetInfo().GetInst_Mol();}const CSeqMap& CBioseq_Handle::GetSeqMap(void) const{    return x_GetInfo().GetSeqMap();}CSeqVector CBioseq_Handle::GetSeqVector(EVectorCoding coding,                                        ENa_strand strand) const{    return CSeqVector(GetSeqMap(), GetScope(), coding, strand);}CSeqVector CBioseq_Handle::GetSeqVector(ENa_strand strand) const{    return CSeqVector(GetSeqMap(), GetScope(), eCoding_Ncbi, strand);}CSeqVector CBioseq_Handle::GetSeqVector(EVectorCoding coding,                                        EVectorStrand strand) const{    return CSeqVector(GetSeqMap(), GetScope(), coding,                      strand == eStrand_Minus?                      eNa_strand_minus: eNa_strand_plus);}CSeqVector CBioseq_Handle::GetSeqVector(EVectorStrand strand) const{    return CSeqVector(GetSeqMap(), GetScope(), eCoding_Ncbi,                      strand == eStrand_Minus?                      eNa_strand_minus: eNa_strand_plus);}CConstRef<CSynonymsSet> CBioseq_Handle::GetSynonyms(void) const{    if ( !*this ) {        return CConstRef<CSynonymsSet>();    }    return GetScope().GetSynonyms(*this);}bool CBioseq_Handle::IsSynonym(const CSeq_id& id) const{    CConstRef<CSynonymsSet> syns = GetSynonyms();    return bool(syns) && syns->ContainsSynonym(CSeq_id_Handle::GetHandle(id));}CSeqVector CBioseq_Handle::GetSequenceView(const CSeq_loc& location,                                           ESequenceViewMode mode,                                           EVectorCoding coding,                                           ENa_strand strand) const{    if ( mode != eViewConstructed )        strand = eNa_strand_unknown;    return CSeqVector(GetSeqMapByLocation(location, mode), GetScope(),                      coding, strand);}CConstRef<CSeqMap>CBioseq_Handle::GetSeqMapByLocation(const CSeq_loc& loc,                                    ESequenceViewMode mode) const{    CConstRef<CSeqMap> ret;    if ( mode == eViewConstructed ) {        ret = CSeqMap::CreateSeqMapForSeq_loc(loc, &GetScope());    }    else {        // Parse the location        CHandleRange rlist;      // all intervals pointing to the sequence        CSeq_loc_CI loc_it(loc);        for ( ; loc_it; ++loc_it) {            if ( !IsSynonym(loc_it.GetSeq_id()) )                continue;            rlist.AddRange(loc_it.GetRange(), loc_it.GetStrand());        }        // Make mode-dependent parsing of the range list        CHandleRange mode_rlist; // processed intervals (merged, excluded)        switch (mode) {        case eViewMerged:        {            // Merge intervals from "rlist"            ITERATE (CHandleRange, rit, rlist) {                mode_rlist.MergeRange(rit->first, rit->second);            }            break;        }        case eViewExcluded:        {            // Exclude intervals from "rlist"            TSeqPos last_from = 0;            ITERATE (CHandleRange, rit, rlist) {                if (last_from < rit->first.GetFrom()) {                    mode_rlist.MergeRange(                        CHandleRange::TRange(last_from, rit->first.GetFrom()-1),                        eNa_strand_unknown);                }                if ( !rit->first.IsWholeTo() ) {                    last_from = rit->first.GetTo()+1;                }                else {                    last_from = CHandleRange::TRange::GetWholeTo();                }            }            TSeqPos total_length = GetSeqMap().GetLength(&GetScope());            if (last_from < total_length) {                mode_rlist.MergeRange(                    CHandleRange::TRange(last_from, total_length-1),                    eNa_strand_unknown);            }            break;        }        default:            break;        }        // Convert ranges to seq-loc        CRef<CSeq_loc> view_loc(new CSeq_loc);        ITERATE (CHandleRange, rit, mode_rlist) {            CRef<CSeq_loc> seg_loc(new CSeq_loc);            CRef<CSeq_id> id(new CSeq_id);            id->Assign(*GetSeqId());

⌨️ 快捷键说明

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