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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: annot_types_ci.hpp,v $
  4.  * PRODUCTION Revision 1000.3  2004/04/12 17:27:00  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.70
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef ANNOT_TYPES_CI__HPP
  10. #define ANNOT_TYPES_CI__HPP
  11. /*  $Id: annot_types_ci.hpp,v 1000.3 2004/04/12 17:27:00 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/impl/annot_collector.hpp>
  43. BEGIN_NCBI_SCOPE
  44. BEGIN_SCOPE(objects)
  45. // Base class for specific annotation iterators
  46. class NCBI_XOBJMGR_EXPORT CAnnotTypes_CI
  47. {
  48. public:
  49.     typedef SAnnotSelector::TAnnotType TAnnotType;
  50.     CAnnotTypes_CI(void);
  51.     // short methods
  52.     CAnnotTypes_CI(TAnnotType type,
  53.                    CScope& scope,
  54.                    const CSeq_loc& loc,
  55.                    const SAnnotSelector& params);
  56.     CAnnotTypes_CI(TAnnotType type,
  57.                    const CBioseq_Handle& bioseq,
  58.                    TSeqPos start, TSeqPos stop,
  59.                    const SAnnotSelector& params);
  60.     // Iterate everything from the seq-annot
  61.     CAnnotTypes_CI(TAnnotType type,
  62.                    const CSeq_annot_Handle& annot);
  63.     // Iterate everything from the seq-annot
  64.     CAnnotTypes_CI(TAnnotType type,
  65.                    const CSeq_annot_Handle& annot,
  66.                    const SAnnotSelector& params);
  67.     // Iterate everything from the seq-entry
  68.     CAnnotTypes_CI(TAnnotType type,
  69.                    const CSeq_entry_Handle& entry);
  70.     // Iterate everything from the seq-entry
  71.     CAnnotTypes_CI(TAnnotType type,
  72.                    const CSeq_entry_Handle& entry,
  73.                    const SAnnotSelector& params);
  74.     // Search all TSEs in all datasources, by default get annotations defined
  75.     // on segments in the same TSE (eResolve_TSE method).
  76.     CAnnotTypes_CI(TAnnotType type,
  77.                    CScope& scope,
  78.                    const CSeq_loc& loc,
  79.                    //const SAnnotSelector& selector,
  80.                    SAnnotSelector::EOverlapType overlap_type,
  81.                    SAnnotSelector::EResolveMethod resolve);
  82.     // Search only in TSE, containing the bioseq, by default get annotations
  83.     // defined on segments in the same TSE (eResolve_TSE method).
  84.     // If "entry" is set, search only annotations from the seq-entry specified
  85.     // (but no its sub-entries or parent entry).
  86.     CAnnotTypes_CI(TAnnotType type,
  87.                    const CBioseq_Handle& bioseq,
  88.                    TSeqPos start, TSeqPos stop,
  89.                    //const SAnnotSelector& selector,
  90.                    SAnnotSelector::EOverlapType overlap_type,
  91.                    SAnnotSelector::EResolveMethod resolve);
  92.     virtual ~CAnnotTypes_CI(void);
  93.     // Rewind annot iterator to point to the very first annot object,
  94.     // the same as immediately after construction.
  95.     void Rewind(void);
  96.     CSeq_annot_Handle GetAnnot(void) const;
  97.     const CSeq_annot& GetSeq_annot(void) const;
  98.     // Get number of annotations
  99.     size_t GetSize(void) const;
  100. protected:
  101.     typedef CAnnot_Collector::TAnnotSet TAnnotSet;
  102.     typedef TAnnotSet::const_iterator   TIterator;
  103.     // Check if a datasource and an annotation are selected.
  104.     bool IsValid(void) const;
  105.     // Move to the next valid position
  106.     void Next(void);
  107.     void Prev(void);
  108.     // Return current annotation
  109.     const CAnnotObject_Ref& Get(void) const;
  110.     CScope& GetScope(void) const;
  111.     CAnnot_Collector& GetCollector(void);
  112.     const TIterator& GetIterator(void) const;
  113. private:
  114.     const TAnnotSet& x_GetAnnotSet(void) const;
  115.     CRef<CAnnot_Collector> m_DataCollector;
  116.     // Current annotation
  117.     TIterator              m_CurrAnnot;
  118. };
  119. /////////////////////////////////////////////////////////////////////////////
  120. // CAnnotTypes_CI
  121. /////////////////////////////////////////////////////////////////////////////
  122. inline
  123. const CAnnotTypes_CI::TAnnotSet& CAnnotTypes_CI::x_GetAnnotSet(void) const
  124. {
  125.     _ASSERT(m_DataCollector);
  126.     return m_DataCollector->GetAnnotSet();
  127. }
  128. inline
  129. bool CAnnotTypes_CI::IsValid(void) const
  130. {
  131.     return bool(m_DataCollector)
  132.         &&  m_CurrAnnot != x_GetAnnotSet().end();
  133. }
  134. inline
  135. void CAnnotTypes_CI::Rewind(void)
  136. {
  137.     m_CurrAnnot = x_GetAnnotSet().begin();
  138. }
  139. inline
  140. void CAnnotTypes_CI::Next(void)
  141. {
  142.     ++m_CurrAnnot;
  143. }
  144. inline
  145. void CAnnotTypes_CI::Prev(void)
  146. {
  147.     --m_CurrAnnot;
  148. }
  149. inline
  150. const CAnnotObject_Ref& CAnnotTypes_CI::Get(void) const
  151. {
  152.     _ASSERT( IsValid() );
  153.     return *m_CurrAnnot;
  154. }
  155. inline
  156. CAnnot_Collector& CAnnotTypes_CI::GetCollector(void)
  157. {
  158.     _ASSERT(m_DataCollector);
  159.     return *m_DataCollector;
  160. }
  161. inline
  162. const CAnnotTypes_CI::TIterator& CAnnotTypes_CI::GetIterator(void) const
  163. {
  164.     _ASSERT( IsValid() );
  165.     return m_CurrAnnot;
  166. }
  167. inline
  168. size_t CAnnotTypes_CI::GetSize(void) const
  169. {
  170.     return x_GetAnnotSet().size();
  171. }
  172. inline
  173. CScope& CAnnotTypes_CI::GetScope(void) const
  174. {
  175.     _ASSERT(m_DataCollector);
  176.     return m_DataCollector->GetScope();
  177. }
  178. END_SCOPE(objects)
  179. END_NCBI_SCOPE
  180. /*
  181. * ---------------------------------------------------------------------------
  182. * $Log: annot_types_ci.hpp,v $
  183. * Revision 1000.3  2004/04/12 17:27:00  gouriano
  184. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.70
  185. *
  186. * Revision 1.70  2004/04/07 13:20:16  grichenk
  187. * Moved more data from iterators to CAnnot_Collector
  188. *
  189. * Revision 1.69  2004/04/05 15:56:13  grichenk
  190. * Redesigned CAnnotTypes_CI: moved all data and data collecting
  191. * functions to CAnnotDataCollector. CAnnotTypes_CI is no more
  192. * inherited from SAnnotSelector.
  193. *
  194. * Revision 1.68  2004/03/16 18:09:29  vasilche
  195. * Include <memory> for auto_ptr
  196. *
  197. * Revision 1.67  2004/03/16 15:47:25  vasilche
  198. * Added CBioseq_set_Handle and set of EditHandles
  199. *
  200. * Revision 1.66  2004/02/19 19:25:08  vasilche
  201. * Hidded implementation of CAnnotObject_Ref.
  202. * Added necessary access methods.
  203. *
  204. * Revision 1.65  2004/02/19 17:14:36  vasilche
  205. * Removed unused include.
  206. *
  207. * Revision 1.64  2004/02/06 18:31:53  vasilche
  208. * Fixed annot sorting class - deal with different annot types (graph align feat).
  209. *
  210. * Revision 1.63  2004/02/05 19:53:39  grichenk
  211. * Fixed type matching in SAnnotSelector. Added IncludeAnnotType().
  212. *
  213. * Revision 1.62  2004/02/04 18:05:32  grichenk
  214. * Added annotation filtering by set of types/subtypes.
  215. * Renamed *Choice to *Type in SAnnotSelector.
  216. *
  217. * Revision 1.61  2004/01/28 20:54:34  vasilche
  218. * Fixed mapping of annotations.
  219. *
  220. * Revision 1.60  2004/01/23 16:14:45  grichenk
  221. * Implemented alignment mapping
  222. *
  223. * Revision 1.59  2003/11/10 18:11:03  grichenk
  224. * Moved CSeq_loc_Conversion_Set to seq_loc_cvt
  225. *
  226. * Revision 1.58  2003/11/04 21:10:00  grichenk
  227. * Optimized feature mapping through multiple segments.
  228. * Fixed problem with CAnnotTypes_CI not releasing scope
  229. * when exception is thrown from constructor.
  230. *
  231. * Revision 1.57  2003/11/04 16:21:36  grichenk
  232. * Updated CAnnotTypes_CI to map whole features instead of splitting
  233. * them by sequence segments.
  234. *
  235. * Revision 1.56  2003/10/27 20:07:10  vasilche
  236. * Started implementation of full annotations' mapping.
  237. *
  238. * Revision 1.55  2003/10/09 20:20:59  vasilche
  239. * Added possibility to include and exclude Seq-annot names to annot iterator.
  240. * Fixed adaptive search. It looked only on selected set of annot names before.
  241. *
  242. * Revision 1.54  2003/10/07 13:43:22  vasilche
  243. * Added proper handling of named Seq-annots.
  244. * Added feature search from named Seq-annots.
  245. * Added configurable adaptive annotation search (default: gene, cds, mrna).
  246. * Fixed selection of blobs for loading from GenBank.
  247. * Added debug checks to CSeq_id_Mapper for easier finding lost CSeq_id_Handles.
  248. * Fixed leaked split chunks annotation stubs.
  249. * Moved some classes definitions in separate *.cpp files.
  250. *
  251. * Revision 1.53  2003/09/30 16:21:59  vasilche
  252. * Updated internal object manager classes to be able to load ID2 data.
  253. * SNP blobs are loaded as ID2 split blobs - readers convert them automatically.
  254. * Scope caches results of requests for data to data loaders.
  255. * Optimized CSeq_id_Handle for gis.
  256. * Optimized bioseq lookup in scope.
  257. * Reduced object allocations in annotation iterators.
  258. * CScope is allowed to be destroyed before other objects using this scope are
  259. * deleted (feature iterators, bioseq handles etc).
  260. * Optimized lookup for matching Seq-ids in CSeq_id_Mapper.
  261. * Added 'adaptive' option to objmgr_demo application.
  262. *
  263. * Revision 1.52  2003/09/12 15:50:09  grichenk
  264. * Updated adaptive-depth triggering
  265. *
  266. * Revision 1.51  2003/09/11 17:45:06  grichenk
  267. * Added adaptive-depth option to annot-iterators.
  268. *
  269. * Revision 1.50  2003/09/03 19:59:00  grichenk
  270. * Initialize m_MappedIndex to 0
  271. *
  272. * Revision 1.49  2003/08/27 21:23:35  vasilche
  273. * Fixed warning.
  274. *
  275. * Revision 1.48  2003/08/27 14:28:50  vasilche
  276. * Reduce amount of object allocations in feature iteration.
  277. *
  278. * Revision 1.47  2003/08/22 14:58:55  grichenk
  279. * Added NoMapping flag (to be used by CAnnot_CI for faster fetching).
  280. * Added GetScope().
  281. *
  282. * Revision 1.46  2003/08/15 19:19:15  vasilche
  283. * Fixed memory leak in string packing hooks.
  284. * Fixed processing of 'partial' flag of features.
  285. * Allow table packing of non-point SNP.
  286. * Allow table packing of SNP with long alleles.
  287. *
  288. * Revision 1.45  2003/08/14 20:05:18  vasilche
  289. * Simple SNP features are stored as table internally.
  290. * They are recreated when needed using CFeat_CI.
  291. *
  292. * Revision 1.44  2003/08/04 17:02:57  grichenk
  293. * Added constructors to iterate all annotations from a
  294. * seq-entry or seq-annot.
  295. *
  296. * Revision 1.43  2003/07/18 19:39:44  vasilche
  297. * Workaround for GCC 3.0.4 bug.
  298. *
  299. * Revision 1.42  2003/07/17 20:07:55  vasilche
  300. * Reduced memory usage by feature indexes.
  301. * SNP data is loaded separately through PUBSEQ_OS.
  302. * String compression for SNP data.
  303. *
  304. * Revision 1.41  2003/06/25 20:56:29  grichenk
  305. * Added max number of annotations to annot-selector, updated demo.
  306. *
  307. * Revision 1.40  2003/06/02 16:01:36  dicuccio
  308. * Rearranged include/objects/ subtree.  This includes the following shifts:
  309. *     - include/objects/alnmgr --> include/objtools/alnmgr
  310. *     - include/objects/cddalignview --> include/objtools/cddalignview
  311. *     - include/objects/flat --> include/objtools/flat
  312. *     - include/objects/objmgr/ --> include/objmgr/
  313. *     - include/objects/util/ --> include/objmgr/util/
  314. *     - include/objects/validator --> include/objtools/validator
  315. *
  316. * Revision 1.39  2003/04/29 19:51:12  vasilche
  317. * Fixed interaction of Data Loader garbage collector and TSE locking mechanism.
  318. * Made some typedefs more consistent.
  319. *
  320. * Revision 1.38  2003/04/24 16:12:37  vasilche
  321. * Object manager internal structures are splitted more straightforward.
  322. * Removed excessive header dependencies.
  323. *
  324. * Revision 1.37  2003/03/27 19:40:10  vasilche
  325. * Implemented sorting in CGraph_CI.
  326. * Added Rewind() method to feature/graph/align iterators.
  327. *
  328. * Revision 1.36  2003/03/21 19:22:48  grichenk
  329. * Redesigned TSE locking, replaced CTSE_Lock with CRef<CTSE_Info>.
  330. *
  331. * Revision 1.35  2003/03/18 21:48:27  grichenk
  332. * Removed obsolete class CAnnot_CI
  333. *
  334. * Revision 1.34  2003/03/05 20:56:42  vasilche
  335. * SAnnotSelector now holds all parameters of annotation iterators.
  336. *
  337. * Revision 1.33  2003/02/28 19:27:20  vasilche
  338. * Cleaned Seq_loc conversion class.
  339. *
  340. * Revision 1.32  2003/02/27 20:56:51  vasilche
  341. * Use one method for lookup on main sequence and segments.
  342. *
  343. * Revision 1.31  2003/02/27 14:35:32  vasilche
  344. * Splitted PopulateTSESet() by logically independent parts.
  345. *
  346. * Revision 1.30  2003/02/26 17:54:14  vasilche
  347. * Added cached total range of mapped location.
  348. *
  349. * Revision 1.29  2003/02/24 21:35:21  vasilche
  350. * Reduce checks in CAnnotObject_Ref comparison.
  351. * Fixed compilation errors on MS Windows.
  352. * Removed obsolete file src/objects/objmgr/annot_object.hpp.
  353. *
  354. * Revision 1.28  2003/02/24 18:57:20  vasilche
  355. * Make feature gathering in one linear pass using CSeqMap iterator.
  356. * Do not use feture index by sub locations.
  357. * Sort features at the end of gathering in one vector.
  358. * Extracted some internal structures and classes in separate header.
  359. * Delay creation of mapped features.
  360. *
  361. * Revision 1.27  2003/02/13 14:34:31  grichenk
  362. * Renamed CAnnotObject -> CAnnotObject_Info
  363. * + CSeq_annot_Info and CAnnotObject_Ref
  364. * Moved some members of CAnnotObject to CSeq_annot_Info
  365. * and CAnnotObject_Ref.
  366. * Added feat/align/graph to CAnnotObject_Info map
  367. * to CDataSource.
  368. *
  369. * Revision 1.26  2003/02/04 21:44:10  grichenk
  370. * Convert seq-loc instead of seq-annot to the master coordinates
  371. *
  372. * Revision 1.25  2002/12/26 20:51:35  dicuccio
  373. * Added Win32 export specifier
  374. *
  375. * Revision 1.24  2002/12/26 16:39:21  vasilche
  376. * Object manager class CSeqMap rewritten.
  377. *
  378. * Revision 1.23  2002/12/24 15:42:44  grichenk
  379. * CBioseqHandle argument to annotation iterators made const
  380. *
  381. * Revision 1.22  2002/12/06 15:35:57  grichenk
  382. * Added overlap type for annot-iterators
  383. *
  384. * Revision 1.21  2002/11/04 21:28:58  grichenk
  385. * Fixed usage of const CRef<> and CRef<> constructor
  386. *
  387. * Revision 1.20  2002/11/01 20:46:41  grichenk
  388. * Added sorting to set< CRef<CAnnotObject> >
  389. *
  390. * Revision 1.19  2002/10/08 18:57:27  grichenk
  391. * Added feature sorting to the iterator class.
  392. *
  393. * Revision 1.18  2002/07/08 20:50:56  grichenk
  394. * Moved log to the end of file
  395. * Replaced static mutex (in CScope, CDataSource) with the mutex
  396. * pool. Redesigned CDataSource data locking.
  397. *
  398. * Revision 1.17  2002/05/31 17:52:58  grichenk
  399. * Optimized for better performance (CTSE_Info uses atomic counter,
  400. * delayed annotations indexing, no location convertions in
  401. * CAnnot_Types_CI if no references resolution is required etc.)
  402. *
  403. * Revision 1.16  2002/05/24 14:58:53  grichenk
  404. * Fixed Empty() for unsigned intervals
  405. * SerialAssign<>() -> CSerialObject::Assign()
  406. * Improved performance for eResolve_None case
  407. *
  408. * Revision 1.15  2002/05/06 03:30:35  vakatov
  409. * OM/OM1 renaming
  410. *
  411. * Revision 1.14  2002/05/03 21:28:01  ucko
  412. * Introduce T(Signed)SeqPos.
  413. *
  414. * Revision 1.13  2002/04/30 14:30:41  grichenk
  415. * Added eResolve_TSE flag in CAnnot_Types_CI, made it default
  416. *
  417. * Revision 1.12  2002/04/22 20:06:15  grichenk
  418. * Minor changes in private interface
  419. *
  420. * Revision 1.11  2002/04/17 21:11:58  grichenk
  421. * Fixed annotations loading
  422. * Set "partial" flag in features if necessary
  423. * Implemented most seq-loc types in reference resolving methods
  424. * Fixed searching for annotations within a signle TSE
  425. *
  426. * Revision 1.10  2002/04/11 12:07:28  grichenk
  427. * Redesigned CAnnotTypes_CI to resolve segmented sequences correctly.
  428. *
  429. * Revision 1.9  2002/04/05 21:26:16  grichenk
  430. * Enabled iteration over annotations defined on segments of a
  431. * delta-sequence.
  432. *
  433. * Revision 1.8  2002/03/07 21:25:31  grichenk
  434. * +GetSeq_annot() in annotation iterators
  435. *
  436. * Revision 1.7  2002/03/05 16:08:12  grichenk
  437. * Moved TSE-restriction to new constructors
  438. *
  439. * Revision 1.6  2002/03/04 15:07:46  grichenk
  440. * Added "bioseq" argument to CAnnotTypes_CI constructor to iterate
  441. * annotations from a single TSE.
  442. *
  443. * Revision 1.5  2002/02/21 19:27:00  grichenk
  444. * Rearranged includes. Added scope history. Added searching for the
  445. * best seq-id match in data sources and scopes. Updated tests.
  446. *
  447. * Revision 1.4  2002/02/15 20:36:29  gouriano
  448. * changed implementation of HandleRangeMap
  449. *
  450. * Revision 1.3  2002/02/07 21:27:33  grichenk
  451. * Redesigned CDataSource indexing: seq-id handle -> TSE -> seq/annot
  452. *
  453. * Revision 1.2  2002/01/16 16:26:35  gouriano
  454. * restructured objmgr
  455. *
  456. * Revision 1.1  2002/01/11 19:03:59  gouriano
  457. * restructured objmgr
  458. *
  459. *
  460. * ===========================================================================
  461. */
  462. #endif  // ANNOT_TYPES_CI__HPP