⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 seq_loc_cvt.hpp

📁 ncbi源码
💻 HPP
字号:
/* * =========================================================================== * PRODUCTION $Log: seq_loc_cvt.hpp,v $ * PRODUCTION Revision 1000.4  2004/06/01 19:22:10  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.17 * PRODUCTION * =========================================================================== */#ifndef SEQ_LOC_CVT__HPP#define SEQ_LOC_CVT__HPP/*  $Id: seq_loc_cvt.hpp,v 1000.4 2004/06/01 19:22:10 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, Michael Kimelman, Eugene Vasilchenko** File Description:*   Object manager iterators**/#include <corelib/ncbiobj.hpp>#include <util/range.hpp>#include <util/rangemap.hpp>#include <objmgr/seq_id_handle.hpp>#include <objmgr/impl/heap_scope.hpp>#include <objects/seqloc/Na_strand.hpp>#include <objects/seqloc/Seq_loc.hpp>#include <objects/seqloc/Seq_point.hpp>#include <objects/seqloc/Seq_interval.hpp>BEGIN_NCBI_SCOPEBEGIN_SCOPE(objects)class CSeqMap_CI;class CScope;class CSeq_align_Mapper;class CAnnotObject_Ref;class CSeq_id;class CSeq_loc;class CSeq_interval;class CSeq_point;class CSeq_align;class CDense_seg;class CPacked_seg;class CSeq_align_set;/////////////////////////////////////////////////////////////////////////////// CSeq_loc_Conversion/////////////////////////////////////////////////////////////////////////////class CSeq_loc_Conversion : public CObject{public:    typedef CRange<TSeqPos> TRange;    CSeq_loc_Conversion(CSeq_loc& master_loc_empty,                        const CSeq_id_Handle& dst_id,                        const CSeqMap_CI& seg,                        const CSeq_id_Handle& src_id,                        CScope* scope);    // Create conversion, mapping an ID to itself    CSeq_loc_Conversion(const CSeq_id_Handle& master_id,                        CScope* scope);    ~CSeq_loc_Conversion(void);    TSeqPos ConvertPos(TSeqPos src_pos);    bool GoodSrcId(const CSeq_id& id);    bool MinusStrand(void) const        {            return m_Reverse;        }    bool ConvertPoint(TSeqPos src_pos, ENa_strand src_strand);    bool ConvertPoint(const CSeq_point& src);    bool ConvertInterval(TSeqPos src_from, TSeqPos src_to,                         ENa_strand src_strand);    bool ConvertInterval(const CSeq_interval& src);    enum EConvertFlag {        eCnvDefault,        eCnvAlways    };    enum ELocationType {        eLocation,        eProduct    };    bool Convert(const CSeq_loc& src, CRef<CSeq_loc>* dst,                 EConvertFlag flag = eCnvDefault);    void Convert(CAnnotObject_Ref& obj, ELocationType loctype);    void Reset(void);    bool IsPartial(void) const        {            return m_Partial;        }    void SetSrcId(const CSeq_id_Handle& src)        {            m_Src_id_Handle = src;        }    void SetConversion(const CSeqMap_CI& seg);    const TRange& GetTotalRange(void) const        {            return m_TotalRange;        }        ENa_strand ConvertStrand(ENa_strand strand) const;    void SetMappedLocation(CAnnotObject_Ref& ref, ELocationType loctype);private:    void CheckDstInterval(void);    void CheckDstPoint(void);    CRef<CSeq_interval> GetDstInterval(void);    CRef<CSeq_point> GetDstPoint(void);    void SetDstLoc(CRef<CSeq_loc>* loc);    bool IsSpecialLoc(void) const;    CSeq_loc& GetDstLocEmpty(void)        {            return *m_Dst_loc_Empty;        }    CSeq_id& GetDstId(void)        {            return m_Dst_loc_Empty->SetEmpty();        }    // Translation parameters:    //   Source id and bounds:    CSeq_id_Handle m_Src_id_Handle;    TSeqPos        m_Src_from;    TSeqPos        m_Src_to;    //   Source to destination shift:    TSignedSeqPos  m_Shift;    bool           m_Reverse;    //   Destination id:    CSeq_id_Handle m_Dst_id_Handle;    CRef<CSeq_loc> m_Dst_loc_Empty;    // Results:    //   Cumulative results on destination:    TRange         m_TotalRange;    bool           m_Partial;        //   Last Point, Interval or other simple location's conversion result:    enum EMappedObjectType {        eMappedObjType_not_set,        eMappedObjType_Seq_loc,        eMappedObjType_Seq_point,        eMappedObjType_Seq_interval    };    EMappedObjectType m_LastType;    TRange         m_LastRange;    ENa_strand     m_LastStrand;    // Scope for id resolution:    CHeapScope     m_Scope;    friend class CSeq_loc_Conversion_Set;    friend class CSeq_align_Mapper;    friend struct CConversionRef_Less;};class CSeq_loc_Conversion_Set : public CObject{public:    CSeq_loc_Conversion_Set(CHeapScope& scope);    typedef CRange<TSeqPos> TRange;    typedef CRangeMultimap<CRef<CSeq_loc_Conversion>, TSeqPos> TRangeMap;    typedef TRangeMap::iterator TRangeIterator;    typedef map<CSeq_id_Handle, TRangeMap> TIdMap;    // Conversions by location index    typedef map<unsigned int, TIdMap> TConvByIndex;    void Add(CSeq_loc_Conversion& cvt, unsigned int loc_index);    TRangeIterator BeginRanges(CSeq_id_Handle id,                               TSeqPos from,                               TSeqPos to,                               unsigned int loc_index);    void Convert(CAnnotObject_Ref& obj,                 CSeq_loc_Conversion::ELocationType loctype);    bool Convert(const CSeq_loc& src,                 CRef<CSeq_loc>* dst,                 unsigned int loc_index);    void Convert(const CSeq_align& src, CRef<CSeq_align>* dst);private:    friend class CSeq_align_Mapper;    bool ConvertPoint(const CSeq_point& src,                      CRef<CSeq_loc>* dst,                      unsigned int loc_index);    bool ConvertInterval(const CSeq_interval& src,                         CRef<CSeq_loc>* dst,                         unsigned int loc_index);    CRef<CSeq_loc_Conversion> m_SingleConv;    unsigned int              m_SingleIndex;    TConvByIndex m_CvtByIndex;    bool         m_Partial;    TRange       m_TotalRange;    CHeapScope   m_Scope;};inlinebool CSeq_loc_Conversion::IsSpecialLoc(void) const{    return m_LastType == eMappedObjType_Seq_point ||        m_LastType == eMappedObjType_Seq_interval;}inlinevoid CSeq_loc_Conversion::Reset(void){    _ASSERT(!IsSpecialLoc());    m_TotalRange = TRange::GetEmpty();    m_Partial = false;}inlineTSeqPos CSeq_loc_Conversion::ConvertPos(TSeqPos src_pos){    if ( src_pos < m_Src_from || src_pos > m_Src_to ) {        m_Partial = true;        return kInvalidSeqPos;    }    TSeqPos dst_pos;    if ( !m_Reverse ) {        dst_pos = m_Shift + src_pos;    }    else {        dst_pos = m_Shift - src_pos;    }    return dst_pos;}inlinebool CSeq_loc_Conversion::GoodSrcId(const CSeq_id& id){    bool good = (m_Src_id_Handle == id);    if ( !good ) {        m_Partial = true;    }    return good;}inlineENa_strand CSeq_loc_Conversion::ConvertStrand(ENa_strand strand) const{    if ( m_Reverse ) {        strand = Reverse(strand);    }    return strand;}inlinebool CSeq_loc_Conversion::ConvertPoint(const CSeq_point& src){    ENa_strand strand = src.IsSetStrand()? src.GetStrand(): eNa_strand_unknown;    return GoodSrcId(src.GetId()) && ConvertPoint(src.GetPoint(), strand);}inlinebool CSeq_loc_Conversion::ConvertInterval(const CSeq_interval& src){    ENa_strand strand = src.IsSetStrand()? src.GetStrand(): eNa_strand_unknown;    return GoodSrcId(src.GetId()) && ConvertInterval(src.GetFrom(), src.GetTo(), strand);}END_SCOPE(objects)END_NCBI_SCOPE/** ---------------------------------------------------------------------------* $Log: seq_loc_cvt.hpp,v $* Revision 1000.4  2004/06/01 19:22:10  gouriano* PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.17** Revision 1.17  2004/05/26 14:29:20  grichenk* Redesigned CSeq_align_Mapper: preserve non-mapping intervals,* fixed strands handling, improved performance.** Revision 1.16  2004/05/10 18:26:37  grichenk* Fixed 'not used' warnings** Revision 1.15  2004/03/30 21:21:09  grichenk* Reduced number of includes.** Revision 1.14  2004/03/30 15:42:33  grichenk* Moved alignment mapper to separate file, added alignment mapping* to CSeq_loc_Mapper.** Revision 1.13  2004/03/16 15:47:27  vasilche* Added CBioseq_set_Handle and set of EditHandles** Revision 1.12  2004/02/23 15:23:16  grichenk* Removed unused members** Revision 1.11  2004/02/06 16:07:26  grichenk* Added CBioseq_Handle::GetSeq_entry_Handle()* Fixed MapLocation()** Revision 1.10  2004/01/30 15:25:44  grichenk* Fixed alignments mapping and sorting** Revision 1.9  2004/01/28 20:54:35  vasilche* Fixed mapping of annotations.** Revision 1.8  2004/01/23 16:14:46  grichenk* Implemented alignment mapping** Revision 1.7  2003/11/10 18:11:03  grichenk* Moved CSeq_loc_Conversion_Set to seq_loc_cvt** Revision 1.6  2003/11/04 16:21:36  grichenk* Updated CAnnotTypes_CI to map whole features instead of splitting* them by sequence segments.** Revision 1.5  2003/10/27 20:07:10  vasilche* Started implementation of full annotations' mapping.** Revision 1.4  2003/09/30 16:22:01  vasilche* Updated internal object manager classes to be able to load ID2 data.* SNP blobs are loaded as ID2 split blobs - readers convert them automatically.* Scope caches results of requests for data to data loaders.* Optimized CSeq_id_Handle for gis.* Optimized bioseq lookup in scope.* Reduced object allocations in annotation iterators.* CScope is allowed to be destroyed before other objects using this scope are* deleted (feature iterators, bioseq handles etc).* Optimized lookup for matching Seq-ids in CSeq_id_Mapper.* Added 'adaptive' option to objmgr_demo application.** Revision 1.3  2003/08/27 14:28:51  vasilche* Reduce amount of object allocations in feature iteration.** Revision 1.2  2003/08/15 19:19:15  vasilche* Fixed memory leak in string packing hooks.* Fixed processing of 'partial' flag of features.* Allow table packing of non-point SNP.* Allow table packing of SNP with long alleles.** Revision 1.1  2003/08/14 20:05:18  vasilche* Simple SNP features are stored as table internally.* They are recreated when needed using CFeat_CI.** ===========================================================================*/#endif  // ANNOT_TYPES_CI__HPP

⌨️ 快捷键说明

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