bioseq_info.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:12k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: bioseq_info.hpp,v $
  4.  * PRODUCTION Revision 1000.3  2004/06/01 19:21:58  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.19
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef OBJECTS_OBJMGR_IMPL___BIOSEQ_INFO__HPP
  10. #define OBJECTS_OBJMGR_IMPL___BIOSEQ_INFO__HPP
  11. /*  $Id: bioseq_info.hpp,v 1000.3 2004/06/01 19:21:58 gouriano Exp $
  12.  * ===========================================================================
  13.  *
  14.  *                            PUBLIC DOMAIN NOTICE
  15.  *               National Center for Biotechnology Information
  16.  *
  17.  *  This software/database is a "United States Government Work" under the
  18.  *  terms of the United States Copyright Act.  It was written as part of
  19.  *  the author's official duties as a United States Government employee and
  20.  *  thus cannot be copyrighted.  This software/database is freely available
  21.  *  to the public for use. The National Library of Medicine and the U.S.
  22.  *  Government have not placed any restriction on its use or reproduction.
  23.  *
  24.  *  Although all reasonable efforts have been taken to ensure the accuracy
  25.  *  and reliability of the software and data, the NLM and the U.S.
  26.  *  Government do not and cannot warrant the performance or results that
  27.  *  may be obtained by using this software or data. The NLM and the U.S.
  28.  *  Government disclaim all warranties, express or implied, including
  29.  *  warranties of performance, merchantability or fitness for any particular
  30.  *  purpose.
  31.  *
  32.  *  Please cite the author in any work or product based on this material.
  33.  *
  34.  * ===========================================================================
  35.  *
  36.  * Author: Aleksey Grichenko, Eugene Vasilchenko
  37.  *
  38.  * File Description:
  39.  *   Bioseq info for data source
  40.  *
  41.  */
  42. #include <objmgr/impl/bioseq_base_info.hpp>
  43. #include <corelib/ncbimtx.hpp>
  44. #include <objmgr/seq_id_handle.hpp>
  45. #include <objects/seq/Bioseq.hpp>
  46. #include <objects/seq/Seq_inst.hpp>
  47. #include <vector>
  48. BEGIN_NCBI_SCOPE
  49. BEGIN_SCOPE(objects)
  50. class CSeq_entry;
  51. class CSeq_entry_Info;
  52. class CBioseq;
  53. class CSeq_id_Handle;
  54. class CSeqMap;
  55. class CTSE_Info;
  56. class CDataSource;
  57. class CSeq_inst;
  58. class CSeq_id;
  59. class CPacked_seqint;
  60. class CSeq_loc;
  61. class CSeq_loc_mix;
  62. class CSeq_loc_equiv;
  63. class CSeg_ext;
  64. class CDelta_ext;
  65. class CDelta_seq;
  66. class CScope_Impl;
  67. ////////////////////////////////////////////////////////////////////
  68. //
  69. //  CBioseq_Info::
  70. //
  71. //    Structure to keep bioseq's parent seq-entry along with the list
  72. //    of seq-id synonyms for the bioseq.
  73. //
  74. class NCBI_XOBJMGR_EXPORT CBioseq_Info : public CBioseq_Base_Info
  75. {
  76.     typedef CBioseq_Base_Info TParent;
  77. public:
  78.     // 'ctors
  79.     explicit CBioseq_Info(const CBioseq_Info&);
  80.     explicit CBioseq_Info(CBioseq& seq);
  81.     virtual ~CBioseq_Info(void);
  82.     typedef CBioseq TObject;
  83.     CConstRef<TObject> GetBioseqCore(void) const;
  84.     CConstRef<TObject> GetCompleteBioseq(void) const;
  85.     // Bioseq members
  86.     // id
  87.     typedef vector<CSeq_id_Handle> TId;
  88.     bool IsSetId(void) const;
  89.     bool CanGetId(void) const;
  90.     const TId& GetId(void) const;
  91.     bool HasId(const CSeq_id_Handle& id) const;
  92.     void AddId(const CSeq_id_Handle& id);
  93.     void RemoveId(const CSeq_id_Handle& id);
  94.     string IdString(void) const;
  95.     bool IsSetDescr(void) const;
  96.     bool CanGetDescr(void) const;
  97.     const TDescr& GetDescr(void) const;
  98.     void SetDescr(TDescr& v);
  99.     TDescr& x_SetDescr(void);
  100.     void ResetDescr(void);
  101.     // inst
  102.     typedef TObject::TInst TInst;
  103.     bool IsSetInst(void) const;
  104.     bool CanGetInst(void) const;
  105.     const TInst& GetInst(void) const;
  106.     void SetInst(TInst& v);
  107.     // inst.repr
  108.     typedef TInst::TRepr TInst_Repr;
  109.     bool IsSetInst_Repr(void) const;
  110.     bool CanGetInst_Repr(void) const;
  111.     TInst_Repr GetInst_Repr(void) const;
  112.     void SetInst_Repr(TInst_Repr v);
  113.     // inst.mol
  114.     typedef TInst::TMol TInst_Mol;
  115.     bool IsSetInst_Mol(void) const;
  116.     bool CanGetInst_Mol(void) const;
  117.     TInst_Mol GetInst_Mol(void) const;
  118.     void SetInst_Mol(TInst_Mol v);
  119.     // inst.length
  120.     typedef TInst::TLength TInst_Length;
  121.     bool IsSetInst_Length(void) const;
  122.     bool CanGetInst_Length(void) const;
  123.     TInst_Length GetInst_Length(void) const;
  124.     void SetInst_Length(TInst_Length v);
  125.     TSeqPos GetBioseqLength(void) const; // try to calculate it if not set
  126.     // inst.fuzz
  127.     typedef TInst::TFuzz TInst_Fuzz;
  128.     bool IsSetInst_Fuzz(void) const;
  129.     bool CanGetInst_Fuzz(void) const;
  130.     const TInst_Fuzz& GetInst_Fuzz(void) const;
  131.     void SetInst_Fuzz(TInst_Fuzz& v);
  132.     // inst.topology
  133.     typedef TInst::TTopology TInst_Topology;
  134.     bool IsSetInst_Topology(void) const;
  135.     bool CanGetInst_Topology(void) const;
  136.     TInst_Topology GetInst_Topology(void) const;
  137.     void SetInst_Topology(TInst_Topology v);
  138.     // inst.strand
  139.     typedef TInst::TStrand TInst_Strand;
  140.     bool IsSetInst_Strand(void) const;
  141.     bool CanGetInst_Strand(void) const;
  142.     TInst_Strand GetInst_Strand(void) const;
  143.     void SetInst_Strand(TInst_Strand v);
  144.     // inst.seq-data
  145.     typedef TInst::TSeq_data TInst_Seq_data;
  146.     bool IsSetInst_Seq_data(void) const;
  147.     bool CanGetInst_Seq_data(void) const;
  148.     const TInst_Seq_data& GetInst_Seq_data(void) const;
  149.     void SetInst_Seq_data(TInst_Seq_data& v);
  150.     // inst.ext
  151.     typedef TInst::TExt TInst_Ext;
  152.     bool IsSetInst_Ext(void) const;
  153.     bool CanGetInst_Ext(void) const;
  154.     const TInst_Ext& GetInst_Ext(void) const;
  155.     void SetInst_Ext(TInst_Ext& v);
  156.     // inst.hist
  157.     typedef TInst::THist TInst_Hist;
  158.     bool IsSetInst_Hist(void) const;
  159.     bool CanGetInst_Hist(void) const;
  160.     const TInst_Hist& GetInst_Hist(void) const;
  161.     void SetInst_Hist(TInst_Hist& v);
  162.     // Get some values from core:
  163.     const CSeqMap& GetSeqMap(void) const;
  164.     void x_AttachMap(CSeqMap& seq_map);
  165. protected:
  166.     friend class CDataSource;
  167.     friend class CScope_Impl;
  168.     friend class CTSE_Info;
  169.     friend class CSeq_entry_Info;
  170.     friend class CBioseq_set_Info;
  171.     TObjAnnot& x_SetObjAnnot(void);
  172.     void x_ResetObjAnnot(void);
  173. private:
  174.     CBioseq_Info& operator=(const CBioseq_Info&);
  175.     void x_DSAttachContents(CDataSource& ds);
  176.     void x_DSDetachContents(CDataSource& ds);
  177.     void x_TSEAttachContents(CTSE_Info& tse);
  178.     void x_TSEDetachContents(CTSE_Info& tse);
  179.     void x_ParentAttach(CSeq_entry_Info& parent);
  180.     void x_ParentDetach(CSeq_entry_Info& parent);
  181.     TObject& x_GetObject(void);
  182.     const TObject& x_GetObject(void) const;
  183.     void x_SetObject(TObject& obj);
  184.     void x_SetObject(const CBioseq_Info& info);
  185.     typedef vector< CConstRef<TObject> > TDSMappedObjects;
  186.     virtual void x_DSMapObject(CConstRef<TObject> obj, CDataSource& ds);
  187.     virtual void x_DSUnmapObject(CConstRef<TObject> obj, CDataSource& ds);
  188.     static CRef<TObject> sx_ShallowCopy(const TObject& obj);
  189.     static CRef<TInst> sx_ShallowCopy(const TInst& inst);
  190.     TSeqPos x_CalcBioseqLength(void) const;
  191.     TSeqPos x_CalcBioseqLength(const CSeq_inst& inst) const;
  192.     TSeqPos x_CalcBioseqLength(const CSeq_id& whole) const;
  193.     TSeqPos x_CalcBioseqLength(const CPacked_seqint& ints) const;
  194.     TSeqPos x_CalcBioseqLength(const CSeq_loc& seq_loc) const;
  195.     TSeqPos x_CalcBioseqLength(const CSeq_loc_mix& seq_mix) const;
  196.     TSeqPos x_CalcBioseqLength(const CSeq_loc_equiv& seq_equiv) const;
  197.     TSeqPos x_CalcBioseqLength(const CSeg_ext& seg_ext) const;
  198.     TSeqPos x_CalcBioseqLength(const CDelta_ext& delta) const;
  199.     TSeqPos x_CalcBioseqLength(const CDelta_seq& delta_seq) const;
  200.     // Bioseq object
  201.     CRef<TObject>           m_Object;
  202.     // Bioseq members
  203.     TId                     m_Id;
  204.     // SeqMap object
  205.     mutable CConstRef<CSeqMap>  m_SeqMap;
  206.     mutable CFastMutex          m_SeqMap_Mtx;
  207. };
  208. /////////////////////////////////////////////////////////////////////
  209. //
  210. //  Inline methods
  211. //
  212. /////////////////////////////////////////////////////////////////////
  213. inline
  214. CBioseq& CBioseq_Info::x_GetObject(void)
  215. {
  216.     return *m_Object;
  217. }
  218. inline
  219. const CBioseq& CBioseq_Info::x_GetObject(void) const
  220. {
  221.     return *m_Object;
  222. }
  223. END_SCOPE(objects)
  224. END_NCBI_SCOPE
  225. /*
  226.  * ---------------------------------------------------------------------------
  227.  * $Log: bioseq_info.hpp,v $
  228.  * Revision 1000.3  2004/06/01 19:21:58  gouriano
  229.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.19
  230.  *
  231.  * Revision 1.19  2004/05/06 17:32:37  grichenk
  232.  * Added CanGetXXXX() methods
  233.  *
  234.  * Revision 1.18  2004/03/31 17:08:06  vasilche
  235.  * Implemented ConvertSeqToSet and ConvertSetToSeq.
  236.  *
  237.  * Revision 1.17  2004/03/24 18:30:28  vasilche
  238.  * Fixed edit API.
  239.  * Every *_Info object has its own shallow copy of original object.
  240.  *
  241.  * Revision 1.16  2004/03/16 15:47:26  vasilche
  242.  * Added CBioseq_set_Handle and set of EditHandles
  243.  *
  244.  * Revision 1.15  2003/11/28 15:13:25  grichenk
  245.  * Added CSeq_entry_Handle
  246.  *
  247.  * Revision 1.14  2003/09/30 16:22:00  vasilche
  248.  * Updated internal object manager classes to be able to load ID2 data.
  249.  * SNP blobs are loaded as ID2 split blobs - readers convert them automatically.
  250.  * Scope caches results of requests for data to data loaders.
  251.  * Optimized CSeq_id_Handle for gis.
  252.  * Optimized bioseq lookup in scope.
  253.  * Reduced object allocations in annotation iterators.
  254.  * CScope is allowed to be destroyed before other objects using this scope are
  255.  * deleted (feature iterators, bioseq handles etc).
  256.  * Optimized lookup for matching Seq-ids in CSeq_id_Mapper.
  257.  * Added 'adaptive' option to objmgr_demo application.
  258.  *
  259.  * Revision 1.13  2003/06/02 16:01:37  dicuccio
  260.  * Rearranged include/objects/ subtree.  This includes the following shifts:
  261.  *     - include/objects/alnmgr --> include/objtools/alnmgr
  262.  *     - include/objects/cddalignview --> include/objtools/cddalignview
  263.  *     - include/objects/flat --> include/objtools/flat
  264.  *     - include/objects/objmgr/ --> include/objmgr/
  265.  *     - include/objects/util/ --> include/objmgr/util/
  266.  *     - include/objects/validator --> include/objtools/validator
  267.  *
  268.  * Revision 1.12  2003/04/29 19:51:12  vasilche
  269.  * Fixed interaction of Data Loader garbage collector and TSE locking mechanism.
  270.  * Made some typedefs more consistent.
  271.  *
  272.  * Revision 1.11  2003/04/25 14:23:46  vasilche
  273.  * Added explicit constructors, destructor and assignment operator to make it compilable on MSVC DLL.
  274.  *
  275.  * Revision 1.10  2003/04/24 16:12:37  vasilche
  276.  * Object manager internal structures are splitted more straightforward.
  277.  * Removed excessive header dependencies.
  278.  *
  279.  * Revision 1.9  2003/04/14 21:31:05  grichenk
  280.  * Removed operators ==(), !=() and <()
  281.  *
  282.  * Revision 1.8  2003/03/12 20:09:31  grichenk
  283.  * Redistributed members between CBioseq_Handle, CBioseq_Info and CTSE_Info
  284.  *
  285.  * Revision 1.7  2003/02/05 17:57:41  dicuccio
  286.  * Moved into include/objects/objmgr/impl to permit data loaders to be defined
  287.  * outside of xobjmgr.
  288.  *
  289.  * Revision 1.6  2002/12/26 21:03:33  dicuccio
  290.  * Added Win32 export specifier.  Moved file from src/objects/objmgr to
  291.  * include/objects/objmgr.
  292.  *
  293.  * Revision 1.5  2002/07/08 20:51:01  grichenk
  294.  * Moved log to the end of file
  295.  * Replaced static mutex (in CScope, CDataSource) with the mutex
  296.  * pool. Redesigned CDataSource data locking.
  297.  *
  298.  * Revision 1.4  2002/05/29 21:21:13  gouriano
  299.  * added debug dump
  300.  *
  301.  * Revision 1.3  2002/05/06 03:28:46  vakatov
  302.  * OM/OM1 renaming
  303.  *
  304.  * Revision 1.2  2002/02/21 19:27:05  grichenk
  305.  * Rearranged includes. Added scope history. Added searching for the
  306.  * best seq-id match in data sources and scopes. Updated tests.
  307.  *
  308.  * Revision 1.1  2002/02/07 21:25:05  grichenk
  309.  * Initial revision
  310.  *
  311.  *
  312.  * ===========================================================================
  313.  */
  314. #endif  /* OBJECTS_OBJMGR_IMPL___BIOSEQ_INFO__HPP */