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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: annot_object.cpp,v $
  4.  * PRODUCTION Revision 1000.3  2004/06/01 19:22:36  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.39
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: annot_object.cpp,v 1000.3 2004/06/01 19:22:36 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. *
  38. */
  39. #include <ncbi_pch.hpp>
  40. #include <objmgr/impl/annot_object.hpp>
  41. #include <objmgr/impl/handle_range_map.hpp>
  42. #include <objmgr/impl/seq_entry_info.hpp>
  43. #include <objmgr/impl/bioseq_base_info.hpp>
  44. #include <objmgr/impl/seq_annot_info.hpp>
  45. #include <objmgr/impl/tse_chunk_info.hpp>
  46. #include <objects/seqset/Seq_entry.hpp>
  47. #include <objects/seq/Seq_annot.hpp>
  48. #include <objects/seqloc/Seq_interval.hpp>
  49. #include <objects/seqloc/Seq_loc.hpp>
  50. #include <objects/seqalign/Dense_diag.hpp>
  51. #include <objects/seqalign/Dense_seg.hpp>
  52. #include <objects/seqalign/Std_seg.hpp>
  53. #include <objects/seqalign/Packed_seg.hpp>
  54. #include <objects/seqalign/Seq_align_set.hpp>
  55. #include <objects/seqalign/Seq_align.hpp>
  56. #include <objects/seqfeat/Seq_feat.hpp>
  57. #include <objects/seqres/Seq_graph.hpp>
  58. BEGIN_NCBI_SCOPE
  59. BEGIN_SCOPE(objects)
  60. ////////////////////////////////////////////////////////////////////
  61. //
  62. //  CAnnotObject_Info::
  63. //
  64. CAnnotObject_Info::CAnnotObject_Info(void)
  65.     : m_Annot_Info(0),
  66.       m_Object(0),
  67.       m_FeatSubtype(CSeqFeatData::eSubtype_any),
  68.       m_FeatType(CSeqFeatData::e_not_set),
  69.       m_AnnotType(CSeq_annot::C_Data::e_not_set),
  70.       m_MultiId(0)
  71. {
  72. }
  73. CAnnotObject_Info::CAnnotObject_Info(const CSeq_feat& feat,
  74.                                      CSeq_annot_Info& annot)
  75.     : m_Annot_Info(&annot),
  76.       m_Object(&feat),
  77.       m_FeatSubtype(feat.GetData().GetSubtype()),
  78.       m_FeatType(feat.GetData().Which()),
  79.       m_AnnotType(CSeq_annot::C_Data::e_Ftable),
  80.       m_MultiId(0)
  81. {
  82.     _ASSERT(!IsChunkStub());
  83. }
  84. CAnnotObject_Info::CAnnotObject_Info(const CSeq_align& align,
  85.                                      CSeq_annot_Info& annot)
  86.     : m_Annot_Info(&annot),
  87.       m_Object(&align),
  88.       m_FeatSubtype(CSeqFeatData::eSubtype_any),
  89.       m_FeatType(CSeqFeatData::e_not_set),
  90.       m_AnnotType(CSeq_annot::C_Data::e_Align),
  91.       m_MultiId(0)
  92. {
  93.     _ASSERT(!IsChunkStub());
  94. }
  95. CAnnotObject_Info::CAnnotObject_Info(const CSeq_graph& graph,
  96.                                      CSeq_annot_Info& annot)
  97.     : m_Annot_Info(&annot),
  98.       m_Object(&graph),
  99.       m_FeatSubtype(CSeqFeatData::eSubtype_any),
  100.       m_FeatType(CSeqFeatData::e_not_set),
  101.       m_AnnotType(CSeq_annot::C_Data::e_Graph),
  102.       m_MultiId(0)
  103. {
  104.     _ASSERT(!IsChunkStub());
  105. }
  106. CAnnotObject_Info::CAnnotObject_Info(CTSE_Chunk_Info& chunk_info,
  107.                                      const SAnnotTypeSelector& sel)
  108.     : m_Annot_Info(0),
  109.       m_Object(&chunk_info),
  110.       m_FeatSubtype(sel.GetFeatSubtype()),
  111.       m_FeatType(sel.GetFeatType()),
  112.       m_AnnotType(sel.GetAnnotType()),
  113.       m_MultiId(0)
  114. {
  115.     _ASSERT(IsChunkStub());
  116. }
  117. CAnnotObject_Info::~CAnnotObject_Info(void)
  118. {
  119. }
  120. const CTSE_Chunk_Info& CAnnotObject_Info::GetChunk_Info(void) const
  121. {
  122.     _ASSERT(IsChunkStub());
  123.     return *static_cast<const CTSE_Chunk_Info*>(m_Object.GetPointer());
  124. }
  125. void CAnnotObject_Info::GetMaps(vector<CHandleRangeMap>& hrmaps) const
  126. {
  127.     switch ( Which() ) {
  128.     case CSeq_annot::C_Data::e_Ftable:
  129.     {
  130.         const CSeq_feat& feat = *GetFeatFast();
  131.         hrmaps.resize(feat.IsSetProduct()? 2: 1);
  132.         hrmaps[0].clear();
  133.         hrmaps[0].AddLocation(feat.GetLocation());
  134.         if (hrmaps[0].GetMap().size() > 1) {
  135.             m_MultiId |= fMultiId_Location;
  136.         }
  137.         if ( feat.IsSetProduct() ) {
  138.             hrmaps[1].clear();
  139.             hrmaps[1].AddLocation(feat.GetProduct());
  140.             if (hrmaps[1].GetMap().size() > 1) {
  141.                 m_MultiId |= fMultiId_Product;
  142.             }
  143.         }
  144.         break;
  145.     }
  146.     case CSeq_annot::C_Data::e_Graph:
  147.     {
  148.         const CSeq_graph& graph = *GetGraphFast();
  149.         hrmaps.resize(1);
  150.         hrmaps[0].clear();
  151.         hrmaps[0].AddLocation(graph.GetLoc());
  152.         if (hrmaps[0].GetMap().size() > 1) {
  153.             m_MultiId |= fMultiId_Location;
  154.         }
  155.         break;
  156.     }
  157.     case CSeq_annot::C_Data::e_Align:
  158.     {
  159.         const CSeq_align& align = GetAlign();
  160.         // TODO: separate alignment locations
  161.         hrmaps.clear();
  162.         x_ProcessAlign(hrmaps, align, 0);
  163.         break;
  164.     }
  165.     default:
  166.         break;
  167.     }
  168. }
  169. const CSeq_entry_Info& CAnnotObject_Info::GetSeq_entry_Info(void) const
  170. {
  171.     return GetSeq_annot_Info().GetParentSeq_entry_Info();
  172. }
  173. const CTSE_Info& CAnnotObject_Info::GetTSE_Info(void) const
  174. {
  175.     return GetSeq_annot_Info().GetTSE_Info();
  176. }
  177. CTSE_Info& CAnnotObject_Info::GetTSE_Info(void)
  178. {
  179.     return GetSeq_annot_Info().GetTSE_Info();
  180. }
  181. CDataSource& CAnnotObject_Info::GetDataSource(void) const
  182. {
  183.     return GetSeq_annot_Info().GetDataSource();
  184. }
  185. const CSeq_feat& CAnnotObject_Info::GetFeat(void) const
  186. {
  187.     _ASSERT(!IsChunkStub() && IsFeat());
  188.     const CObject& obj = *m_Object;
  189.     return dynamic_cast<const CSeq_feat&>(obj);
  190. }
  191. const CSeq_align& CAnnotObject_Info::GetAlign(void) const
  192. {
  193.     _ASSERT(!IsChunkStub() && IsAlign());
  194.     const CObject& obj = *m_Object;
  195.     return dynamic_cast<const CSeq_align&>(obj);
  196. }
  197. const CSeq_graph& CAnnotObject_Info::GetGraph(void) const
  198. {
  199.     _ASSERT(!IsChunkStub() && IsGraph());
  200.     const CObject& obj = *m_Object;
  201.     return dynamic_cast<const CSeq_graph&>(obj);
  202. }
  203. void CAnnotObject_Info::x_ProcessAlign(vector<CHandleRangeMap>& hrmaps,
  204.                                        const CSeq_align& align,
  205.                                        int loc_index_shift) const
  206. {
  207.     //### Check the implementation.
  208.     switch ( align.GetSegs().Which() ) {
  209.     case CSeq_align::C_Segs::e_not_set:
  210.         {
  211.             break;
  212.         }
  213.     case CSeq_align::C_Segs::e_Dendiag:
  214.         {
  215.             const CSeq_align::C_Segs::TDendiag& dendiag =
  216.                 align.GetSegs().GetDendiag();
  217.             ITERATE ( CSeq_align::C_Segs::TDendiag, it, dendiag ) {
  218.                 const CDense_diag& diag = **it;
  219.                 int dim = diag.GetDim();
  220.                 if (dim != (int)diag.GetIds().size()) {
  221.                     ERR_POST(Warning << "Invalid 'ids' size in dendiag");
  222.                     dim = min(dim, (int)diag.GetIds().size());
  223.                 }
  224.                 if (dim != (int)diag.GetStarts().size()) {
  225.                     ERR_POST(Warning << "Invalid 'starts' size in dendiag");
  226.                     dim = min(dim, (int)diag.GetStarts().size());
  227.                 }
  228.                 if (diag.IsSetStrands()
  229.                     && dim != (int)diag.GetStrands().size()) {
  230.                     ERR_POST(Warning << "Invalid 'strands' size in dendiag");
  231.                     dim = min(dim, (int)diag.GetStrands().size());
  232.                 }
  233.                 if (hrmaps.size() < loc_index_shift + dim) {
  234.                     hrmaps.resize(loc_index_shift + dim);
  235.                 }
  236.                 TSeqPos len = (*it)->GetLen();
  237.                 for (int row = 0; row < dim; ++row) {
  238.                     CSeq_loc loc;
  239.                     loc.SetInt().SetId().Assign(*(*it)->GetIds()[row]);
  240.                     loc.SetInt().SetFrom((*it)->GetStarts()[row]);
  241.                     loc.SetInt().SetTo((*it)->GetStarts()[row] + len - 1);
  242.                     if ( (*it)->IsSetStrands() ) {
  243.                         loc.SetInt().SetStrand((*it)->GetStrands()[row]);
  244.                     }
  245.                     hrmaps[loc_index_shift + row].AddLocation(loc);
  246.                 }
  247.             }
  248.             break;
  249.         }
  250.     case CSeq_align::C_Segs::e_Denseg:
  251.         {
  252.             const CSeq_align::C_Segs::TDenseg& denseg =
  253.                 align.GetSegs().GetDenseg();
  254.             int dim    = denseg.GetDim();
  255.             int numseg = denseg.GetNumseg();
  256.             // claimed dimension may not be accurate :-/
  257.             if (numseg != (int)denseg.GetLens().size()) {
  258.                 ERR_POST(Warning << "Invalid 'lens' size in denseg");
  259.                 numseg = min(numseg, (int)denseg.GetLens().size());
  260.             }
  261.             if (denseg.IsSetScores()
  262.                 && numseg != (int)denseg.GetScores().size()) {
  263.                 ERR_POST(Warning << "Invalid 'scores' size in denseg");
  264.                 numseg = min(numseg, (int)denseg.GetScores().size());
  265.             }
  266.             if (dim != (int)denseg.GetIds().size()) {
  267.                 ERR_POST(Warning << "Invalid 'ids' size in denseg");
  268.                 dim = min(dim, (int)denseg.GetIds().size());
  269.             }
  270.             if (dim*numseg != (int)denseg.GetStarts().size()) {
  271.                 ERR_POST(Warning << "Invalid 'starts' size in denseg");
  272.                 dim = min(dim*numseg, (int)denseg.GetStarts().size()) / numseg;
  273.             }
  274.             if (denseg.IsSetStrands()
  275.                 && dim*numseg != (int)denseg.GetStrands().size()) {
  276.                 ERR_POST(Warning << "Invalid 'strands' size in denseg");
  277.                 dim = min(dim*numseg, (int)denseg.GetStrands().size()) / numseg;
  278.             }
  279.             if (hrmaps.size() < loc_index_shift + dim) {
  280.                 hrmaps.resize(loc_index_shift + dim);
  281.             }
  282.             for (int seg = 0;  seg < numseg;  seg++) {
  283.                 for (int row = 0;  row < dim;  row++) {
  284.                     if (denseg.GetStarts()[seg*dim + row] < 0 ) {
  285.                         continue;
  286.                     }
  287.                     CSeq_loc loc;
  288.                     loc.SetInt().SetId().Assign(*denseg.GetIds()[row]);
  289.                     loc.SetInt().SetFrom(denseg.GetStarts()[seg*dim + row]);
  290.                     loc.SetInt().SetTo(denseg.GetStarts()[seg*dim + row]
  291.                         + denseg.GetLens()[seg] - 1);
  292.                     if ( denseg.IsSetStrands() ) {
  293.                         loc.SetInt().SetStrand(denseg.GetStrands()[seg*dim + row]);
  294.                     }
  295.                     hrmaps[loc_index_shift + row].AddLocation(loc);
  296.                 }
  297.             }
  298.             break;
  299.         }
  300.     case CSeq_align::C_Segs::e_Std:
  301.         {
  302.             const CSeq_align::C_Segs::TStd& std =
  303.                 align.GetSegs().GetStd();
  304.             ITERATE ( CSeq_align::C_Segs::TStd, it, std ) {
  305.                 if (hrmaps.size() < loc_index_shift + (*it)->GetDim()) {
  306.                     hrmaps.resize(loc_index_shift + (*it)->GetDim());
  307.                 }
  308.                 ITERATE ( CStd_seg::TLoc, it_loc, (*it)->GetLoc() ) {
  309.                     CSeq_loc_CI row_it(**it_loc);
  310.                     for (int row = 0; row_it; ++row_it, ++row) {
  311.                         if (loc_index_shift + row >= hrmaps.size()) {
  312.                             hrmaps.resize(loc_index_shift + row + 1);
  313.                         }
  314.                         CSeq_loc loc;
  315.                         loc.SetInt().SetId().Assign(row_it.GetSeq_id());
  316.                         loc.SetInt().SetFrom(row_it.GetRange().GetFrom());
  317.                         loc.SetInt().SetTo(row_it.GetRange().GetTo());
  318.                         if ( row_it.GetStrand() != eNa_strand_unknown ) {
  319.                             loc.SetInt().SetStrand(row_it.GetStrand());
  320.                         }
  321.                         hrmaps[loc_index_shift + row].AddLocation(loc);
  322.                     }
  323.                 }
  324.             }
  325.             break;
  326.         }
  327.     case CSeq_align::C_Segs::e_Packed:
  328.         {
  329.             const CSeq_align::C_Segs::TPacked& packed =
  330.                 align.GetSegs().GetPacked();
  331.             int dim    = packed.GetDim();
  332.             int numseg = packed.GetNumseg();
  333.             // claimed dimension may not be accurate :-/
  334.             if (dim * numseg > (int)packed.GetStarts().size()) {
  335.                 dim = packed.GetStarts().size() / numseg;
  336.             }
  337.             if (dim * numseg > (int)packed.GetPresent().size()) {
  338.                 dim = packed.GetPresent().size() / numseg;
  339.             }
  340.             if (dim > (int)packed.GetLens().size()) {
  341.                 dim = packed.GetLens().size();
  342.             }
  343.             if (hrmaps.size() < loc_index_shift + dim) {
  344.                 hrmaps.resize(loc_index_shift + dim);
  345.             }
  346.             for (int seg = 0;  seg < numseg;  seg++) {
  347.                 for (int row = 0;  row < dim;  row++) {
  348.                     if ( packed.GetPresent()[seg*dim + row] ) {
  349.                         CSeq_loc loc;
  350.                         loc.SetInt().SetId().Assign(*packed.GetIds()[row]);
  351.                         loc.SetInt().SetFrom(packed.GetStarts()[seg*dim + row]);
  352.                         loc.SetInt().SetTo(packed.GetStarts()[seg*dim + row]
  353.                             + packed.GetLens()[seg] - 1);
  354.                         if ( packed.IsSetStrands() ) {
  355.                             loc.SetInt().SetStrand(packed.GetStrands()[seg*dim + row]);
  356.                         }
  357.                         hrmaps[loc_index_shift + row].AddLocation(loc);
  358.                     }
  359.                 }
  360.             }
  361.             break;
  362.         }
  363.     case CSeq_align::C_Segs::e_Disc:
  364.         {
  365.             const CSeq_align::C_Segs::TDisc& disc =
  366.                 align.GetSegs().GetDisc();
  367.             ITERATE ( CSeq_align_set::Tdata, it, disc.Get() ) {
  368.                 x_ProcessAlign(hrmaps, **it, hrmaps.size());
  369.             }
  370.             break;
  371.         }
  372.     }
  373. }
  374. END_SCOPE(objects)
  375. END_NCBI_SCOPE
  376. /*
  377. * ---------------------------------------------------------------------------
  378. * $Log: annot_object.cpp,v $
  379. * Revision 1000.3  2004/06/01 19:22:36  gouriano
  380. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.39
  381. *
  382. * Revision 1.39  2004/05/26 14:29:20  grichenk
  383. * Redesigned CSeq_align_Mapper: preserve non-mapping intervals,
  384. * fixed strands handling, improved performance.
  385. *
  386. * Revision 1.38  2004/05/21 21:42:12  gorelenk
  387. * Added PCH ncbi_pch.hpp
  388. *
  389. * Revision 1.37  2004/04/01 20:33:58  grichenk
  390. * One more m_MultiId initialization
  391. *
  392. * Revision 1.36  2004/04/01 20:18:12  grichenk
  393. * Added initialization of m_MultiId member.
  394. *
  395. * Revision 1.35  2004/03/31 20:43:29  grichenk
  396. * Fixed mapping of seq-locs containing both master sequence
  397. * and its segments.
  398. *
  399. * Revision 1.34  2004/03/26 19:42:04  vasilche
  400. * Fixed premature deletion of SNP annot info object.
  401. * Removed obsolete references to chunk info.
  402. *
  403. * Revision 1.33  2004/03/16 15:47:27  vasilche
  404. * Added CBioseq_set_Handle and set of EditHandles
  405. *
  406. * Revision 1.32  2004/02/04 18:05:38  grichenk
  407. * Added annotation filtering by set of types/subtypes.
  408. * Renamed *Choice to *Type in SAnnotSelector.
  409. *
  410. * Revision 1.31  2004/01/23 16:14:47  grichenk
  411. * Implemented alignment mapping
  412. *
  413. * Revision 1.30  2004/01/22 20:10:40  vasilche
  414. * 1. Splitted ID2 specs to two parts.
  415. * ID2 now specifies only protocol.
  416. * Specification of ID2 split data is moved to seqsplit ASN module.
  417. * For now they are still reside in one resulting library as before - libid2.
  418. * As the result split specific headers are now in objects/seqsplit.
  419. * 2. Moved ID2 and ID1 specific code out of object manager.
  420. * Protocol is processed by corresponding readers.
  421. * ID2 split parsing is processed by ncbi_xreader library - used by all readers.
  422. * 3. Updated OBJMGR_LIBS correspondingly.
  423. *
  424. * Revision 1.29  2003/11/26 17:55:56  vasilche
  425. * Implemented ID2 split in ID1 cache.
  426. * Fixed loading of splitted annotations.
  427. *
  428. * Revision 1.28  2003/10/07 13:43:23  vasilche
  429. * Added proper handling of named Seq-annots.
  430. * Added feature search from named Seq-annots.
  431. * Added configurable adaptive annotation search (default: gene, cds, mrna).
  432. * Fixed selection of blobs for loading from GenBank.
  433. * Added debug checks to CSeq_id_Mapper for easier finding lost CSeq_id_Handles.
  434. * Fixed leaked split chunks annotation stubs.
  435. * Moved some classes definitions in separate *.cpp files.
  436. *
  437. * Revision 1.27  2003/09/30 16:22:02  vasilche
  438. * Updated internal object manager classes to be able to load ID2 data.
  439. * SNP blobs are loaded as ID2 split blobs - readers convert them automatically.
  440. * Scope caches results of requests for data to data loaders.
  441. * Optimized CSeq_id_Handle for gis.
  442. * Optimized bioseq lookup in scope.
  443. * Reduced object allocations in annotation iterators.
  444. * CScope is allowed to be destroyed before other objects using this scope are
  445. * deleted (feature iterators, bioseq handles etc).
  446. * Optimized lookup for matching Seq-ids in CSeq_id_Mapper.
  447. * Added 'adaptive' option to objmgr_demo application.
  448. *
  449. * Revision 1.26  2003/08/27 21:24:51  vasilche
  450. * Reordered member initializers.
  451. *
  452. * Revision 1.25  2003/08/27 14:29:52  vasilche
  453. * Reduce object allocations in feature iterator.
  454. *
  455. * Revision 1.24  2003/08/26 21:28:47  grichenk
  456. * Added seq-align verification
  457. *
  458. * Revision 1.23  2003/07/18 16:58:23  grichenk
  459. * Fixed alignment coordinates
  460. *
  461. * Revision 1.22  2003/07/17 20:07:55  vasilche
  462. * Reduced memory usage by feature indexes.
  463. * SNP data is loaded separately through PUBSEQ_OS.
  464. * String compression for SNP data.
  465. *
  466. * Revision 1.21  2003/06/02 16:06:37  dicuccio
  467. * Rearranged src/objects/ subtree.  This includes the following shifts:
  468. *     - src/objects/asn2asn --> arc/app/asn2asn
  469. *     - src/objects/testmedline --> src/objects/ncbimime/test
  470. *     - src/objects/objmgr --> src/objmgr
  471. *     - src/objects/util --> src/objmgr/util
  472. *     - src/objects/alnmgr --> src/objtools/alnmgr
  473. *     - src/objects/flat --> src/objtools/flat
  474. *     - src/objects/validator --> src/objtools/validator
  475. *     - src/objects/cddalignview --> src/objtools/cddalignview
  476. * In addition, libseq now includes six of the objects/seq... libs, and libmmdb
  477. * replaces the three libmmdb? libs.
  478. *
  479. * Revision 1.20  2003/04/24 16:12:38  vasilche
  480. * Object manager internal structures are splitted more straightforward.
  481. * Removed excessive header dependencies.
  482. *
  483. * Revision 1.19  2003/03/11 15:51:06  kuznets
  484. * iterate -> ITERATE
  485. *
  486. * Revision 1.18  2003/02/24 18:57:22  vasilche
  487. * Make feature gathering in one linear pass using CSeqMap iterator.
  488. * Do not use feture index by sub locations.
  489. * Sort features at the end of gathering in one vector.
  490. * Extracted some internal structures and classes in separate header.
  491. * Delay creation of mapped features.
  492. *
  493. * Revision 1.17  2003/02/13 14:34:34  grichenk
  494. * Renamed CAnnotObject -> CAnnotObject_Info
  495. * + CSeq_annot_Info and CAnnotObject_Ref
  496. * Moved some members of CAnnotObject to CSeq_annot_Info
  497. * and CAnnotObject_Ref.
  498. * Added feat/align/graph to CAnnotObject_Info map
  499. * to CDataSource.
  500. *
  501. * Revision 1.16  2003/02/04 18:53:36  dicuccio
  502. * Include file clean-up
  503. *
  504. * Revision 1.15  2003/01/22 20:11:54  vasilche
  505. * Merged functionality of CSeqMapResolved_CI to CSeqMap_CI.
  506. * CSeqMap_CI now supports resolution and iteration over sequence range.
  507. * Added several caches to CScope.
  508. * Optimized CSeqVector().
  509. * Added serveral variants of CBioseqHandle::GetSeqVector().
  510. * Tried to optimize annotations iterator (not much success).
  511. * Rewritten CHandleRange and CHandleRangeMap classes to avoid sorting of list.
  512. *
  513. * Revision 1.14  2002/09/13 15:20:30  dicuccio
  514. * Fix memory leak (static deleted before termination).
  515. *
  516. * Revision 1.13  2002/09/11 16:08:26  dicuccio
  517. * Fixed memory leak in x_PrepareAlign().
  518. *
  519. * Revision 1.12  2002/09/03 17:45:45  ucko
  520. * Avoid overrunning alignment data when the claimed dimensions are too high.
  521. *
  522. * Revision 1.11  2002/07/25 15:01:51  grichenk
  523. * Replaced non-const GetXXX() with SetXXX()
  524. *
  525. * Revision 1.10  2002/07/08 20:51:00  grichenk
  526. * Moved log to the end of file
  527. * Replaced static mutex (in CScope, CDataSource) with the mutex
  528. * pool. Redesigned CDataSource data locking.
  529. *
  530. * Revision 1.9  2002/07/01 15:31:57  grichenk
  531. * Fixed 'enumeration value e_not_set...' warning
  532. *
  533. * Revision 1.8  2002/05/29 21:21:13  gouriano
  534. * added debug dump
  535. *
  536. * Revision 1.7  2002/05/24 14:57:12  grichenk
  537. * SerialAssign<>() -> CSerialObject::Assign()
  538. *
  539. * Revision 1.6  2002/05/03 21:28:08  ucko
  540. * Introduce T(Signed)SeqPos.
  541. *
  542. * Revision 1.5  2002/04/05 21:26:19  grichenk
  543. * Enabled iteration over annotations defined on segments of a
  544. * delta-sequence.
  545. *
  546. * Revision 1.4  2002/02/21 19:27:04  grichenk
  547. * Rearranged includes. Added scope history. Added searching for the
  548. * best seq-id match in data sources and scopes. Updated tests.
  549. *
  550. * Revision 1.3  2002/01/23 21:59:31  grichenk
  551. * Redesigned seq-id handles and mapper
  552. *
  553. * Revision 1.2  2002/01/16 16:25:56  gouriano
  554. * restructured objmgr
  555. *
  556. * Revision 1.1  2002/01/11 19:06:16  gouriano
  557. * restructured objmgr
  558. *
  559. *
  560. * ===========================================================================
  561. */