00001 #ifndef BIOSEQ_HANDLE__HPP
00002 #define BIOSEQ_HANDLE__HPP
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #include <corelib/ncbistd.hpp>
00036
00037 #include <objects/seqloc/Na_strand.hpp>
00038 #include <objects/seqset/Bioseq_set.hpp>
00039 #include <objects/seq/Seq_inst.hpp>
00040
00041 #include <objects/seq/seq_id_handle.hpp>
00042 #include <objmgr/tse_handle.hpp>
00043
00044 BEGIN_NCBI_SCOPE
00045 BEGIN_SCOPE(objects)
00046
00047
00048
00049
00050
00051
00052
00053
00054 class CDataSource;
00055 class CSeqMap;
00056 class CSeqVector;
00057 class CScope;
00058 class CSeq_id;
00059 class CSeq_loc;
00060 class CBioseq_Info;
00061 class CSeq_descr;
00062 class CSeqdesc;
00063 class CTSE_Info;
00064 class CSeq_entry;
00065 class CSeq_annot;
00066 class CSynonymsSet;
00067 class CBioseq_ScopeInfo;
00068 class CSeq_id_ScopeInfo;
00069 class CTSE_Lock;
00070
00071 class CBioseq_Handle;
00072 class CBioseq_set_Handle;
00073 class CSeq_annot_Handle;
00074 class CSeq_entry_Handle;
00075 class CBioseq_EditHandle;
00076 class CBioseq_set_EditHandle;
00077 class CSeq_annot_EditHandle;
00078 class CSeq_entry_EditHandle;
00079 class CBioObjectId;
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090 class CBioseq_Handle
00091 {
00092 public:
00093
00094 CBioseq_Handle(void);
00095
00096
00097 void Reset(void);
00098
00099
00100 CScope& GetScope(void) const;
00101
00102
00103
00104 CConstRef<CSeq_id> GetSeqId(void) const;
00105
00106 CConstRef<CSeq_id> GetInitialSeqIdOrNull(void) const;
00107
00108
00109 const CBioObjectId& GetBioObjectId(void) const;
00110
00111
00112
00113 const CSeq_id_Handle& GetSeq_id_Handle(void) const;
00114
00115
00116
00117 CSeq_id_Handle GetAccessSeq_id_Handle(void) const;
00118
00119
00120 enum EBioseqStateFlags {
00121 fState_none = 0,
00122 fState_suppress_temp = 1 << 0,
00123 fState_suppress_perm = 1 << 1,
00124 fState_suppress = fState_suppress_temp |
00125 fState_suppress_perm,
00126 fState_dead = 1 << 2,
00127 fState_confidential = 1 << 3,
00128 fState_withdrawn = 1 << 4,
00129 fState_no_data = 1 << 5,
00130 fState_conflict = 1 << 6,
00131 fState_not_found = 1 << 7,
00132 fState_other_error = 1 << 8
00133 };
00134 typedef int TBioseqStateFlags;
00135
00136
00137
00138 TBioseqStateFlags GetState(void) const;
00139 bool State_SuppressedTemp(void) const;
00140 bool State_SuppressedPerm(void) const;
00141 bool State_Suppressed(void) const;
00142 bool State_Confidential(void) const;
00143 bool State_Dead(void) const;
00144 bool State_Withdrawn(void) const;
00145 bool State_NoData(void) const;
00146 bool State_Conflict(void) const;
00147 bool State_NotFound(void) const;
00148
00149
00150 bool IsSynonym(const CSeq_id& id) const;
00151 bool IsSynonym(const CSeq_id_Handle& idh) const;
00152
00153
00154 CConstRef<CSynonymsSet> GetSynonyms(void) const;
00155
00156
00157
00158
00159
00160 CSeq_entry_Handle GetParentEntry(void) const;
00161
00162
00163 CBioseq_set_Handle GetParentBioseq_set(void) const;
00164
00165
00166
00167
00168
00169 CSeq_entry_Handle GetSeq_entry_Handle(void) const;
00170
00171
00172 CSeq_entry_Handle GetTopLevelEntry(void) const;
00173
00174
00175 CBioseq_EditHandle GetEditHandle(void) const;
00176
00177
00178 typedef CConstRef<CBioseq> TBioseqCore;
00179
00180
00181 TBioseqCore GetBioseqCore(void) const;
00182
00183
00184 CConstRef<CBioseq> GetCompleteBioseq(void) const;
00185
00186
00187 typedef CBioseq TObject;
00188 CConstRef<TObject> GetCompleteObject(void) const;
00189 CConstRef<TObject> GetObjectCore(void) const;
00190
00191
00192
00193
00194 typedef vector<CSeq_id_Handle> TId;
00195 bool IsSetId(void) const;
00196 bool CanGetId(void) const;
00197 const TId& GetId(void) const;
00198
00199 typedef CSeq_descr TDescr;
00200 bool IsSetDescr(void) const;
00201 bool CanGetDescr(void) const;
00202 const TDescr& GetDescr(void) const;
00203
00204 typedef CSeq_inst TInst;
00205 bool IsSetInst(void) const;
00206 bool CanGetInst(void) const;
00207 const TInst& GetInst(void) const;
00208
00209 typedef TInst::TRepr TInst_Repr;
00210 bool IsSetInst_Repr(void) const;
00211 bool CanGetInst_Repr(void) const;
00212 TInst_Repr GetInst_Repr(void) const;
00213
00214 typedef TInst::TMol TInst_Mol;
00215 bool IsSetInst_Mol(void) const;
00216 bool CanGetInst_Mol(void) const;
00217 TInst_Mol GetInst_Mol(void) const;
00218
00219 typedef TInst::TLength TInst_Length;
00220 bool IsSetInst_Length(void) const;
00221 bool CanGetInst_Length(void) const;
00222 TInst_Length GetInst_Length(void) const;
00223 TSeqPos GetBioseqLength(void) const;
00224
00225 typedef TInst::TFuzz TInst_Fuzz;
00226 bool IsSetInst_Fuzz(void) const;
00227 bool CanGetInst_Fuzz(void) const;
00228 const TInst_Fuzz& GetInst_Fuzz(void) const;
00229
00230 typedef TInst::TTopology TInst_Topology;
00231 bool IsSetInst_Topology(void) const;
00232 bool CanGetInst_Topology(void) const;
00233 TInst_Topology GetInst_Topology(void) const;
00234
00235 typedef TInst::TStrand TInst_Strand;
00236 bool IsSetInst_Strand(void) const;
00237 bool CanGetInst_Strand(void) const;
00238 TInst_Strand GetInst_Strand(void) const;
00239
00240 typedef TInst::TSeq_data TInst_Seq_data;
00241 bool IsSetInst_Seq_data(void) const;
00242 bool CanGetInst_Seq_data(void) const;
00243 const TInst_Seq_data& GetInst_Seq_data(void) const;
00244
00245 typedef TInst::TExt TInst_Ext;
00246 bool IsSetInst_Ext(void) const;
00247 bool CanGetInst_Ext(void) const;
00248 const TInst_Ext& GetInst_Ext(void) const;
00249
00250 typedef TInst::THist TInst_Hist;
00251 bool IsSetInst_Hist(void) const;
00252 bool CanGetInst_Hist(void) const;
00253 const TInst_Hist& GetInst_Hist(void) const;
00254
00255 bool HasAnnots(void) const;
00256
00257
00258 typedef CSeq_inst::TMol TMol;
00259 TMol GetSequenceType(void) const;
00260 bool IsProtein(void) const;
00261 bool IsNucleotide(void) const;
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289 CSeq_entry_Handle GetComplexityLevel(CBioseq_set::EClass cls) const;
00290
00291
00292 CSeq_entry_Handle GetExactComplexityLevel(CBioseq_set::EClass cls) const;
00293
00294
00295 TMol GetBioseqMolType(void) const;
00296 bool IsNa(void) const;
00297 bool IsAa(void) const;
00298
00299
00300 const CSeqMap& GetSeqMap(void) const;
00301
00302
00303 enum EFindSegment {
00304 eFindSegment_NoLimit,
00305 eFindSegment_LimitTSE
00306 };
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321 bool ContainsSegment(const CSeq_id& id,
00322 size_t resolve_depth = kMax_Int,
00323 EFindSegment limit_flag = eFindSegment_NoLimit) const;
00324 bool ContainsSegment(CSeq_id_Handle id,
00325 size_t resolve_depth = kMax_Int,
00326 EFindSegment limit_flag = eFindSegment_NoLimit) const;
00327 bool ContainsSegment(const CBioseq_Handle& part,
00328 size_t resolve_depth = kMax_Int,
00329 EFindSegment limit_flag = eFindSegment_NoLimit) const;
00330
00331
00332 enum EVectorCoding {
00333 eCoding_NotSet,
00334 eCoding_Ncbi,
00335 eCoding_Iupac
00336 };
00337 enum EVectorStrand {
00338 eStrand_Plus,
00339 eStrand_Minus
00340 };
00341
00342
00343 CSeqVector GetSeqVector(EVectorCoding coding,
00344 ENa_strand strand = eNa_strand_plus) const;
00345
00346 CSeqVector GetSeqVector(ENa_strand strand = eNa_strand_plus) const;
00347
00348 CSeqVector GetSeqVector(EVectorCoding coding, EVectorStrand strand) const;
00349
00350 CSeqVector GetSeqVector(EVectorStrand strand) const;
00351
00352
00353
00354
00355 CRef<CSeq_loc> GetRangeSeq_loc(TSeqPos start,
00356 TSeqPos stop,
00357 ENa_strand strand
00358 = eNa_strand_unknown) const;
00359
00360
00361 CRef<CSeq_loc> MapLocation(const CSeq_loc& loc) const;
00362
00363
00364
00365
00366
00367
00368
00369 bool operator== (const CBioseq_Handle& h) const;
00370
00371
00372
00373
00374
00375 bool operator!= (const CBioseq_Handle& h) const;
00376
00377
00378 bool operator< (const CBioseq_Handle& h) const;
00379
00380
00381
00382
00383
00384 DECLARE_OPERATOR_BOOL(m_Info.IsValid());
00385
00386
00387 bool IsRemoved(void) const;
00388
00389
00390 const CTSE_Handle& GetTSE_Handle(void) const;
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405 CBioseq_EditHandle CopyTo(const CSeq_entry_EditHandle& entry,
00406 int index = -1) const;
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418 CBioseq_EditHandle CopyTo(const CBioseq_set_EditHandle& seqset,
00419 int index = -1) const;
00420
00421
00422
00423
00424
00425
00426
00427
00428 CBioseq_EditHandle CopyToSeq(const CSeq_entry_EditHandle& entry) const;
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441 bool AddUsedBioseq(const CBioseq_Handle& bh) const;
00442
00443
00444
00445 enum EFeatureFetchPolicy {
00446 eFeatureFetchPolicy_default = 0,
00447 eFeatureFetchPolicy_only_near = 1
00448 };
00449 EFeatureFetchPolicy GetFeatureFetchPolicy(void) const;
00450
00451 protected:
00452 friend class CScope_Impl;
00453 friend class CSynonymsSet;
00454 friend class CSeq_entry_EditHandle;
00455
00456 typedef CBioseq_ScopeInfo TScopeInfo;
00457 typedef CScopeInfo_Ref<TScopeInfo> TLock;
00458
00459 CBioseq_Handle(const CSeq_id_Handle& id, const TScopeInfo& info);
00460 CBioseq_Handle(const CSeq_id_Handle& id, const TLock& lock);
00461
00462 CScope_Impl& x_GetScopeImpl(void) const;
00463 const CBioseq_ScopeInfo& x_GetScopeInfo(void) const;
00464
00465 CSeq_id_Handle m_Handle_Seq_id;
00466 TLock m_Info;
00467
00468 public:
00469 const CBioseq_Info& x_GetInfo(void) const;
00470 };
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480 class CBioseq_EditHandle : public CBioseq_Handle
00481 {
00482 public:
00483 CBioseq_EditHandle(void);
00484
00485
00486 explicit CBioseq_EditHandle(const CBioseq_Handle& h);
00487
00488
00489 CSeq_entry_EditHandle GetParentEntry(void) const;
00490
00491
00492
00493
00494
00495
00496 void ResetId(void) const;
00497 bool AddId(const CSeq_id_Handle& id) const;
00498 bool RemoveId(const CSeq_id_Handle& id) const;
00499
00500 void ResetDescr(void) const;
00501 void SetDescr(TDescr& v) const;
00502 TDescr& SetDescr(void) const;
00503 bool AddSeqdesc(CSeqdesc& d) const;
00504 CRef<CSeqdesc> RemoveSeqdesc(const CSeqdesc& d) const;
00505 void AddSeq_descr(TDescr& v) const;
00506
00507 void SetInst(TInst& v) const;
00508
00509 void SetInst_Repr(TInst_Repr v) const;
00510
00511 void SetInst_Mol(TInst_Mol v) const;
00512
00513 void SetInst_Length(TInst_Length v) const;
00514
00515 void SetInst_Fuzz(TInst_Fuzz& v) const;
00516
00517 void SetInst_Topology(TInst_Topology v) const;
00518
00519 void SetInst_Strand(TInst_Strand v) const;
00520
00521 void SetInst_Seq_data(TInst_Seq_data& v) const;
00522
00523 void SetInst_Ext(TInst_Ext& v) const;
00524
00525 void SetInst_Hist(TInst_Hist& v) const;
00526
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541 CSeq_annot_EditHandle AttachAnnot(CSeq_annot& annot) const;
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554 CSeq_annot_EditHandle CopyAnnot(const CSeq_annot_Handle& annot) const;
00555
00556
00557
00558
00559
00560
00561
00562
00563
00564
00565
00566
00567 CSeq_annot_EditHandle TakeAnnot(const CSeq_annot_EditHandle& annot) const;
00568
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579
00580
00581
00582
00583 CBioseq_EditHandle MoveTo(const CSeq_entry_EditHandle& entry,
00584 int index = -1) const;
00585
00586
00587
00588
00589
00590
00591
00592
00593
00594
00595
00596 CBioseq_EditHandle MoveTo(const CBioseq_set_EditHandle& seqset,
00597 int index = -1) const;
00598
00599
00600
00601
00602
00603
00604
00605
00606 CBioseq_EditHandle MoveToSeq(const CSeq_entry_EditHandle& entry) const;
00607
00608
00609 enum ERemoveMode {
00610 eRemoveSeq_entry,
00611 eKeepSeq_entry
00612 };
00613 void Remove(ERemoveMode mode = eRemoveSeq_entry) const;
00614
00615
00616 CSeqMap& SetSeqMap(void) const;
00617
00618 protected:
00619 friend class CScope_Impl;
00620
00621 CBioseq_EditHandle(const CSeq_id_Handle& id, TScopeInfo& info);
00622 CBioseq_EditHandle(const CSeq_id_Handle& id, const TLock& lock);
00623
00624 void x_Detach(void) const;
00625
00626 public:
00627 CBioseq_ScopeInfo& x_GetScopeInfo(void) const;
00628 CBioseq_Info& x_GetInfo(void) const;
00629
00630 public:
00631 void x_RealResetDescr(void) const;
00632 void x_RealSetDescr(TDescr& v) const;
00633 bool x_RealAddSeqdesc(CSeqdesc& d) const;
00634 CRef<CSeqdesc> x_RealRemoveSeqdesc(const CSeqdesc& d) const;
00635 void x_RealAddSeq_descr(TDescr& v) const;
00636
00637 void x_RealResetId(void) const;
00638 bool x_RealAddId(const CSeq_id_Handle& id) const;
00639 bool x_RealRemoveId(const CSeq_id_Handle& id) const;
00640
00641 void x_RealSetInst(TInst& v) const;
00642 void x_RealSetInst_Repr(TInst_Repr v) const;
00643 void x_RealSetInst_Mol(TInst_Mol v) const;
00644 void x_RealSetInst_Length(TInst_Length v) const;
00645 void x_RealSetInst_Fuzz(TInst_Fuzz& v) const;
00646 void x_RealSetInst_Topology(TInst_Topology v) const;
00647 void x_RealSetInst_Strand(TInst_Strand v) const;
00648 void x_RealSetInst_Seq_data(TInst_Seq_data& v) const;
00649 void x_RealSetInst_Ext(TInst_Ext& v) const;
00650 void x_RealSetInst_Hist(TInst_Hist& v) const;
00651 void x_RealResetInst() const;
00652 void x_RealResetInst_Repr() const;
00653 void x_RealResetInst_Mol() const;
00654 void x_RealResetInst_Length() const;
00655 void x_RealResetInst_Fuzz() const;
00656 void x_RealResetInst_Topology() const;
00657 void x_RealResetInst_Strand() const;
00658 void x_RealResetInst_Seq_data() const;
00659 void x_RealResetInst_Ext() const;
00660 void x_RealResetInst_Hist() const;
00661
00662 };
00663
00664
00665
00666
00667
00668
00669
00670 inline
00671 CBioseq_Handle::CBioseq_Handle(void)
00672 {
00673 }
00674
00675
00676 inline
00677 bool CBioseq_Handle::State_SuppressedTemp(void) const
00678 {
00679 return (GetState() & fState_suppress_temp) != 0;
00680 }
00681
00682
00683 inline
00684 bool CBioseq_Handle::State_SuppressedPerm(void) const
00685 {
00686 return (GetState() & fState_suppress_perm) != 0;
00687 }
00688
00689
00690 inline
00691 bool CBioseq_Handle::State_Suppressed(void) const
00692 {
00693 return (GetState() & fState_suppress) != 0;
00694 }
00695
00696
00697 inline
00698 bool CBioseq_Handle::State_Confidential(void) const
00699 {
00700 return (GetState() & fState_confidential) != 0;
00701 }
00702
00703
00704 inline
00705 bool CBioseq_Handle::State_Dead(void) const
00706 {
00707 return (GetState() & fState_dead) != 0;
00708 }
00709
00710
00711 inline
00712 bool CBioseq_Handle::State_Withdrawn(void) const
00713 {
00714 return (GetState() & fState_withdrawn) != 0;
00715 }
00716
00717
00718 inline
00719 bool CBioseq_Handle::State_NoData(void) const
00720 {
00721 return (GetState() & fState_no_data) != 0;
00722 }
00723
00724
00725 inline
00726 bool CBioseq_Handle::State_Conflict(void) const
00727 {
00728 return (GetState() & fState_conflict) != 0;
00729 }
00730
00731
00732 inline
00733 bool CBioseq_Handle::State_NotFound(void) const
00734 {
00735 return (GetState() & fState_not_found) != 0;
00736 }
00737
00738
00739 inline
00740 const CTSE_Handle& CBioseq_Handle::GetTSE_Handle(void) const
00741 {
00742 return m_Info.GetObject().GetTSE_Handle();
00743 }
00744
00745
00746 inline
00747 bool CBioseq_Handle::IsRemoved(void) const
00748 {
00749 return m_Info && m_Info.GetPointerOrNull()->IsDetached();
00750 }
00751
00752
00753 inline
00754 const CSeq_id_Handle& CBioseq_Handle::GetSeq_id_Handle(void) const
00755 {
00756 return m_Handle_Seq_id;
00757 }
00758
00759
00760 inline
00761 CScope& CBioseq_Handle::GetScope(void) const
00762 {
00763 return GetTSE_Handle().GetScope();
00764 }
00765
00766
00767 inline
00768 CScope_Impl& CBioseq_Handle::x_GetScopeImpl(void) const
00769 {
00770 return GetTSE_Handle().x_GetScopeImpl();
00771 }
00772
00773
00774 inline
00775 bool CBioseq_Handle::operator==(const CBioseq_Handle& h) const
00776 {
00777
00778 return m_Info == h.m_Info;
00779 }
00780
00781
00782 inline
00783 bool CBioseq_Handle::operator<(const CBioseq_Handle& h) const
00784 {
00785 return m_Info < h.m_Info;
00786 }
00787
00788
00789 inline
00790 bool CBioseq_Handle::operator!=(const CBioseq_Handle& h) const
00791 {
00792 return m_Info != h.m_Info;
00793 }
00794
00795
00796 inline
00797 CBioseq_ScopeInfo& CBioseq_EditHandle::x_GetScopeInfo(void) const
00798 {
00799 return const_cast<CBioseq_ScopeInfo&>(CBioseq_Handle::x_GetScopeInfo());
00800 }
00801
00802
00803 inline
00804 CBioseq_Info& CBioseq_EditHandle::x_GetInfo(void) const
00805 {
00806 return const_cast<CBioseq_Info&>(CBioseq_Handle::x_GetInfo());
00807 }
00808
00809
00810 inline
00811 CConstRef<CBioseq> CBioseq_Handle::GetCompleteObject(void) const
00812 {
00813 return GetCompleteBioseq();
00814 }
00815
00816
00817 inline
00818 CConstRef<CBioseq> CBioseq_Handle::GetObjectCore(void) const
00819 {
00820 return GetBioseqCore();
00821 }
00822
00823
00824 inline
00825 CBioseq_Handle::TMol CBioseq_Handle::GetSequenceType(void) const
00826 {
00827 return GetInst_Mol();
00828 }
00829
00830
00831 inline
00832 bool CBioseq_Handle::IsProtein(void) const
00833 {
00834 return CSeq_inst::IsAa(GetSequenceType());
00835 }
00836
00837
00838 inline
00839 bool CBioseq_Handle::IsNucleotide(void) const
00840 {
00841 return CSeq_inst::IsNa(GetSequenceType());
00842 }
00843
00844
00845
00846
00847
00848 END_SCOPE(objects)
00849 END_NCBI_SCOPE
00850
00851 #endif // BIOSEQ_HANDLE__HPP
00852
00853