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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: graph_ci.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:21:26  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.36
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GRAPH_CI__HPP
  10. #define GRAPH_CI__HPP
  11. /*  $Id: graph_ci.hpp,v 1000.2 2004/06/01 19:21:26 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, Michael Kimelman, Eugene Vasilchenko
  37. *
  38. * File Description:
  39. *   Object manager iterators
  40. *
  41. */
  42. #include <objmgr/annot_types_ci.hpp>
  43. #include <objmgr/seq_annot_handle.hpp>
  44. #include <objmgr/seq_entry_handle.hpp>
  45. #include <objects/seqres/Seq_graph.hpp>
  46. #include <objects/seqloc/Seq_loc.hpp>
  47. #include <corelib/ncbistd.hpp>
  48. #include <objmgr/seq_graph_handle.hpp>
  49. BEGIN_NCBI_SCOPE
  50. BEGIN_SCOPE(objects)
  51. class NCBI_XOBJMGR_EXPORT CMappedGraph
  52. {
  53. public:
  54.     // Original graph with unmapped location/product
  55.     const CSeq_graph& GetOriginalGraph(void) const
  56.         {
  57.             return m_GraphRef->GetGraph();
  58.         }
  59.     // Original graph handle
  60.     CSeq_graph_Handle GetSeq_graph_Handle(void) const;
  61.     // Graph mapped to the master sequence.
  62.     // WARNING! The function is rather slow and should be used with care.
  63.     const CSeq_graph& GetMappedGraph(void) const
  64.         {
  65.             if ( !m_MappedGraph ) {
  66.                 MakeMappedGraph();
  67.             }
  68.             return *m_MappedGraph;
  69.         }
  70.     bool IsSetTitle(void) const
  71.         {
  72.             return GetOriginalGraph().IsSetTitle();
  73.         }
  74.     const string& GetTitle(void) const
  75.         {
  76.             return GetOriginalGraph().GetTitle();
  77.         }
  78.     bool IsSetComment(void) const
  79.         {
  80.             return GetOriginalGraph().IsSetComment();
  81.         }
  82.     const string& GetComment(void) const
  83.         {
  84.             return GetOriginalGraph().GetComment();
  85.         }
  86.     const CSeq_loc& GetLoc(void) const
  87.         {
  88.             if ( !m_MappedLoc ) {
  89.                 MakeMappedLoc();
  90.             }
  91.             return *m_MappedLoc;
  92.         }
  93.     bool IsSetTitle_x(void) const
  94.         {
  95.             return GetOriginalGraph().IsSetTitle_x();
  96.         }
  97.     const string& GetTitle_x(void) const
  98.         {
  99.             return GetOriginalGraph().GetTitle_x();
  100.         }
  101.     bool IsSetTitle_y(void) const
  102.         {
  103.             return GetOriginalGraph().IsSetTitle_y();
  104.         }
  105.     const string& GetTitle_y(void) const
  106.         {
  107.             return GetOriginalGraph().GetTitle_y();
  108.         }
  109.     bool IsSetComp(void) const
  110.         {
  111.             return GetOriginalGraph().IsSetComp();
  112.         }
  113.     TSeqPos GetComp(void) const
  114.         {
  115.             return GetOriginalGraph().GetComp();
  116.         }
  117.     bool IsSetA(void) const
  118.         {
  119.             return GetOriginalGraph().IsSetA();
  120.         }
  121.     double GetA(void) const
  122.         {
  123.             return GetOriginalGraph().GetA();
  124.         }
  125.     bool IsSetB(void) const
  126.         {
  127.             return GetOriginalGraph().IsSetB();
  128.         }
  129.     double GetB(void) const
  130.         {
  131.             return GetOriginalGraph().GetB();
  132.         }
  133.     TSeqPos GetNumval(void) const
  134.         {
  135.             return GetOriginalGraph().GetNumval();
  136.         }
  137.     const CSeq_graph::C_Graph& GetGraph(void) const
  138.         {
  139.             return GetOriginalGraph().GetGraph();
  140.         }
  141. private:
  142.     friend class CGraph_CI;
  143.     friend class CAnnot_CI;
  144.     typedef CAnnot_Collector::TAnnotSet TAnnotSet;
  145.     typedef TAnnotSet::const_iterator   TIterator;
  146.     void Set(CAnnot_Collector& collector,
  147.              const TIterator& annot);
  148.     void MakeMappedGraph(void) const;
  149.     void MakeMappedLoc(void) const;
  150.     mutable CRef<CAnnot_Collector> m_Collector;
  151.     TIterator                      m_GraphRef;
  152.     mutable CConstRef<CSeq_graph>   m_MappedGraph;
  153.     mutable CConstRef<CSeq_loc>     m_MappedLoc;
  154. };
  155. class NCBI_XOBJMGR_EXPORT CGraph_CI : public CAnnotTypes_CI
  156. {
  157. public:
  158.     CGraph_CI(void);
  159.     CGraph_CI(CScope& scope, const CSeq_loc& loc,
  160.               const SAnnotSelector& sel);
  161.     CGraph_CI(const CBioseq_Handle& bioseq, TSeqPos start, TSeqPos stop,
  162.               const SAnnotSelector& sel);
  163.     // Search all TSEs in all datasources
  164.     CGraph_CI(CScope& scope, const CSeq_loc& loc,
  165.               SAnnotSelector::EOverlapType overlap_type
  166.               = SAnnotSelector::eOverlap_Intervals,
  167.               SAnnotSelector::EResolveMethod resolve
  168.               = SAnnotSelector::eResolve_TSE);
  169.     // Search only in TSE, containing the bioseq
  170.     CGraph_CI(const CBioseq_Handle& bioseq, TSeqPos start, TSeqPos stop,
  171.               SAnnotSelector::EOverlapType overlap_type
  172.               = SAnnotSelector::eOverlap_Intervals,
  173.               SAnnotSelector::EResolveMethod resolve
  174.               = SAnnotSelector::eResolve_TSE);
  175.     
  176.     // Iterate all graphs from the object regardless of their location
  177.     CGraph_CI(const CSeq_annot_Handle& annot);
  178.     CGraph_CI(const CSeq_annot_Handle& annot,
  179.               const SAnnotSelector& sel);
  180.     CGraph_CI(const CSeq_entry_Handle& entry);
  181.     CGraph_CI(const CSeq_entry_Handle& entry,
  182.               const SAnnotSelector& sel);
  183.     virtual ~CGraph_CI(void);
  184.     CGraph_CI& operator++ (void);
  185.     CGraph_CI& operator-- (void);
  186.     operator bool (void) const;
  187.     const CMappedGraph& operator* (void) const;
  188.     const CMappedGraph* operator-> (void) const;
  189. private:
  190.     CGraph_CI operator++ (int);
  191.     CGraph_CI operator-- (int);
  192.     CMappedGraph m_Graph; // current graph object returned by operator->()
  193. };
  194. inline
  195. CGraph_CI::CGraph_CI(void)
  196. {
  197. }
  198. inline
  199. CGraph_CI::CGraph_CI(CScope& scope, const CSeq_loc& loc,
  200.                      const SAnnotSelector& sel)
  201.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Graph, scope, loc, sel)
  202. {
  203.     if ( IsValid() ) {
  204.         m_Graph.Set(GetCollector(), GetIterator());
  205.     }
  206. }
  207. inline
  208. CGraph_CI::CGraph_CI(const CBioseq_Handle& bioseq, TSeqPos start, TSeqPos stop,
  209.                      const SAnnotSelector& sel)
  210.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Graph, bioseq, start, stop, sel)
  211. {
  212.     if ( IsValid() ) {
  213.         m_Graph.Set(GetCollector(), GetIterator());
  214.     }
  215. }
  216. inline
  217. CGraph_CI::CGraph_CI(const CSeq_annot_Handle& annot)
  218.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Graph, annot)
  219. {
  220.     if ( IsValid() ) {
  221.         m_Graph.Set(GetCollector(), GetIterator());
  222.     }
  223. }
  224. inline
  225. CGraph_CI::CGraph_CI(const CSeq_annot_Handle& annot,
  226.                      const SAnnotSelector& sel)
  227.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Graph, annot, sel)
  228. {
  229.     if ( IsValid() ) {
  230.         m_Graph.Set(GetCollector(), GetIterator());
  231.     }
  232. }
  233. inline
  234. CGraph_CI::CGraph_CI(const CSeq_entry_Handle& entry)
  235.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Graph, entry)
  236. {
  237.     if ( IsValid() ) {
  238.         m_Graph.Set(GetCollector(), GetIterator());
  239.     }
  240. }
  241. inline
  242. CGraph_CI::CGraph_CI(const CSeq_entry_Handle& entry,
  243.                      const SAnnotSelector& sel)
  244.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Graph, entry, sel)
  245. {
  246.     if ( IsValid() ) {
  247.         m_Graph.Set(GetCollector(), GetIterator());
  248.     }
  249. }
  250. inline
  251. CGraph_CI& CGraph_CI::operator++ (void)
  252. {
  253.     Next();
  254.     if ( IsValid() ) {
  255.         m_Graph.Set(GetCollector(), GetIterator());
  256.     }
  257.     return *this;
  258. }
  259. inline
  260. CGraph_CI& CGraph_CI::operator-- (void)
  261. {
  262.     Prev();
  263.     m_Graph.Set(GetCollector(), GetIterator());
  264.     return *this;
  265. }
  266. inline
  267. CGraph_CI::operator bool (void) const
  268. {
  269.     return IsValid();
  270. }
  271. inline
  272. const CMappedGraph& CGraph_CI::operator* (void) const
  273. {
  274.     return m_Graph;
  275. }
  276. inline
  277. const CMappedGraph* CGraph_CI::operator-> (void) const
  278. {
  279.     return &m_Graph;
  280. }
  281. END_SCOPE(objects)
  282. END_NCBI_SCOPE
  283. /*
  284. * ---------------------------------------------------------------------------
  285. * $Log: graph_ci.hpp,v $
  286. * Revision 1000.2  2004/06/01 19:21:26  gouriano
  287. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.36
  288. *
  289. * Revision 1.36  2004/05/04 18:08:47  grichenk
  290. * Added CSeq_feat_Handle, CSeq_align_Handle and CSeq_graph_Handle
  291. *
  292. * Revision 1.35  2004/04/07 13:20:17  grichenk
  293. * Moved more data from iterators to CAnnot_Collector
  294. *
  295. * Revision 1.34  2004/04/05 15:56:13  grichenk
  296. * Redesigned CAnnotTypes_CI: moved all data and data collecting
  297. * functions to CAnnotDataCollector. CAnnotTypes_CI is no more
  298. * inherited from SAnnotSelector.
  299. *
  300. * Revision 1.33  2004/03/23 19:37:41  grichenk
  301. * Added m_Graph in constructors
  302. *
  303. * Revision 1.32  2004/03/16 15:47:26  vasilche
  304. * Added CBioseq_set_Handle and set of EditHandles
  305. *
  306. * Revision 1.31  2004/02/11 22:19:23  grichenk
  307. * Fixed annot type initialization in iterators
  308. *
  309. * Revision 1.30  2004/02/05 19:53:40  grichenk
  310. * Fixed type matching in SAnnotSelector. Added IncludeAnnotType().
  311. *
  312. * Revision 1.29  2004/02/04 18:05:32  grichenk
  313. * Added annotation filtering by set of types/subtypes.
  314. * Renamed *Choice to *Type in SAnnotSelector.
  315. *
  316. * Revision 1.28  2004/01/28 20:54:34  vasilche
  317. * Fixed mapping of annotations.
  318. *
  319. * Revision 1.27  2003/08/15 15:22:41  grichenk
  320. * +CAnnot_CI
  321. *
  322. * Revision 1.26  2003/08/04 17:02:57  grichenk
  323. * Added constructors to iterate all annotations from a
  324. * seq-entry or seq-annot.
  325. *
  326. * Revision 1.25  2003/06/02 16:01:36  dicuccio
  327. * Rearranged include/objects/ subtree.  This includes the following shifts:
  328. *     - include/objects/alnmgr --> include/objtools/alnmgr
  329. *     - include/objects/cddalignview --> include/objtools/cddalignview
  330. *     - include/objects/flat --> include/objtools/flat
  331. *     - include/objects/objmgr/ --> include/objmgr/
  332. *     - include/objects/util/ --> include/objmgr/util/
  333. *     - include/objects/validator --> include/objtools/validator
  334. *
  335. * Revision 1.24  2003/04/24 16:12:37  vasilche
  336. * Object manager internal structures are splitted more straightforward.
  337. * Removed excessive header dependencies.
  338. *
  339. * Revision 1.23  2003/03/21 14:50:51  vasilche
  340. * Added constructors of CAlign_CI and CGraph_CI taking generic
  341. * SAnnotSelector parameters.
  342. *
  343. * Revision 1.22  2003/03/05 20:56:42  vasilche
  344. * SAnnotSelector now holds all parameters of annotation iterators.
  345. *
  346. * Revision 1.21  2003/02/25 14:48:06  vasilche
  347. * Added Win32 export modifier to object manager classes.
  348. *
  349. * Revision 1.20  2003/02/24 18:57:20  vasilche
  350. * Make feature gathering in one linear pass using CSeqMap iterator.
  351. * Do not use feture index by sub locations.
  352. * Sort features at the end of gathering in one vector.
  353. * Extracted some internal structures and classes in separate header.
  354. * Delay creation of mapped features.
  355. *
  356. * Revision 1.19  2003/02/13 14:57:36  dicuccio
  357. * Changed interface to match new 'dataool'-generated code (built-in types
  358. * returned by value, not reference).
  359. *
  360. * Revision 1.18  2003/02/13 14:34:31  grichenk
  361. * Renamed CAnnotObject -> CAnnotObject_Info
  362. * + CSeq_annot_Info and CAnnotObject_Ref
  363. * Moved some members of CAnnotObject to CSeq_annot_Info
  364. * and CAnnotObject_Ref.
  365. * Added feat/align/graph to CAnnotObject_Info map
  366. * to CDataSource.
  367. *
  368. * Revision 1.17  2003/02/10 22:04:42  grichenk
  369. * CGraph_CI resolves to CMappedGraph instead of CSeq_graph
  370. *
  371. * Revision 1.16  2003/02/10 15:51:26  grichenk
  372. * + CMappedGraph
  373. *
  374. * Revision 1.15  2002/12/26 20:51:35  dicuccio
  375. * Added Win32 export specifier
  376. *
  377. * Revision 1.14  2002/12/24 15:42:44  grichenk
  378. * CBioseqHandle argument to annotation iterators made const
  379. *
  380. * Revision 1.13  2002/12/06 15:35:57  grichenk
  381. * Added overlap type for annot-iterators
  382. *
  383. * Revision 1.12  2002/12/05 19:28:30  grichenk
  384. * Prohibited postfix operator ++()
  385. *
  386. * Revision 1.11  2002/07/08 20:50:56  grichenk
  387. * Moved log to the end of file
  388. * Replaced static mutex (in CScope, CDataSource) with the mutex
  389. * pool. Redesigned CDataSource data locking.
  390. *
  391. * Revision 1.10  2002/05/06 03:30:35  vakatov
  392. * OM/OM1 renaming
  393. *
  394. * Revision 1.9  2002/05/03 21:28:01  ucko
  395. * Introduce T(Signed)SeqPos.
  396. *
  397. * Revision 1.8  2002/04/30 14:30:42  grichenk
  398. * Added eResolve_TSE flag in CAnnot_Types_CI, made it default
  399. *
  400. * Revision 1.7  2002/04/17 20:57:50  grichenk
  401. * Added full type for "resolve" argument
  402. *
  403. * Revision 1.6  2002/04/05 21:26:17  grichenk
  404. * Enabled iteration over annotations defined on segments of a
  405. * delta-sequence.
  406. *
  407. * Revision 1.5  2002/03/05 16:08:12  grichenk
  408. * Moved TSE-restriction to new constructors
  409. *
  410. * Revision 1.4  2002/03/04 15:07:46  grichenk
  411. * Added "bioseq" argument to CAnnotTypes_CI constructor to iterate
  412. * annotations from a single TSE.
  413. *
  414. * Revision 1.3  2002/02/21 19:27:00  grichenk
  415. * Rearranged includes. Added scope history. Added searching for the
  416. * best seq-id match in data sources and scopes. Updated tests.
  417. *
  418. * Revision 1.2  2002/01/16 16:26:36  gouriano
  419. * restructured objmgr
  420. *
  421. * Revision 1.1  2002/01/11 19:04:02  gouriano
  422. * restructured objmgr
  423. *
  424. *
  425. * ===========================================================================
  426. */
  427. #endif  // GRAPH_CI__HPP