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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: seq_annot_info.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/04/12 17:28:28  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.13
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef SEQ_ANNOT_INFO__HPP
  10. #define SEQ_ANNOT_INFO__HPP
  11. /*  $Id: seq_annot_info.hpp,v 1000.2 2004/04/12 17:28:28 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: Eugene Vasilchenko
  37. *
  38. * File Description:
  39. *   Seq-annot object information
  40. *
  41. */
  42. #include <corelib/ncbiobj.hpp>
  43. #include <util/range.hpp>
  44. #include <objmgr/impl/tse_info_object.hpp>
  45. #include <objmgr/seq_id_handle.hpp>
  46. #include <objmgr/annot_selector.hpp>
  47. #include <objmgr/impl/annot_object.hpp>
  48. #include <objmgr/impl/annot_object_index.hpp>
  49. #include <vector>
  50. BEGIN_NCBI_SCOPE
  51. BEGIN_SCOPE(objects)
  52. class CDataSource;
  53. class CSeq_annot;
  54. class CSeq_entry;
  55. class CTSE_Info;
  56. class CBioseq_Base_Info;
  57. class CAnnotObject_Info;
  58. struct SAnnotObject_Key;
  59. class CSeq_annot_SNP_Info;
  60. class NCBI_XOBJMGR_EXPORT CSeq_annot_Info : public CTSE_Info_Object
  61. {
  62.     typedef CTSE_Info_Object TParent;
  63. public:
  64.     explicit CSeq_annot_Info(const CSeq_annot& annot);
  65.     explicit CSeq_annot_Info(CSeq_annot_SNP_Info& snp_annot);
  66.     explicit CSeq_annot_Info(const CSeq_annot_Info&);
  67.     ~CSeq_annot_Info(void);
  68.     const CBioseq_Base_Info& GetParentBioseq_Base_Info(void) const;
  69.     CBioseq_Base_Info& GetParentBioseq_Base_Info(void);
  70.     const CSeq_entry_Info& GetParentSeq_entry_Info(void) const;
  71.     CSeq_entry_Info& GetParentSeq_entry_Info(void);
  72.     typedef CSeq_annot TObject;
  73.     CConstRef<TObject> GetCompleteSeq_annot(void) const;
  74.     CConstRef<TObject> GetSeq_annotCore(void) const;
  75.     const CAnnotName& GetName(void) const;
  76.     const CAnnotObject_Info& GetAnnotObject_Info(size_t index) const;
  77.     size_t GetAnnotObjectIndex(const CAnnotObject_Info& info) const;
  78.     // tree initialization
  79.     virtual void x_DSAttachContents(CDataSource& ds);
  80.     virtual void x_DSDetachContents(CDataSource& ds);
  81.     virtual void x_TSEAttachContents(CTSE_Info& tse);
  82.     virtual void x_TSEDetachContents(CTSE_Info& tse);
  83.     void x_ParentAttach(CBioseq_Base_Info& parent);
  84.     void x_ParentDetach(CBioseq_Base_Info& parent);
  85.     //
  86.     void UpdateAnnotIndex(void) const;
  87.     void x_UpdateAnnotIndexContents(CTSE_Info& tse);
  88.     const TObject& x_GetObject(void) const;
  89.     void x_SetObject(const TObject& obj);
  90.     void x_SetObject(const CSeq_annot_Info& info);
  91.     void x_SetSNP_annot_Info(CSeq_annot_SNP_Info& snp_info);
  92.     bool x_HasSNP_annot_Info(void) const;
  93.     const CSeq_annot_SNP_Info& x_GetSNP_annot_Info(void) const;
  94.     void x_DoUpdateObject(void);
  95.     static CRef<TObject> sx_ShallowCopy(TObject& obj);
  96. protected:
  97.     friend class CDataSource;
  98.     friend class CTSE_Info;
  99.     friend class CSeq_entry_Info;
  100.     friend class CAnnot_Collector;
  101.     void x_UpdateName(void);
  102.     typedef vector< CConstRef<TObject> > TDSMappedObjects;
  103.     virtual void x_DSMapObject(CConstRef<TObject> obj, CDataSource& ds);
  104.     virtual void x_DSUnmapObject(CConstRef<TObject> obj, CDataSource& ds);
  105.     void x_MapAnnotObjects(CTSE_Info& tse,
  106.                            const CSeq_annot::C_Data::TFtable& objs);
  107.     void x_MapAnnotObjects(CTSE_Info& tse,
  108.                            const CSeq_annot::C_Data::TAlign& objs);
  109.     void x_MapAnnotObjects(CTSE_Info& tse,
  110.                            const CSeq_annot::C_Data::TGraph& objs);
  111.     void x_UnmapAnnotObjects(CTSE_Info& tse);
  112.     void x_DropAnnotObjects(CTSE_Info& tse);
  113.     CSeq_annot_Info& operator=(const CSeq_annot_Info&);
  114.     // Seq-annot object
  115.     CConstRef<TObject>      m_Object;
  116.     TDSMappedObjects        m_DSMappedObjects;
  117.     // name of Seq-annot
  118.     CAnnotName              m_Name;
  119.     // Annotations indexes
  120.     SAnnotObjects_Info      m_ObjectInfos;
  121.     // SNP annotation table
  122.     CRef<CSeq_annot_SNP_Info> m_SNP_Info;
  123. };
  124. /////////////////////////////////////////////////////////////////////
  125. //
  126. //  Inline methods
  127. //
  128. /////////////////////////////////////////////////////////////////////
  129. inline
  130. const CSeq_annot& CSeq_annot_Info::x_GetObject(void) const
  131. {
  132.     return *m_Object;
  133. }
  134. inline
  135. const CAnnotObject_Info&
  136. CSeq_annot_Info::GetAnnotObject_Info(size_t index) const
  137. {
  138.     return m_ObjectInfos.GetInfo(index);
  139. }
  140. inline
  141. bool CSeq_annot_Info::x_HasSNP_annot_Info(void) const
  142. {
  143.     return m_SNP_Info;
  144. }
  145. inline
  146. const CSeq_annot_SNP_Info& CSeq_annot_Info::x_GetSNP_annot_Info(void) const
  147. {
  148.     return *m_SNP_Info;
  149. }
  150. END_SCOPE(objects)
  151. END_NCBI_SCOPE
  152. /*
  153. * ---------------------------------------------------------------------------
  154. * $Log: seq_annot_info.hpp,v $
  155. * Revision 1000.2  2004/04/12 17:28:28  gouriano
  156. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.13
  157. *
  158. * Revision 1.13  2004/04/05 15:56:13  grichenk
  159. * Redesigned CAnnotTypes_CI: moved all data and data collecting
  160. * functions to CAnnotDataCollector. CAnnotTypes_CI is no more
  161. * inherited from SAnnotSelector.
  162. *
  163. * Revision 1.12  2004/03/26 19:42:03  vasilche
  164. * Fixed premature deletion of SNP annot info object.
  165. * Removed obsolete references to chunk info.
  166. *
  167. * Revision 1.11  2004/03/24 18:30:29  vasilche
  168. * Fixed edit API.
  169. * Every *_Info object has its own shallow copy of original object.
  170. *
  171. * Revision 1.10  2004/03/16 15:47:27  vasilche
  172. * Added CBioseq_set_Handle and set of EditHandles
  173. *
  174. * Revision 1.9  2003/11/26 17:55:55  vasilche
  175. * Implemented ID2 split in ID1 cache.
  176. * Fixed loading of splitted annotations.
  177. *
  178. * Revision 1.8  2003/10/07 13:43:22  vasilche
  179. * Added proper handling of named Seq-annots.
  180. * Added feature search from named Seq-annots.
  181. * Added configurable adaptive annotation search (default: gene, cds, mrna).
  182. * Fixed selection of blobs for loading from GenBank.
  183. * Added debug checks to CSeq_id_Mapper for easier finding lost CSeq_id_Handles.
  184. * Fixed leaked split chunks annotation stubs.
  185. * Moved some classes definitions in separate *.cpp files.
  186. *
  187. * Revision 1.7  2003/09/30 16:22:01  vasilche
  188. * Updated internal object manager classes to be able to load ID2 data.
  189. * SNP blobs are loaded as ID2 split blobs - readers convert them automatically.
  190. * Scope caches results of requests for data to data loaders.
  191. * Optimized CSeq_id_Handle for gis.
  192. * Optimized bioseq lookup in scope.
  193. * Reduced object allocations in annotation iterators.
  194. * CScope is allowed to be destroyed before other objects using this scope are
  195. * deleted (feature iterators, bioseq handles etc).
  196. * Optimized lookup for matching Seq-ids in CSeq_id_Mapper.
  197. * Added 'adaptive' option to objmgr_demo application.
  198. *
  199. * Revision 1.6  2003/08/27 14:49:19  vasilche
  200. * Added necessary include.
  201. *
  202. * Revision 1.5  2003/08/27 14:28:51  vasilche
  203. * Reduce amount of object allocations in feature iteration.
  204. *
  205. * Revision 1.4  2003/08/14 20:05:18  vasilche
  206. * Simple SNP features are stored as table internally.
  207. * They are recreated when needed using CFeat_CI.
  208. *
  209. * Revision 1.3  2003/08/04 17:02:59  grichenk
  210. * Added constructors to iterate all annotations from a
  211. * seq-entry or seq-annot.
  212. *
  213. * Revision 1.2  2003/07/17 20:07:55  vasilche
  214. * Reduced memory usage by feature indexes.
  215. * SNP data is loaded separately through PUBSEQ_OS.
  216. * String compression for SNP data.
  217. *
  218. * Revision 1.1  2003/04/24 16:12:37  vasilche
  219. * Object manager internal structures are splitted more straightforward.
  220. * Removed excessive header dependencies.
  221. *
  222. *
  223. * ===========================================================================
  224. */
  225. #endif  // SEQ_ANNOT_INFO__HPP