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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: bioseq_handle.cpp,v $
  4.  * PRODUCTION Revision 1000.5  2004/06/01 19:22:54  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.66
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: bioseq_handle.cpp,v 1000.5 2004/06/01 19:22:54 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/bioseq_handle.hpp>
  41. #include <objmgr/seq_annot_handle.hpp>
  42. #include <objmgr/seq_entry_handle.hpp>
  43. #include <objmgr/impl/scope_impl.hpp>
  44. #include <objmgr/seq_vector.hpp>
  45. #include <objmgr/seqmatch_info.hpp>
  46. #include <objmgr/impl/data_source.hpp>
  47. #include <objmgr/impl/tse_info.hpp>
  48. #include <objmgr/impl/handle_range.hpp>
  49. #include <objmgr/impl/bioseq_info.hpp>
  50. #include <objmgr/impl/seq_entry_info.hpp>
  51. #include <objmgr/impl/bioseq_set_info.hpp>
  52. #include <objmgr/impl/tse_info.hpp>
  53. #include <objmgr/impl/synonyms.hpp>
  54. #include <objmgr/seq_loc_mapper.hpp>
  55. #include <objects/general/Object_id.hpp>
  56. #include <objects/seqloc/Seq_loc.hpp>
  57. #include <objects/seqloc/Seq_interval.hpp>
  58. #include <objects/seqloc/Seq_point.hpp>
  59. #include <objects/seqloc/Seq_id.hpp>
  60. #include <objects/seq/Bioseq.hpp>
  61. #include <objects/seqset/Seq_entry.hpp>
  62. BEGIN_NCBI_SCOPE
  63. BEGIN_SCOPE(objects)
  64. /////////////////////////////////////////////////////////////////////////////
  65. // CBioseq_Handle
  66. /////////////////////////////////////////////////////////////////////////////
  67. CBioseq_Handle::CBioseq_Handle(const CSeq_id_Handle& id,
  68.                                CBioseq_ScopeInfo* bioseq_info)
  69.     : m_Seq_id(id),
  70.       m_Bioseq_Info(bioseq_info)
  71. {
  72. }
  73. bool CBioseq_Handle::operator==(const CBioseq_Handle& h) const
  74. {
  75.     if ( m_Scope != m_Scope ) {
  76.         return false;
  77.     }
  78.     if ( *this && h )
  79.         return &x_GetInfo() == &h.x_GetInfo();
  80.     // Compare by id key
  81.     return GetSeq_id_Handle() == h.GetSeq_id_Handle();
  82. }
  83. bool CBioseq_Handle::operator< (const CBioseq_Handle& h) const
  84. {
  85.     if ( m_Scope != h.m_Scope ) {
  86.         return m_Scope < h.m_Scope;
  87.     }
  88.     if ( *this && h )
  89.         return &x_GetInfo() < &h.x_GetInfo();
  90.     return GetSeq_id_Handle() < h.GetSeq_id_Handle();
  91. }
  92. const CBioseq_Info& CBioseq_Handle::x_GetInfo(void) const
  93. {
  94.     return x_GetScopeInfo().GetBioseq_Info();
  95. }
  96. CConstRef<CSeq_id> CBioseq_Handle::GetSeqId(void) const
  97. {
  98.     return GetSeq_id_Handle().GetSeqIdOrNull();
  99. }
  100. CConstRef<CBioseq> CBioseq_Handle::GetCompleteBioseq(void) const
  101. {
  102.     return x_GetInfo().GetCompleteBioseq();
  103. }
  104. const CBioseq& CBioseq_Handle::GetBioseq(void) const
  105. {
  106.     ERR_POST_ONCE(Warning<<
  107.                   "CBioseq_Handle::GetBioseq() is deprecated, "
  108.                   "use GetCompleteBioseq() or GetBioseqCore().");
  109.     return *GetCompleteBioseq();
  110. }
  111. const CSeq_entry& CBioseq_Handle::GetTopLevelSeqEntry(void) const
  112. {
  113.     ERR_POST_ONCE(Warning<<
  114.                   "CBioseq_Handle::GetTopLevelSeqEntry() is deprecated, "
  115.                   "use GetTopLevelEntry().");
  116.     return *GetTopLevelEntry().GetCompleteSeq_entry();
  117. }
  118. CBioseq_Handle::TBioseqCore CBioseq_Handle::GetBioseqCore(void) const
  119. {
  120.     return x_GetInfo().GetBioseqCore();
  121. }
  122. CBioseq_EditHandle CBioseq_Handle::GetEditHandle(void) const
  123. {
  124.     return m_Scope->GetEditHandle(*this);
  125. }
  126. /////////////////////////////////////////////////////////////////////////////
  127. // Bioseq members
  128. bool CBioseq_Handle::IsSetId(void) const
  129. {
  130.     return x_GetInfo().IsSetId();
  131. }
  132. bool CBioseq_Handle::CanGetId(void) const
  133. {
  134.     return bool(m_Bioseq_Info)  &&  x_GetInfo().CanGetId();
  135. }
  136. const CBioseq_Handle::TId& CBioseq_Handle::GetId(void) const
  137. {
  138.     return x_GetInfo().GetId();
  139. }
  140. bool CBioseq_Handle::IsSetDescr(void) const
  141. {
  142.     return x_GetInfo().IsSetDescr();
  143. }
  144. bool CBioseq_Handle::CanGetDescr(void) const
  145. {
  146.     return bool(m_Bioseq_Info)  &&  x_GetInfo().CanGetDescr();
  147. }
  148. const CSeq_descr& CBioseq_Handle::GetDescr(void) const
  149. {
  150.     return x_GetInfo().GetDescr();
  151. }
  152. bool CBioseq_Handle::IsSetInst(void) const
  153. {
  154.     return x_GetInfo().IsSetInst();
  155. }
  156. bool CBioseq_Handle::CanGetInst(void) const
  157. {
  158.     return bool(m_Bioseq_Info)  &&  x_GetInfo().CanGetInst();
  159. }
  160. const CSeq_inst& CBioseq_Handle::GetInst(void) const
  161. {
  162.     return x_GetInfo().GetInst();
  163. }
  164. bool CBioseq_Handle::IsSetInst_Repr(void) const
  165. {
  166.     return x_GetInfo().IsSetInst_Repr();
  167. }
  168. bool CBioseq_Handle::CanGetInst_Repr(void) const
  169. {
  170.     return bool(m_Bioseq_Info)  &&  x_GetInfo().CanGetInst_Repr();
  171. }
  172. CBioseq_Handle::TInst_Repr CBioseq_Handle::GetInst_Repr(void) const
  173. {
  174.     return x_GetInfo().GetInst_Repr();
  175. }
  176. bool CBioseq_Handle::IsSetInst_Mol(void) const
  177. {
  178.     return x_GetInfo().IsSetInst_Mol();
  179. }
  180. bool CBioseq_Handle::CanGetInst_Mol(void) const
  181. {
  182.     return bool(m_Bioseq_Info)  &&  x_GetInfo().CanGetInst_Mol();
  183. }
  184. CBioseq_Handle::TInst_Mol CBioseq_Handle::GetInst_Mol(void) const
  185. {
  186.     return x_GetInfo().GetInst_Mol();
  187. }
  188. bool CBioseq_Handle::IsSetInst_Length(void) const
  189. {
  190.     return x_GetInfo().IsSetInst_Length();
  191. }
  192. bool CBioseq_Handle::CanGetInst_Length(void) const
  193. {
  194.     return bool(m_Bioseq_Info)  &&  x_GetInfo().CanGetInst_Length();
  195. }
  196. CBioseq_Handle::TInst_Length CBioseq_Handle::GetInst_Length(void) const
  197. {
  198.     return x_GetInfo().GetInst_Length();
  199. }
  200. TSeqPos CBioseq_Handle::GetBioseqLength(void) const
  201. {
  202.     return x_GetInfo().GetBioseqLength();
  203. }
  204. bool CBioseq_Handle::IsSetInst_Fuzz(void) const
  205. {
  206.     return x_GetInfo().IsSetInst_Fuzz();
  207. }
  208. bool CBioseq_Handle::CanGetInst_Fuzz(void) const
  209. {
  210.     return bool(m_Bioseq_Info)  &&  x_GetInfo().CanGetInst_Fuzz();
  211. }
  212. const CBioseq_Handle::TInst_Fuzz& CBioseq_Handle::GetInst_Fuzz(void) const
  213. {
  214.     return x_GetInfo().GetInst_Fuzz();
  215. }
  216. bool CBioseq_Handle::IsSetInst_Topology(void) const
  217. {
  218.     return x_GetInfo().IsSetInst_Topology();
  219. }
  220. bool CBioseq_Handle::CanGetInst_Topology(void) const
  221. {
  222.     return bool(m_Bioseq_Info)  &&  x_GetInfo().CanGetInst_Topology();
  223. }
  224. CBioseq_Handle::TInst_Topology CBioseq_Handle::GetInst_Topology(void) const
  225. {
  226.     return x_GetInfo().GetInst_Topology();
  227. }
  228. bool CBioseq_Handle::IsSetInst_Strand(void) const
  229. {
  230.     return x_GetInfo().IsSetInst_Strand();
  231. }
  232. bool CBioseq_Handle::CanGetInst_Strand(void) const
  233. {
  234.     return bool(m_Bioseq_Info)  &&  x_GetInfo().CanGetInst_Strand();
  235. }
  236. CBioseq_Handle::TInst_Strand CBioseq_Handle::GetInst_Strand(void) const
  237. {
  238.     return x_GetInfo().GetInst_Strand();
  239. }
  240. bool CBioseq_Handle::IsSetInst_Seq_data(void) const
  241. {
  242.     return x_GetInfo().IsSetInst_Seq_data();
  243. }
  244. bool CBioseq_Handle::CanGetInst_Seq_data(void) const
  245. {
  246.     return bool(m_Bioseq_Info)  &&  x_GetInfo().CanGetInst_Seq_data();
  247. }
  248. const CBioseq_Handle::TInst_Seq_data&
  249. CBioseq_Handle::GetInst_Seq_data(void) const
  250. {
  251.     return x_GetInfo().GetInst_Seq_data();
  252. }
  253. bool CBioseq_Handle::IsSetInst_Ext(void) const
  254. {
  255.     return x_GetInfo().IsSetInst_Ext();
  256. }
  257. bool CBioseq_Handle::CanGetInst_Ext(void) const
  258. {
  259.     return bool(m_Bioseq_Info)  &&  x_GetInfo().CanGetInst_Ext();
  260. }
  261. const CBioseq_Handle::TInst_Ext& CBioseq_Handle::GetInst_Ext(void) const
  262. {
  263.     return x_GetInfo().GetInst_Ext();
  264. }
  265. bool CBioseq_Handle::IsSetInst_Hist(void) const
  266. {
  267.     return x_GetInfo().IsSetInst_Hist();
  268. }
  269. bool CBioseq_Handle::CanGetInst_Hist(void) const
  270. {
  271.     return bool(m_Bioseq_Info)  &&  x_GetInfo().CanGetInst_Hist();
  272. }
  273. const CBioseq_Handle::TInst_Hist& CBioseq_Handle::GetInst_Hist(void) const
  274. {
  275.     return x_GetInfo().GetInst_Hist();
  276. }
  277. bool CBioseq_Handle::HasAnnots(void) const
  278. {
  279.     return x_GetInfo().HasAnnots();
  280. }
  281. // end of Bioseq members
  282. /////////////////////////////////////////////////////////////////////////////
  283. CSeq_inst::TMol CBioseq_Handle::GetBioseqMolType(void) const
  284. {
  285.     return x_GetInfo().GetInst_Mol();
  286. }
  287. const CSeqMap& CBioseq_Handle::GetSeqMap(void) const
  288. {
  289.     return x_GetInfo().GetSeqMap();
  290. }
  291. CSeqVector CBioseq_Handle::GetSeqVector(EVectorCoding coding,
  292.                                         ENa_strand strand) const
  293. {
  294.     return CSeqVector(GetSeqMap(), GetScope(), coding, strand);
  295. }
  296. CSeqVector CBioseq_Handle::GetSeqVector(ENa_strand strand) const
  297. {
  298.     return CSeqVector(GetSeqMap(), GetScope(), eCoding_Ncbi, strand);
  299. }
  300. CSeqVector CBioseq_Handle::GetSeqVector(EVectorCoding coding,
  301.                                         EVectorStrand strand) const
  302. {
  303.     return CSeqVector(GetSeqMap(), GetScope(), coding,
  304.                       strand == eStrand_Minus?
  305.                       eNa_strand_minus: eNa_strand_plus);
  306. }
  307. CSeqVector CBioseq_Handle::GetSeqVector(EVectorStrand strand) const
  308. {
  309.     return CSeqVector(GetSeqMap(), GetScope(), eCoding_Ncbi,
  310.                       strand == eStrand_Minus?
  311.                       eNa_strand_minus: eNa_strand_plus);
  312. }
  313. CConstRef<CSynonymsSet> CBioseq_Handle::GetSynonyms(void) const
  314. {
  315.     if ( !*this ) {
  316.         return CConstRef<CSynonymsSet>();
  317.     }
  318.     return GetScope().GetSynonyms(*this);
  319. }
  320. bool CBioseq_Handle::IsSynonym(const CSeq_id& id) const
  321. {
  322.     CConstRef<CSynonymsSet> syns = GetSynonyms();
  323.     return bool(syns) && syns->ContainsSynonym(CSeq_id_Handle::GetHandle(id));
  324. }
  325. CSeqVector CBioseq_Handle::GetSequenceView(const CSeq_loc& location,
  326.                                            ESequenceViewMode mode,
  327.                                            EVectorCoding coding,
  328.                                            ENa_strand strand) const
  329. {
  330.     if ( mode != eViewConstructed )
  331.         strand = eNa_strand_unknown;
  332.     return CSeqVector(GetSeqMapByLocation(location, mode), GetScope(),
  333.                       coding, strand);
  334. }
  335. CConstRef<CSeqMap>
  336. CBioseq_Handle::GetSeqMapByLocation(const CSeq_loc& loc,
  337.                                     ESequenceViewMode mode) const
  338. {
  339.     CConstRef<CSeqMap> ret;
  340.     if ( mode == eViewConstructed ) {
  341.         ret = CSeqMap::CreateSeqMapForSeq_loc(loc, &GetScope());
  342.     }
  343.     else {
  344.         // Parse the location
  345.         CHandleRange rlist;      // all intervals pointing to the sequence
  346.         CSeq_loc_CI loc_it(loc);
  347.         for ( ; loc_it; ++loc_it) {
  348.             if ( !IsSynonym(loc_it.GetSeq_id()) )
  349.                 continue;
  350.             rlist.AddRange(loc_it.GetRange(), loc_it.GetStrand());
  351.         }
  352.         // Make mode-dependent parsing of the range list
  353.         CHandleRange mode_rlist; // processed intervals (merged, excluded)
  354.         switch (mode) {
  355.         case eViewMerged:
  356.         {
  357.             // Merge intervals from "rlist"
  358.             ITERATE (CHandleRange, rit, rlist) {
  359.                 mode_rlist.MergeRange(rit->first, rit->second);
  360.             }
  361.             break;
  362.         }
  363.         case eViewExcluded:
  364.         {
  365.             // Exclude intervals from "rlist"
  366.             TSeqPos last_from = 0;
  367.             ITERATE (CHandleRange, rit, rlist) {
  368.                 if (last_from < rit->first.GetFrom()) {
  369.                     mode_rlist.MergeRange(
  370.                         CHandleRange::TRange(last_from, rit->first.GetFrom()-1),
  371.                         eNa_strand_unknown);
  372.                 }
  373.                 if ( !rit->first.IsWholeTo() ) {
  374.                     last_from = rit->first.GetTo()+1;
  375.                 }
  376.                 else {
  377.                     last_from = CHandleRange::TRange::GetWholeTo();
  378.                 }
  379.             }
  380.             TSeqPos total_length = GetSeqMap().GetLength(&GetScope());
  381.             if (last_from < total_length) {
  382.                 mode_rlist.MergeRange(
  383.                     CHandleRange::TRange(last_from, total_length-1),
  384.                     eNa_strand_unknown);
  385.             }
  386.             break;
  387.         }
  388.         default:
  389.             break;
  390.         }
  391.         // Convert ranges to seq-loc
  392.         CRef<CSeq_loc> view_loc(new CSeq_loc);
  393.         ITERATE (CHandleRange, rit, mode_rlist) {
  394.             CRef<CSeq_loc> seg_loc(new CSeq_loc);
  395.             CRef<CSeq_id> id(new CSeq_id);
  396.             id->Assign(*GetSeqId());
  397.             seg_loc->SetInt().SetId(*id);
  398.             seg_loc->SetInt().SetFrom(rit->first.GetFrom());
  399.             seg_loc->SetInt().SetTo(rit->first.GetTo());
  400.             view_loc->SetMix().Set().push_back(seg_loc);
  401.         }
  402.         ret = CSeqMap::CreateSeqMapForSeq_loc(*view_loc, &GetScope());
  403.     }
  404.     return ret;
  405. }
  406. CSeq_entry_Handle CBioseq_Handle::GetTopLevelEntry(void) const
  407. {
  408.     return CSeq_entry_Handle(GetScope(),
  409.                              x_GetInfo().GetTSE_Info());
  410. }
  411. CSeq_entry_Handle CBioseq_Handle::GetParentEntry(void) const
  412. {
  413.     return CSeq_entry_Handle(m_Scope,
  414.                              x_GetInfo().GetParentSeq_entry_Info());
  415. }
  416. CSeq_entry_Handle CBioseq_Handle::GetSeq_entry_Handle(void) const
  417. {
  418.     return GetParentEntry();
  419. }
  420. static int s_Complexity[] = {
  421.     0, // not-set (0)
  422.     3, // nuc-prot (1)
  423.     2, // segset (2)
  424.     2, // conset (3)
  425.     1, // parts (4)
  426.     1, // gibb (5)
  427.     1, // gi (6)
  428.     5, // genbank (7)
  429.     3, // pir (8)
  430.     4, // pub-set (9)
  431.     4, // equiv (10)
  432.     3, // swissprot (11)
  433.     3, // pdb-entry (12)
  434.     4, // mut-set (13)
  435.     4, // pop-set (14)
  436.     4, // phy-set (15)
  437.     4, // eco-set (16)
  438.     4, // gen-prod-set (17)
  439.     4, // wgs-set (18)
  440.     0, // other (255 - processed separately)
  441. };
  442. CSeq_entry_Handle
  443. CBioseq_Handle::GetComplexityLevel(CBioseq_set::EClass cls) const
  444. {
  445.     if (cls == CBioseq_set::eClass_other) {
  446.         // adjust 255 to the correct value
  447.         cls = CBioseq_set::EClass(sizeof(s_Complexity) - 1);
  448.     }
  449.     CSeq_entry_Handle last = GetParentEntry();
  450.     _ASSERT(last && last.IsSeq());
  451.     CSeq_entry_Handle e = last.GetParentEntry();
  452.     while ( e ) {
  453.         _ASSERT(e.IsSet());
  454.         // Found good level
  455.         if ( last.IsSet()  &&
  456.              s_Complexity[last.GetSet().GetClass()] == s_Complexity[cls] )
  457.             break;
  458.         // Gone too high
  459.         if ( s_Complexity[e.GetSet().GetClass()] > s_Complexity[cls] ) {
  460.             break;
  461.         }
  462.         // Go up one level
  463.         last = e;
  464.         e = e.GetParentEntry();
  465.     }
  466.     return last;
  467. }
  468. CSeq_entry_Handle
  469. CBioseq_Handle::GetExactComplexityLevel(CBioseq_set::EClass cls) const
  470. {
  471.     CSeq_entry_Handle ret = GetComplexityLevel(cls);
  472.     if ( ret  &&  
  473.          (!ret.IsSet()  ||  !ret.GetSet().IsSetClass()  ||
  474.          ret.GetSet().GetClass() != cls) ) {
  475.         ret.Reset();
  476.     }
  477.     return ret;
  478. }
  479. CRef<CSeq_loc> CBioseq_Handle::MapLocation(const CSeq_loc& loc) const
  480. {
  481.     CSeq_loc_Mapper mapper(*this);
  482.     return mapper.Map(loc);
  483. }
  484. CBioseq_EditHandle
  485. CBioseq_Handle::CopyTo(const CSeq_entry_EditHandle& entry,
  486.                        int index) const
  487. {
  488.     return entry.CopyBioseq(*this, index);
  489. }
  490. CBioseq_EditHandle
  491. CBioseq_Handle::CopyTo(const CBioseq_set_EditHandle& seqset,
  492.                        int index) const
  493. {
  494.     return seqset.CopyBioseq(*this, index);
  495. }
  496. CBioseq_EditHandle
  497. CBioseq_Handle::CopyToSeq(const CSeq_entry_EditHandle& entry) const
  498. {
  499.     return entry.CopySeq(*this);
  500. }
  501. /////////////////////////////////////////////////////////////////////////////
  502. // CBioseq_EditHandle
  503. /////////////////////////////////////////////////////////////////////////////
  504. CBioseq_EditHandle::CBioseq_EditHandle(void)
  505. {
  506. }
  507. CBioseq_EditHandle::CBioseq_EditHandle(const CBioseq_Handle& h)
  508.     : CBioseq_Handle(h)
  509. {
  510. }
  511. CSeq_entry_EditHandle CBioseq_EditHandle::GetParentEntry(void) const
  512. {
  513.     return CSeq_entry_EditHandle(m_Scope,
  514.                                  x_GetInfo().GetParentSeq_entry_Info());
  515. }
  516. CSeq_annot_EditHandle
  517. CBioseq_EditHandle::AttachAnnot(const CSeq_annot& annot) const
  518. {
  519.     return GetParentEntry().AttachAnnot(annot);
  520. }
  521. CSeq_annot_EditHandle
  522. CBioseq_EditHandle::CopyAnnot(const CSeq_annot_Handle& annot) const
  523. {
  524.     return GetParentEntry().CopyAnnot(annot);
  525. }
  526. CSeq_annot_EditHandle
  527. CBioseq_EditHandle::TakeAnnot(const CSeq_annot_EditHandle& annot) const
  528. {
  529.     return GetParentEntry().TakeAnnot(annot);
  530. }
  531. CBioseq_EditHandle
  532. CBioseq_EditHandle::MoveTo(const CSeq_entry_EditHandle& entry,
  533.                            int index) const
  534. {
  535.     return entry.TakeBioseq(*this, index);
  536. }
  537. CBioseq_EditHandle
  538. CBioseq_EditHandle::MoveTo(const CBioseq_set_EditHandle& seqset,
  539.                                 int index) const
  540. {
  541.     return seqset.TakeBioseq(*this, index);
  542. }
  543. CBioseq_EditHandle
  544. CBioseq_EditHandle::MoveToSeq(const CSeq_entry_EditHandle& entry) const
  545. {
  546.     return entry.TakeSeq(*this);
  547. }
  548. void CBioseq_EditHandle::Remove(void) const
  549. {
  550.     m_Scope->RemoveBioseq(*this);
  551. }
  552. /////////////////////////////////////////////////////////////////////////////
  553. // Bioseq members
  554. void CBioseq_EditHandle::SetDescr(TDescr& v) const
  555. {
  556.     x_GetInfo().SetDescr(v);
  557. }
  558. void CBioseq_EditHandle::SetInst(TInst& v) const
  559. {
  560.     x_GetInfo().SetInst(v);
  561. }
  562. void CBioseq_EditHandle::SetInst_Repr(TInst_Repr v) const
  563. {
  564.     x_GetInfo().SetInst_Repr(v);
  565. }
  566. void CBioseq_EditHandle::SetInst_Mol(TInst_Mol v) const
  567. {
  568.     x_GetInfo().SetInst_Mol(v);
  569. }
  570. void CBioseq_EditHandle::SetInst_Length(TInst_Length v) const
  571. {
  572.     x_GetInfo().SetInst_Length(v);
  573. }
  574. void CBioseq_EditHandle::SetInst_Fuzz(TInst_Fuzz& v) const
  575. {
  576.     x_GetInfo().SetInst_Fuzz(v);
  577. }
  578. void CBioseq_EditHandle::SetInst_Topology(TInst_Topology v) const
  579. {
  580.     x_GetInfo().SetInst_Topology(v);
  581. }
  582. void CBioseq_EditHandle::SetInst_Strand(TInst_Strand v) const
  583. {
  584.     x_GetInfo().SetInst_Strand(v);
  585. }
  586. void CBioseq_EditHandle::SetInst_Seq_data(TInst_Seq_data& v) const
  587. {
  588.     x_GetInfo().SetInst_Seq_data(v);
  589. }
  590. void CBioseq_EditHandle::SetInst_Ext(TInst_Ext& v) const
  591. {
  592.     x_GetInfo().SetInst_Ext(v);
  593. }
  594. void CBioseq_EditHandle::SetInst_Hist(TInst_Hist& v) const
  595. {
  596.     x_GetInfo().SetInst_Hist(v);
  597. }
  598. // end of Bioseq members
  599. /////////////////////////////////////////////////////////////////////////////
  600. END_SCOPE(objects)
  601. END_NCBI_SCOPE
  602. /*
  603. * ---------------------------------------------------------------------------
  604. * $Log: bioseq_handle.cpp,v $
  605. * Revision 1000.5  2004/06/01 19:22:54  gouriano
  606. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.66
  607. *
  608. * Revision 1.66  2004/05/27 14:59:49  shomrat
  609. * Added CBioseq_EditHandle constructor implementation
  610. *
  611. * Revision 1.65  2004/05/26 14:29:20  grichenk
  612. * Redesigned CSeq_align_Mapper: preserve non-mapping intervals,
  613. * fixed strands handling, improved performance.
  614. *
  615. * Revision 1.64  2004/05/21 21:42:12  gorelenk
  616. * Added PCH ncbi_pch.hpp
  617. *
  618. * Revision 1.63  2004/05/10 18:26:37  grichenk
  619. * Fixed 'not used' warnings
  620. *
  621. * Revision 1.62  2004/05/06 17:32:37  grichenk
  622. * Added CanGetXXXX() methods
  623. *
  624. * Revision 1.61  2004/04/20 20:34:40  shomrat
  625. * fix GetExactComplexityLevel
  626. *
  627. * Revision 1.60  2004/03/31 19:54:08  vasilche
  628. * Fixed removal of bioseqs and bioseq-sets.
  629. *
  630. * Revision 1.59  2004/03/31 19:23:13  vasilche
  631. * Fixed scope in CBioseq_Handle::GetEditHandle().
  632. *
  633. * Revision 1.58  2004/03/29 20:13:06  vasilche
  634. * Implemented whole set of methods to modify Seq-entry object tree.
  635. * Added CBioseq_Handle::GetExactComplexityLevel().
  636. *
  637. * Revision 1.57  2004/03/25 19:27:44  vasilche
  638. * Implemented MoveTo and CopyTo methods of handles.
  639. *
  640. * Revision 1.56  2004/03/24 18:30:29  vasilche
  641. * Fixed edit API.
  642. * Every *_Info object has its own shallow copy of original object.
  643. *
  644. * Revision 1.55  2004/03/16 21:01:32  vasilche
  645. * Added methods to move Bioseq withing Seq-entry
  646. *
  647. * Revision 1.54  2004/03/16 15:47:27  vasilche
  648. * Added CBioseq_set_Handle and set of EditHandles
  649. *
  650. * Revision 1.53  2004/02/06 16:07:27  grichenk
  651. * Added CBioseq_Handle::GetSeq_entry_Handle()
  652. * Fixed MapLocation()
  653. *
  654. * Revision 1.52  2004/01/28 22:10:10  grichenk
  655. * Removed extra seq-loc initialization in MapLocation
  656. *
  657. * Revision 1.51  2004/01/23 16:14:47  grichenk
  658. * Implemented alignment mapping
  659. *
  660. * Revision 1.50  2004/01/22 20:10:40  vasilche
  661. * 1. Splitted ID2 specs to two parts.
  662. * ID2 now specifies only protocol.
  663. * Specification of ID2 split data is moved to seqsplit ASN module.
  664. * For now they are still reside in one resulting library as before - libid2.
  665. * As the result split specific headers are now in objects/seqsplit.
  666. * 2. Moved ID2 and ID1 specific code out of object manager.
  667. * Protocol is processed by corresponding readers.
  668. * ID2 split parsing is processed by ncbi_xreader library - used by all readers.
  669. * 3. Updated OBJMGR_LIBS correspondingly.
  670. *
  671. * Revision 1.49  2003/11/28 15:13:26  grichenk
  672. * Added CSeq_entry_Handle
  673. *
  674. * Revision 1.48  2003/11/26 17:55:57  vasilche
  675. * Implemented ID2 split in ID1 cache.
  676. * Fixed loading of splitted annotations.
  677. *
  678. * Revision 1.47  2003/11/10 18:12:43  grichenk
  679. * Added MapLocation()
  680. *
  681. * Revision 1.46  2003/09/30 16:22:02  vasilche
  682. * Updated internal object manager classes to be able to load ID2 data.
  683. * SNP blobs are loaded as ID2 split blobs - readers convert them automatically.
  684. * Scope caches results of requests for data to data loaders.
  685. * Optimized CSeq_id_Handle for gis.
  686. * Optimized bioseq lookup in scope.
  687. * Reduced object allocations in annotation iterators.
  688. * CScope is allowed to be destroyed before other objects using this scope are
  689. * deleted (feature iterators, bioseq handles etc).
  690. * Optimized lookup for matching Seq-ids in CSeq_id_Mapper.
  691. * Added 'adaptive' option to objmgr_demo application.
  692. *
  693. * Revision 1.45  2003/09/05 17:29:40  grichenk
  694. * Structurized Object Manager exceptions
  695. *
  696. * Revision 1.44  2003/08/27 14:27:19  vasilche
  697. * Use Reverse(ENa_strand) function.
  698. *
  699. * Revision 1.43  2003/07/15 16:14:08  grichenk
  700. * CBioseqHandle::IsSynonym() made public
  701. *
  702. * Revision 1.42  2003/06/24 14:22:46  vasilche
  703. * Fixed CSeqMap constructor from CSeq_loc.
  704. *
  705. * Revision 1.41  2003/06/19 18:23:45  vasilche
  706. * Added several CXxx_ScopeInfo classes for CScope related information.
  707. * CBioseq_Handle now uses reference to CBioseq_ScopeInfo.
  708. * Some fine tuning of locking in CScope.
  709. *
  710. * Revision 1.38  2003/05/20 15:44:37  vasilche
  711. * Fixed interaction of CDataSource and CDataLoader in multithreaded app.
  712. * Fixed some warnings on WorkShop.
  713. * Added workaround for memory leak on WorkShop.
  714. *
  715. * Revision 1.37  2003/04/29 19:51:13  vasilche
  716. * Fixed interaction of Data Loader garbage collector and TSE locking mechanism.
  717. * Made some typedefs more consistent.
  718. *
  719. * Revision 1.36  2003/04/24 16:12:38  vasilche
  720. * Object manager internal structures are splitted more straightforward.
  721. * Removed excessive header dependencies.
  722. *
  723. * Revision 1.35  2003/03/27 19:39:36  grichenk
  724. * +CBioseq_Handle::GetComplexityLevel()
  725. *
  726. * Revision 1.34  2003/03/18 14:52:59  grichenk
  727. * Removed obsolete methods, replaced seq-id with seq-id handle
  728. * where possible. Added argument to limit annotations update to
  729. * a single seq-entry.
  730. *
  731. * Revision 1.33  2003/03/12 20:09:33  grichenk
  732. * Redistributed members between CBioseq_Handle, CBioseq_Info and CTSE_Info
  733. *
  734. * Revision 1.32  2003/03/11 15:51:06  kuznets
  735. * iterate -> ITERATE
  736. *
  737. * Revision 1.31  2003/02/05 17:59:17  dicuccio
  738. * Moved formerly private headers into include/objects/objmgr/impl
  739. *
  740. * Revision 1.30  2003/01/29 22:03:46  grichenk
  741. * Use single static CSeq_id_Mapper instead of per-OM model.
  742. *
  743. * Revision 1.29  2003/01/23 19:33:57  vasilche
  744. * Commented out obsolete methods.
  745. * Use strand argument of CSeqVector instead of creation reversed seqmap.
  746. * Fixed ordering operators of CBioseqHandle to be consistent.
  747. *
  748. * Revision 1.28  2003/01/22 20:11:54  vasilche
  749. * Merged functionality of CSeqMapResolved_CI to CSeqMap_CI.
  750. * CSeqMap_CI now supports resolution and iteration over sequence range.
  751. * Added several caches to CScope.
  752. * Optimized CSeqVector().
  753. * Added serveral variants of CBioseqHandle::GetSeqVector().
  754. * Tried to optimize annotations iterator (not much success).
  755. * Rewritten CHandleRange and CHandleRangeMap classes to avoid sorting of list.
  756. *
  757. * Revision 1.27  2002/12/26 20:55:17  dicuccio
  758. * Moved seq_id_mapper.hpp, tse_info.hpp, and bioseq_info.hpp -> include/ tree
  759. *
  760. * Revision 1.26  2002/12/26 16:39:24  vasilche
  761. * Object manager class CSeqMap rewritten.
  762. *
  763. * Revision 1.25  2002/12/06 15:36:00  grichenk
  764. * Added overlap type for annot-iterators
  765. *
  766. * Revision 1.24  2002/11/08 22:15:51  grichenk
  767. * Added methods for removing/replacing annotations
  768. *
  769. * Revision 1.23  2002/11/08 19:43:35  grichenk
  770. * CConstRef<> constructor made explicit
  771. *
  772. * Revision 1.22  2002/09/03 21:27:01  grichenk
  773. * Replaced bool arguments in CSeqVector constructor and getters
  774. * with enums.
  775. *
  776. * Revision 1.21  2002/07/10 16:49:29  grichenk
  777. * Removed commented reference to old CDataSource mutex
  778. *
  779. * Revision 1.20  2002/07/08 20:51:01  grichenk
  780. * Moved log to the end of file
  781. * Replaced static mutex (in CScope, CDataSource) with the mutex
  782. * pool. Redesigned CDataSource data locking.
  783. *
  784. * Revision 1.19  2002/06/12 14:39:02  grichenk
  785. * Renamed enumerators
  786. *
  787. * Revision 1.18  2002/06/06 21:00:42  clausen
  788. * Added include for scope.hpp
  789. *
  790. * Revision 1.17  2002/05/31 17:53:00  grichenk
  791. * Optimized for better performance (CTSE_Info uses atomic counter,
  792. * delayed annotations indexing, no location convertions in
  793. * CAnnot_Types_CI if no references resolution is required etc.)
  794. *
  795. * Revision 1.16  2002/05/24 14:57:12  grichenk
  796. * SerialAssign<>() -> CSerialObject::Assign()
  797. *
  798. * Revision 1.15  2002/05/21 18:39:30  grichenk
  799. * CBioseq_Handle::GetResolvedSeqMap() -> CreateResolvedSeqMap()
  800. *
  801. * Revision 1.14  2002/05/06 03:28:46  vakatov
  802. * OM/OM1 renaming
  803. *
  804. * Revision 1.13  2002/05/03 21:28:08  ucko
  805. * Introduce T(Signed)SeqPos.
  806. *
  807. * Revision 1.12  2002/04/29 16:23:28  grichenk
  808. * GetSequenceView() reimplemented in CSeqVector.
  809. * CSeqVector optimized for better performance.
  810. *
  811. * Revision 1.11  2002/04/23 19:01:07  grichenk
  812. * Added optional flag to GetSeqVector() and GetSequenceView()
  813. * for switching to IUPAC encoding.
  814. *
  815. * Revision 1.10  2002/04/22 20:06:59  grichenk
  816. * +GetSequenceView(), +x_IsSynonym()
  817. *
  818. * Revision 1.9  2002/04/11 12:07:30  grichenk
  819. * Redesigned CAnnotTypes_CI to resolve segmented sequences correctly.
  820. *
  821. * Revision 1.8  2002/03/19 19:16:28  gouriano
  822. * added const qualifier to GetTitle and GetSeqVector
  823. *
  824. * Revision 1.7  2002/03/15 18:10:07  grichenk
  825. * Removed CRef<CSeq_id> from CSeq_id_Handle, added
  826. * key to seq-id map th CSeq_id_Mapper
  827. *
  828. * Revision 1.6  2002/03/04 15:08:44  grichenk
  829. * Improved CTSE_Info locks
  830. *
  831. * Revision 1.5  2002/02/21 19:27:05  grichenk
  832. * Rearranged includes. Added scope history. Added searching for the
  833. * best seq-id match in data sources and scopes. Updated tests.
  834. *
  835. * Revision 1.4  2002/01/28 19:44:49  gouriano
  836. * changed the interface of BioseqHandle: two functions moved from Scope
  837. *
  838. * Revision 1.3  2002/01/23 21:59:31  grichenk
  839. * Redesigned seq-id handles and mapper
  840. *
  841. * Revision 1.2  2002/01/16 16:25:56  gouriano
  842. * restructured objmgr
  843. *
  844. * Revision 1.1  2002/01/11 19:06:17  gouriano
  845. * restructured objmgr
  846. *
  847. *
  848. * ===========================================================================
  849. */