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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: graph_ci.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:23:17  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.28
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: graph_ci.cpp,v 1000.2 2004/06/01 19:23:17 gouriano Exp $
  10. * ===========================================================================
  11. *
  12. *                            PUBLIC DOMAIN NOTICE
  13. *               National Center for Biotechnology Information
  14. *
  15. *  This software/database is a "United States Government Work" under the
  16. *  terms of the United States Copyright Act.  It was written as part of
  17. *  the author's official duties as a United States Government employee and
  18. *  thus cannot be copyrighted.  This software/database is freely available
  19. *  to the public for use. The National Library of Medicine and the U.S.
  20. *  Government have not placed any restriction on its use or reproduction.
  21. *
  22. *  Although all reasonable efforts have been taken to ensure the accuracy
  23. *  and reliability of the software and data, the NLM and the U.S.
  24. *  Government do not and cannot warrant the performance or results that
  25. *  may be obtained by using this software or data. The NLM and the U.S.
  26. *  Government disclaim all warranties, express or implied, including
  27. *  warranties of performance, merchantability or fitness for any particular
  28. *  purpose.
  29. *
  30. *  Please cite the author in any work or product based on this material.
  31. *
  32. * ===========================================================================
  33. *
  34. * Author: Aleksey Grichenko, Eugene Vasilchenko
  35. *
  36. * File Description:
  37. *   Object manager iterators
  38. *
  39. */
  40. #include <ncbi_pch.hpp>
  41. #include <objmgr/graph_ci.hpp>
  42. #include <objmgr/impl/annot_object.hpp>
  43. BEGIN_NCBI_SCOPE
  44. BEGIN_SCOPE(objects)
  45. void CMappedGraph::Set(CAnnot_Collector& collector, const TIterator& annot)
  46. {
  47.     _ASSERT(annot->IsGraph());
  48.     m_Collector.Reset(&collector);
  49.     m_GraphRef = annot;
  50.     m_MappedGraph.Reset();
  51.     m_MappedLoc.Reset();
  52. }
  53. void CMappedGraph::MakeMappedLoc(void) const
  54. {
  55.     if ( m_GraphRef->MappedSeq_locNeedsUpdate() ) {
  56.         m_MappedGraph.Reset();
  57.         m_MappedLoc.Reset();
  58.         CRef<CSeq_loc> created_loc;
  59.         m_Collector->m_CreatedMappedSeq_loc.AtomicReleaseTo(created_loc);
  60.         m_GraphRef->UpdateMappedSeq_loc(created_loc);
  61.         m_MappedLoc = created_loc;
  62.         m_Collector->m_CreatedMappedSeq_loc.AtomicResetFrom(created_loc);
  63.     }
  64.     else if ( m_GraphRef->IsMapped() ) {
  65.         m_MappedLoc.Reset(&m_GraphRef->GetMappedSeq_loc());
  66.     }
  67.     else {
  68.         m_MappedLoc.Reset(&GetOriginalGraph().GetLoc());
  69.     }
  70. }
  71. CSeq_graph_Handle CMappedGraph::GetSeq_graph_Handle(void) const
  72. {
  73.     return CSeq_graph_Handle(m_Collector->GetScope(),
  74.         m_GraphRef->GetSeq_annot_Info(),
  75.         m_GraphRef->GetAnnotObjectIndex());
  76. }
  77. void CMappedGraph::MakeMappedGraph(void) const
  78. {
  79.     if ( m_GraphRef->IsMapped() ) {
  80.         CSeq_loc& loc = const_cast<CSeq_loc&>(GetLoc());
  81.         CSeq_graph* tmp;
  82.         m_MappedGraph.Reset(tmp = new CSeq_graph);
  83.         tmp->Assign(GetOriginalGraph());
  84.         tmp->SetLoc(loc);
  85.     }
  86.     else {
  87.         m_MappedGraph.Reset(&GetOriginalGraph());
  88.     }
  89. }
  90. CGraph_CI::CGraph_CI(CScope& scope,
  91.                      const CSeq_loc& loc,
  92.                      SAnnotSelector::EOverlapType overlap_type,
  93.                      SAnnotSelector::EResolveMethod resolve)
  94.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Graph,
  95.                      scope, loc,
  96.                      overlap_type, resolve)
  97. {
  98.     if ( IsValid() ) {
  99.         m_Graph.Set(GetCollector(), GetIterator());
  100.     }
  101. }
  102. CGraph_CI::CGraph_CI(const CBioseq_Handle& bioseq,
  103.                      TSeqPos start, TSeqPos stop,
  104.                      SAnnotSelector::EOverlapType overlap_type,
  105.                      SAnnotSelector::EResolveMethod resolve)
  106.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Graph,
  107.                      bioseq, start, stop,
  108.                      overlap_type, resolve)
  109. {
  110.     if ( IsValid() ) {
  111.         m_Graph.Set(GetCollector(), GetIterator());
  112.     }
  113. }
  114. CGraph_CI::~CGraph_CI(void)
  115. {
  116. }
  117. END_SCOPE(objects)
  118. END_NCBI_SCOPE
  119. /*
  120. * ---------------------------------------------------------------------------
  121. * $Log: graph_ci.cpp,v $
  122. * Revision 1000.2  2004/06/01 19:23:17  gouriano
  123. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.28
  124. *
  125. * Revision 1.28  2004/05/21 21:42:12  gorelenk
  126. * Added PCH ncbi_pch.hpp
  127. *
  128. * Revision 1.27  2004/05/04 18:08:48  grichenk
  129. * Added CSeq_feat_Handle, CSeq_align_Handle and CSeq_graph_Handle
  130. *
  131. * Revision 1.26  2004/04/07 13:20:17  grichenk
  132. * Moved more data from iterators to CAnnot_Collector
  133. *
  134. * Revision 1.25  2004/04/05 15:56:14  grichenk
  135. * Redesigned CAnnotTypes_CI: moved all data and data collecting
  136. * functions to CAnnotDataCollector. CAnnotTypes_CI is no more
  137. * inherited from SAnnotSelector.
  138. *
  139. * Revision 1.24  2004/03/23 19:37:33  grichenk
  140. * Added m_Graph in constructors
  141. *
  142. * Revision 1.23  2004/03/16 15:47:27  vasilche
  143. * Added CBioseq_set_Handle and set of EditHandles
  144. *
  145. * Revision 1.22  2004/01/28 20:54:36  vasilche
  146. * Fixed mapping of annotations.
  147. *
  148. * Revision 1.21  2004/01/23 16:14:48  grichenk
  149. * Implemented alignment mapping
  150. *
  151. * Revision 1.20  2003/08/14 20:05:19  vasilche
  152. * Simple SNP features are stored as table internally.
  153. * They are recreated when needed using CFeat_CI.
  154. *
  155. * Revision 1.19  2003/06/02 16:06:37  dicuccio
  156. * Rearranged src/objects/ subtree.  This includes the following shifts:
  157. *     - src/objects/asn2asn --> arc/app/asn2asn
  158. *     - src/objects/testmedline --> src/objects/ncbimime/test
  159. *     - src/objects/objmgr --> src/objmgr
  160. *     - src/objects/util --> src/objmgr/util
  161. *     - src/objects/alnmgr --> src/objtools/alnmgr
  162. *     - src/objects/flat --> src/objtools/flat
  163. *     - src/objects/validator --> src/objtools/validator
  164. *     - src/objects/cddalignview --> src/objtools/cddalignview
  165. * In addition, libseq now includes six of the objects/seq... libs, and libmmdb
  166. * replaces the three libmmdb? libs.
  167. *
  168. * Revision 1.18  2003/04/24 16:12:38  vasilche
  169. * Object manager internal structures are splitted more straightforward.
  170. * Removed excessive header dependencies.
  171. *
  172. * Revision 1.17  2003/03/18 21:48:30  grichenk
  173. * Removed obsolete class CAnnot_CI
  174. *
  175. * Revision 1.16  2003/02/24 18:57:22  vasilche
  176. * Make feature gathering in one linear pass using CSeqMap iterator.
  177. * Do not use feture index by sub locations.
  178. * Sort features at the end of gathering in one vector.
  179. * Extracted some internal structures and classes in separate header.
  180. * Delay creation of mapped features.
  181. *
  182. * Revision 1.15  2003/02/13 14:34:34  grichenk
  183. * Renamed CAnnotObject -> CAnnotObject_Info
  184. * + CSeq_annot_Info and CAnnotObject_Ref
  185. * Moved some members of CAnnotObject to CSeq_annot_Info
  186. * and CAnnotObject_Ref.
  187. * Added feat/align/graph to CAnnotObject_Info map
  188. * to CDataSource.
  189. *
  190. * Revision 1.14  2003/02/10 22:04:44  grichenk
  191. * CGraph_CI resolves to CMappedGraph instead of CSeq_graph
  192. *
  193. * Revision 1.13  2003/02/10 15:51:27  grichenk
  194. * + CMappedGraph
  195. *
  196. * Revision 1.12  2002/12/24 15:42:45  grichenk
  197. * CBioseqHandle argument to annotation iterators made const
  198. *
  199. * Revision 1.11  2002/12/06 15:36:00  grichenk
  200. * Added overlap type for annot-iterators
  201. *
  202. * Revision 1.10  2002/11/04 21:29:12  grichenk
  203. * Fixed usage of const CRef<> and CRef<> constructor
  204. *
  205. * Revision 1.9  2002/07/08 20:51:01  grichenk
  206. * Moved log to the end of file
  207. * Replaced static mutex (in CScope, CDataSource) with the mutex
  208. * pool. Redesigned CDataSource data locking.
  209. *
  210. * Revision 1.8  2002/05/06 03:28:47  vakatov
  211. * OM/OM1 renaming
  212. *
  213. * Revision 1.7  2002/05/03 21:28:10  ucko
  214. * Introduce T(Signed)SeqPos.
  215. *
  216. * Revision 1.6  2002/04/05 21:26:19  grichenk
  217. * Enabled iteration over annotations defined on segments of a
  218. * delta-sequence.
  219. *
  220. * Revision 1.5  2002/03/05 16:08:14  grichenk
  221. * Moved TSE-restriction to new constructors
  222. *
  223. * Revision 1.4  2002/03/04 15:07:48  grichenk
  224. * Added "bioseq" argument to CAnnotTypes_CI constructor to iterate
  225. * annotations from a single TSE.
  226. *
  227. * Revision 1.3  2002/02/21 19:27:05  grichenk
  228. * Rearranged includes. Added scope history. Added searching for the
  229. * best seq-id match in data sources and scopes. Updated tests.
  230. *
  231. * Revision 1.2  2002/01/16 16:25:55  gouriano
  232. * restructured objmgr
  233. *
  234. * Revision 1.1  2002/01/11 19:06:19  gouriano
  235. * restructured objmgr
  236. *
  237. *
  238. * ===========================================================================
  239. */