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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: align_ci.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:21:14  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.29
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef ALIGN_CI__HPP
  10. #define ALIGN_CI__HPP
  11. /*  $Id: align_ci.hpp,v 1000.2 2004/06/01 19:21:14 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 <corelib/ncbistd.hpp>
  43. #include <objmgr/annot_types_ci.hpp>
  44. #include <objmgr/seq_annot_handle.hpp>
  45. #include <objmgr/seq_entry_handle.hpp>
  46. #include <objmgr/seq_align_handle.hpp>
  47. #include <objects/seqalign/Seq_align.hpp>
  48. BEGIN_NCBI_SCOPE
  49. BEGIN_SCOPE(objects)
  50. class NCBI_XOBJMGR_EXPORT CAlign_CI : public CAnnotTypes_CI
  51. {
  52. public:
  53.     CAlign_CI(void);
  54.     CAlign_CI(CScope& scope, const CSeq_loc& loc,
  55.               const SAnnotSelector& sel);
  56.     CAlign_CI(const CBioseq_Handle& bioseq, TSeqPos start, TSeqPos stop,
  57.               const SAnnotSelector& sel);
  58.     // Search all TSEs in all datasources
  59.     CAlign_CI(CScope& scope, const CSeq_loc& loc,
  60.               SAnnotSelector::EOverlapType overlap_type
  61.               = SAnnotSelector::eOverlap_Intervals,
  62.               SAnnotSelector::EResolveMethod resolve
  63.               = SAnnotSelector::eResolve_TSE);
  64.     // Search only in TSE, containing the bioseq
  65.     CAlign_CI(const CBioseq_Handle& bioseq, TSeqPos start, TSeqPos stop,
  66.               SAnnotSelector::EOverlapType overlap_type
  67.               = SAnnotSelector::eOverlap_Intervals,
  68.               SAnnotSelector::EResolveMethod resolve
  69.               = SAnnotSelector::eResolve_TSE);
  70.     // Iterate all features from the object regardless of their location
  71.     CAlign_CI(const CSeq_annot_Handle& annot);
  72.     CAlign_CI(const CSeq_annot_Handle& annot,
  73.               const SAnnotSelector& sel);
  74.     CAlign_CI(const CSeq_entry_Handle& entry);
  75.     CAlign_CI(const CSeq_entry_Handle& entry,
  76.               const SAnnotSelector& sel);
  77.     virtual ~CAlign_CI(void);
  78.     CAlign_CI& operator++ (void);
  79.     CAlign_CI& operator-- (void);
  80.     operator bool (void) const;
  81.     // Mapped alignment, not the original one
  82.     const CSeq_align& operator* (void) const;
  83.     const CSeq_align* operator-> (void) const;
  84.     const CSeq_align& GetOriginalSeq_align(void) const;
  85.     // Original align handle
  86.     CSeq_align_Handle GetSeq_align_Handle(void) const;
  87. private:
  88.     CAlign_CI operator++ (int);
  89.     CAlign_CI operator-- (int);
  90.     mutable CConstRef<CSeq_align> m_MappedAlign;
  91. };
  92. inline
  93. CAlign_CI::CAlign_CI(void)
  94. {
  95. }
  96. inline
  97. CAlign_CI::CAlign_CI(CScope& scope, const CSeq_loc& loc,
  98.                      const SAnnotSelector& sel)
  99.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Align, scope, loc, sel)
  100. {
  101. }
  102. inline
  103. CAlign_CI::CAlign_CI(const CBioseq_Handle& bioseq,
  104.                      TSeqPos start, TSeqPos stop,
  105.                      const SAnnotSelector& sel)
  106.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Align, bioseq, start, stop, sel)
  107. {
  108. }
  109. inline
  110. CAlign_CI::CAlign_CI(const CSeq_annot_Handle& annot)
  111.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Align, annot)
  112. {
  113. }
  114. inline
  115. CAlign_CI::CAlign_CI(const CSeq_annot_Handle& annot,
  116.                      const SAnnotSelector& sel)
  117.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Align, annot, sel)
  118. {
  119. }
  120. inline
  121. CAlign_CI::CAlign_CI(const CSeq_entry_Handle& entry)
  122.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Align, entry)
  123. {
  124. }
  125. inline
  126. CAlign_CI::CAlign_CI(const CSeq_entry_Handle& entry,
  127.                      const SAnnotSelector& sel)
  128.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Align, entry, sel)
  129. {
  130. }
  131. inline
  132. CAlign_CI::operator bool (void) const
  133. {
  134.     return IsValid();
  135. }
  136. END_SCOPE(objects)
  137. END_NCBI_SCOPE
  138. /*
  139. * ---------------------------------------------------------------------------
  140. * $Log: align_ci.hpp,v $
  141. * Revision 1000.2  2004/06/01 19:21:14  gouriano
  142. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.29
  143. *
  144. * Revision 1.29  2004/05/04 18:08:47  grichenk
  145. * Added CSeq_feat_Handle, CSeq_align_Handle and CSeq_graph_Handle
  146. *
  147. * Revision 1.28  2004/04/05 15:56:13  grichenk
  148. * Redesigned CAnnotTypes_CI: moved all data and data collecting
  149. * functions to CAnnotDataCollector. CAnnotTypes_CI is no more
  150. * inherited from SAnnotSelector.
  151. *
  152. * Revision 1.27  2004/03/16 15:47:25  vasilche
  153. * Added CBioseq_set_Handle and set of EditHandles
  154. *
  155. * Revision 1.26  2004/02/11 22:19:23  grichenk
  156. * Fixed annot type initialization in iterators
  157. *
  158. * Revision 1.25  2004/02/05 19:53:39  grichenk
  159. * Fixed type matching in SAnnotSelector. Added IncludeAnnotType().
  160. *
  161. * Revision 1.24  2004/02/04 18:05:31  grichenk
  162. * Added annotation filtering by set of types/subtypes.
  163. * Renamed *Choice to *Type in SAnnotSelector.
  164. *
  165. * Revision 1.23  2004/01/29 15:44:45  vasilche
  166. * Fixed mapped align when it's not mapped.
  167. *
  168. * Revision 1.22  2004/01/23 16:14:45  grichenk
  169. * Implemented alignment mapping
  170. *
  171. * Revision 1.21  2003/08/04 17:02:57  grichenk
  172. * Added constructors to iterate all annotations from a
  173. * seq-entry or seq-annot.
  174. *
  175. * Revision 1.20  2003/06/02 16:01:36  dicuccio
  176. * Rearranged include/objects/ subtree.  This includes the following shifts:
  177. *     - include/objects/alnmgr --> include/objtools/alnmgr
  178. *     - include/objects/cddalignview --> include/objtools/cddalignview
  179. *     - include/objects/flat --> include/objtools/flat
  180. *     - include/objects/objmgr/ --> include/objmgr/
  181. *     - include/objects/util/ --> include/objmgr/util/
  182. *     - include/objects/validator --> include/objtools/validator
  183. *
  184. * Revision 1.19  2003/04/24 16:12:37  vasilche
  185. * Object manager internal structures are splitted more straightforward.
  186. * Removed excessive header dependencies.
  187. *
  188. * Revision 1.18  2003/03/21 14:50:51  vasilche
  189. * Added constructors of CAlign_CI and CGraph_CI taking generic
  190. * SAnnotSelector parameters.
  191. *
  192. * Revision 1.17  2003/03/05 20:56:42  vasilche
  193. * SAnnotSelector now holds all parameters of annotation iterators.
  194. *
  195. * Revision 1.16  2003/02/24 18:57:20  vasilche
  196. * Make feature gathering in one linear pass using CSeqMap iterator.
  197. * Do not use feture index by sub locations.
  198. * Sort features at the end of gathering in one vector.
  199. * Extracted some internal structures and classes in separate header.
  200. * Delay creation of mapped features.
  201. *
  202. * Revision 1.15  2002/12/26 20:42:55  dicuccio
  203. * Added Win32 export specifier.  Removed unimplemented (private) operator++(int)
  204. *
  205. * Revision 1.14  2002/12/24 15:42:44  grichenk
  206. * CBioseqHandle argument to annotation iterators made const
  207. *
  208. * Revision 1.13  2002/12/06 15:35:57  grichenk
  209. * Added overlap type for annot-iterators
  210. *
  211. * Revision 1.12  2002/12/05 19:28:29  grichenk
  212. * Prohibited postfix operator ++()
  213. *
  214. * Revision 1.11  2002/07/08 20:50:55  grichenk
  215. * Moved log to the end of file
  216. * Replaced static mutex (in CScope, CDataSource) with the mutex
  217. * pool. Redesigned CDataSource data locking.
  218. *
  219. * Revision 1.10  2002/05/06 03:30:35  vakatov
  220. * OM/OM1 renaming
  221. *
  222. * Revision 1.9  2002/05/03 21:28:01  ucko
  223. * Introduce T(Signed)SeqPos.
  224. *
  225. * Revision 1.8  2002/04/30 14:30:41  grichenk
  226. * Added eResolve_TSE flag in CAnnot_Types_CI, made it default
  227. *
  228. * Revision 1.7  2002/04/17 20:57:49  grichenk
  229. * Added full type for "resolve" argument
  230. *
  231. * Revision 1.6  2002/04/05 21:26:16  grichenk
  232. * Enabled iteration over annotations defined on segments of a
  233. * delta-sequence.
  234. *
  235. * Revision 1.5  2002/03/05 16:08:11  grichenk
  236. * Moved TSE-restriction to new constructors
  237. *
  238. * Revision 1.4  2002/03/04 15:07:46  grichenk
  239. * Added "bioseq" argument to CAnnotTypes_CI constructor to iterate
  240. * annotations from a single TSE.
  241. *
  242. * Revision 1.3  2002/02/21 19:26:59  grichenk
  243. * Rearranged includes. Added scope history. Added searching for the
  244. * best seq-id match in data sources and scopes. Updated tests.
  245. *
  246. * Revision 1.2  2002/01/16 16:26:36  gouriano
  247. * restructured objmgr
  248. *
  249. * Revision 1.1  2002/01/11 19:03:59  gouriano
  250. * restructured objmgr
  251. *
  252. *
  253. * ===========================================================================
  254. */
  255. #endif  // ALIGN_CI__HPP