NCBI C++ ToolKit
csraread.hpp
Go to the documentation of this file.

Go to the SVN repository for this file.

1 #ifndef SRA__READER__SRA__CSRAREAD__HPP
2 #define SRA__READER__SRA__CSRAREAD__HPP
3 /* $Id: csraread.hpp 100044 2023-06-06 20:12:19Z vasilche $
4  * ===========================================================================
5  *
6  * PUBLIC DOMAIN NOTICE
7  * National Center for Biotechnology Information
8  *
9  * This software/database is a "United States Government Work" under the
10  * terms of the United States Copyright Act. It was written as part of
11  * the author's official duties as a United States Government employee and
12  * thus cannot be copyrighted. This software/database is freely available
13  * to the public for use. The National Library of Medicine and the U.S.
14  * Government have not placed any restriction on its use or reproduction.
15  *
16  * Although all reasonable efforts have been taken to ensure the accuracy
17  * and reliability of the software and data, the NLM and the U.S.
18  * Government do not and cannot warrant the performance or results that
19  * may be obtained by using this software or data. The NLM and the U.S.
20  * Government disclaim all warranties, express or implied, including
21  * warranties of performance, merchantability or fitness for any particular
22  * purpose.
23  *
24  * Please cite the author in any work or product based on this material.
25  *
26  * ===========================================================================
27  *
28  * Authors: Eugene Vasilchenko
29  *
30  * File Description:
31  * Access to cSRA files
32  *
33  */
34 
35 #include <corelib/ncbistd.hpp>
36 #include <corelib/ncbiobj.hpp>
37 #include <corelib/ncbimtx.hpp>
38 #include <corelib/atomic_util.hpp>
39 #include <util/range.hpp>
44 #include <map>
45 #include <list>
46 
47 //#include <insdc/sra.h> // for INSDC_coord_one, INSDC_coord_len, INSDC_read_filter
51 
54 
56 class CCSraAlignIterator;
58 class CSeq_entry;
59 class CSeq_annot;
60 class CSeq_align;
61 class CSeq_graph;
62 class CBioseq;
63 class CUser_object;
64 class CUser_field;
65 class IIdMapper;
66 
68 {
69  enum ERefIdType {
72  };
77  };
78  enum EAlignType {
79  fPrimaryAlign = 1<<0,
82  };
84 };
85 
86 
88 {
89 public:
90  CCSraDb_Impl(CVDBMgr& mgr, const string& csra_path,
91  IIdMapper* ref_id_mapper,
92  ERefIdType ref_id_type,
93  const string& sra_id_part);
94  virtual ~CCSraDb_Impl(void);
95 
96  // SRefInfo holds cached refseq information - ids, len, rows
97  struct SRefInfo {
98  string m_Name, m_SeqId;
99  mutable copyable_relaxed_atomic<TSeqPos> m_SeqLength; // actual len will be updated
103  return m_Seq_ids.front();
104  }
105  const CRef<CSeq_id>& GetMainSeq_id(void) const {
106  return m_Seq_ids.front();
107  }
109  return m_Seq_id_Handle;
110  }
111  TVDBRowId m_RowFirst, m_RowLast;
113  vector<TSeqPos> m_AlnOverStarts; // relative to m_RowFirst
114  };
115  typedef list<SRefInfo> TRefInfoList;
118 
119  const TRefInfoList& GetRefInfoList(void) const {
120  return m_RefList;
121  }
123  return m_RefMapByName;
124  }
126  return m_RefMapBySeq_id;
127  }
128 
129  TSeqPos GetRowSize(void) const {
130  return m_RowSize;
131  }
132 
133  typedef vector<string> TSpotGroups;
134  void GetSpotGroups(TSpotGroups& spot_groups);
135 
136  const string& GetCSraPath(void) const {
137  return m_CSraPath;
138  }
139 
140  const string& GetSraIdPart(void) const {
141  return m_SraIdPart;
142  }
143  void SetSraIdPart(const string& s) {
144  m_SraIdPart = s;
145  }
146 
147  CRef<CSeq_id> MakeShortReadId(TVDBRowId id1, INSDC_coord_one id2) const;
148  void SetShortReadId(string& str, TVDBRowId id1, INSDC_coord_one id2) const;
149 
150 protected:
151  friend class CCSraRefSeqIterator;
152  friend class CCSraAlignIterator;
154 
155  void x_CalcSeqLength(const SRefInfo& info);
156 
157  // SRefTableCursor is helper accessor structure for refseq table
158  struct SRefTableCursor;
159  // SAlnTableCursor is helper accessor structure for align table
160  struct SAlnTableCursor;
161  // SSeqTableCursor is helper accessor structure for sequence table
162  struct SSeqTableCursor;
163  friend struct SSeqTableCursor;
164 
165  // get table accessor object for exclusive access
167  CRef<SAlnTableCursor> Aln(bool is_secondary);
168  CRef<SSeqTableCursor> Seq(void);
169  // return table accessor object for reuse
170  void Put(CRef<SRefTableCursor>& curs);
171  void Put(CRef<SAlnTableCursor>& curs);
172  void Put(CRef<SSeqTableCursor>& curs);
173 
174 protected:
175  void OpenRefTable(void);
176  void OpenAlnTable(bool is_secondary);
177  void OpenSeqTable(void);
178 
179  const CVDBTable& RefTable(void) {
180  const CVDBTable& table = m_RefTable;
181  if ( !table ) {
182  OpenRefTable();
183  }
184  return table;
185  }
186  const CVDBTable& AlnTable(bool is_secondary) {
187  const CVDBTable& table = m_AlnTable[is_secondary];
188  if ( !table ) {
189  OpenAlnTable(is_secondary);
190  }
191  return table;
192  }
193  const CVDBTable& SeqTable(void) {
194  const CVDBTable& table = m_SeqTable;
195  if ( !table ) {
196  OpenSeqTable();
197  }
198  return table;
199  }
200 
201  void x_MakeRefSeq_ids(SRefInfo& info,
202  IIdMapper* ref_id_mapper,
203  int ref_id_type);
204 
205 private:
208  string m_CSraPath;
209  string m_SraIdPart;
210 
214  CVDBTable m_AlnTable[2];
216 
220 
221  TSeqPos m_RowSize; // cached size of refseq row in bases
222  TRefInfoList m_RefList; // list of cached refseqs' information
223  TRefInfoMapByName m_RefMapByName; // index for refseq info lookup
224  TRefInfoMapBySeq_id m_RefMapBySeq_id; // index for refseq info lookup
225 };
226 
227 
228 class CCSraDb : public CRef<CCSraDb_Impl>, public SCSraDb_Defs
229 {
230 public:
231  CCSraDb(void)
232  {
233  }
235  CCSraDb(CVDBMgr& mgr,
236  const string& csra_path,
237  IIdMapper* ref_id_mapper = NULL,
238  ERefIdType ref_id_type = eRefId_SEQ_ID);
240  CCSraDb(CVDBMgr& mgr,
241  const string& csra_path,
242  const string& sra_id_part,
243  IIdMapper* ref_id_mapper = NULL,
244  ERefIdType ref_id_type = eRefId_SEQ_ID);
245 
247  static string MakeSraIdPart(EPathInIdType path_in_id_type,
248  const string& dir_path,
249  const string& csra_file);
250 
251  TSeqPos GetRowSize(void) const
252  {
253  return GetObject().GetRowSize();
254  }
255 
257  void GetSpotGroups(TSpotGroups& spot_groups)
258  {
259  GetObject().GetSpotGroups(spot_groups);
260  }
261 };
262 
263 
265 {
266 public:
268  {
269  }
270  CCSraRefSeqIterator(const CCSraDb& csra_db,
271  CCSraDb_Impl::TRefInfoList::const_iterator iter)
272  : m_Db(csra_db),
273  m_Iter(iter)
274  {
275  }
276  explicit CCSraRefSeqIterator(const CCSraDb& csra_db);
278  CCSraRefSeqIterator(const CCSraDb& csra_db, const string& seq_id);
279  enum EByName {
280  eByName
281  };
282  CCSraRefSeqIterator(const CCSraDb& csra_db, const string& name,
283  EByName /*by_name*/);
284  CCSraRefSeqIterator(const CCSraDb& csra_db, const CSeq_id_Handle& seq_id);
285 
286  bool operator!(void) const {
287  return !m_Db || m_Iter == m_Db->GetRefInfoList().end();
288  }
289  operator const void*(void) const {
290  return !*this? 0: this;
291  }
292 
293  const CCSraDb_Impl::SRefInfo& GetInfo(void) const;
294  const CCSraDb_Impl::SRefInfo& operator*(void) const {
295  return GetInfo();
296  }
297  const CCSraDb_Impl::SRefInfo* operator->(void) const {
298  return &GetInfo();
299  }
300 
302  ++m_Iter;
303  return *this;
304  }
305 
306  const string& GetRefSeqId(void) const {
307  return m_Iter->m_SeqId;
308  }
310  return m_Iter->GetMainSeq_id();
311  }
312  const CSeq_id_Handle& GetRefSeq_id_Handle(void) const {
313  return m_Iter->GetMainSeq_id_Handle();
314  }
315  const CBioseq::TId& GetRefSeq_ids(void) const {
316  return m_Iter->m_Seq_ids;
317  }
318 
319  bool IsCircular(void) const;
320 
321  TSeqPos GetSeqLength(void) const;
322 
324  size_t GetRowAlignCount(TVDBRowId row) const;
325 
326  size_t GetAlignCountAtPos(TSeqPos pos, TAlignType type = fAnyAlign) const;
327 
328  CRef<CSeq_graph> GetCoverageGraph(void) const;
329  CRef<CSeq_annot> GetCoverageAnnot(void) const;
330  CRef<CSeq_annot> GetCoverageAnnot(const string& annot_name) const;
331 
332  CRef<CSeq_annot> GetSeq_annot(void) const;
333  CRef<CSeq_annot> GetSeq_annot(const string& annot_name) const;
334 
335  enum ELoadData {
337  eOmitData
338  };
339  CRef<CBioseq> GetRefBioseq(ELoadData load = eLoadData) const;
340  typedef list< CRef<CSeq_literal> > TLiterals;
342  void GetRefLiterals(TLiterals& literals,
343  TRange range,
344  ELoadData load = eLoadData) const;
345 
346  // return array of start position of alignmnets overlapping with each page
347  // return empty array if at most one page overlapping is allowed
348  const vector<TSeqPos>& GetAlnOverStarts(void) const;
349  // return first position that is surely not covered by alignments
350  // with starting position in the argument range
351  TSeqPos GetAlnOverToOpen(TRange range) const;
352 
353  // estimate number of alignments mapped to the reference sequence
354  Uint8 GetEstimatedNumberOfAlignments(void) const;
355 
356 protected:
357  friend class CCSraAlignIterator;
358 
359  CRef<CSeq_annot> x_GetSeq_annot(const string* annot_name) const;
360 
361  static CRef<CSeq_annot> MakeSeq_annot(const string& annot_name);
362 
363  CCSraDb_Impl& GetDb(void) const {
364  return m_Db.GetNCObject();
365  }
366 
367 private:
369  CCSraDb_Impl::TRefInfoList::const_iterator m_Iter;
370 };
371 
372 
374 {
375 public:
376  CCSraAlignIterator(void);
377 
378  enum ESearchMode {
380  eSearchByStart
381  };
382 
384  CCSraAlignIterator(const CCSraDb& csra_db,
385  const string& ref_id,
386  TSeqPos ref_pos,
387  TSeqPos window = 0,
388  ESearchMode search_mode = eSearchByOverlap,
389  TAlignType align_type = fAnyAlign);
390  CCSraAlignIterator(const CCSraDb& csra_db,
391  const CSeq_id_Handle& ref_id,
392  TSeqPos ref_pos,
393  TSeqPos window,
394  ESearchMode search_mode,
395  TAlignType align_type = fAnyAlign);
396  CCSraAlignIterator(const CCSraDb& csra_db,
397  const CSeq_id_Handle& ref_id,
398  TSeqPos ref_pos,
399  TSeqPos window = 0,
400  TAlignType align_type = fAnyAlign);
401  ~CCSraAlignIterator(void);
402 
403  void Reset(void);
405  CCSraAlignIterator& operator=(const CCSraAlignIterator& iter);
406 
407  void Select(TSeqPos ref_pos,
408  TSeqPos window = 0,
409  ESearchMode search_mode = eSearchByOverlap,
410  TAlignType align_type = fAnyAlign);
411 
412  operator const void*(void) const {
413  return m_Error? 0: this;
414  }
415  bool operator!(void) const {
416  return m_Error != 0;
417  }
418 
420  x_Next();
421  return *this;
422  }
423 
424  TVDBRowId GetAlignmentId(void) const;
425 
426  bool IsSecondary(void) const {
427  return m_AlnRowIsSecondary;
428  }
429 
430  CTempString GetRefSeqId(void) const;
431  TSeqPos GetRefSeqPos(void) const {
432  return m_CurRefPos;
433  }
434  TSeqPos GetRefSeqLen(void) const {
435  return m_CurRefLen;
436  }
437  bool GetRefMinusStrand(void) const;
438 
439  int GetMapQuality(void) const;
440 
441  TVDBRowId GetShortId1(void) const;
442  INSDC_coord_one GetShortId2(void) const;
443  TSeqPos GetShortPos(void) const;
444  TSeqPos GetShortLen(void) const;
445 
446  CTempString GetSpotGroup(void) const;
447 
448  bool IsSetName(void) const;
449  CTempString GetName(void) const;
450 
451  INSDC_read_filter GetReadFilter(void) const;
452 
453  CTempString GetCIGAR(void) const;
454  // returns long form of CIGAR
455  CTempString GetCIGARLong(void) const;
456  // GetMismatchRead() returns difference of the short read and reference
457  // sequence. Matching bases are represented as '='.
458  // The short read is reversed to match direction of the reference seq.
459  CTempString GetMismatchRead(void) const;
460  // GetMismatchRaw() returns only mismatched and inserted/mismatched bases.
461  CTempString GetMismatchRaw(void) const;
462  // MakeFullMismatch() generates all mismatched and all inserted bases.
463  void MakeFullMismatch(string& str,
464  CTempString cigar,
465  CTempString mismatch) const;
466 
468  return m_RefIter->GetMainSeq_id();
469  }
470  CRef<CSeq_id> GetShortSeq_id(void) const;
471  CRef<CSeq_id> GetMateShortSeq_id(void) const;
472  CRef<CBioseq> GetShortBioseq(void) const;
473  CRef<CSeq_align> GetMatchAlign(void) const;
474  CRef<CSeq_graph> GetQualityGraph(void) const;
475  CRef<CSeq_annot> GetEmptyMatchAnnot(void) const;
476  CRef<CSeq_annot> GetEmptyMatchAnnot(const string& annot_name) const;
477  CRef<CSeq_annot> GetMatchAnnot(void) const;
478  CRef<CSeq_annot> GetMatchAnnot(const string& annot_name) const;
479  CRef<CSeq_annot> GetQualityGraphAnnot(void) const;
480  CRef<CSeq_annot> GetQualityGraphAnnot(const string& annot_name) const;
481  CRef<CSeq_entry> GetMatchEntry(void) const;
482  CRef<CSeq_entry> GetMatchEntry(const string& annot_name) const;
483  CRef<CSeq_annot> GetSeq_annot(void) const;
484  CRef<CSeq_annot> GetSeq_annot(const string& annot_name) const;
485 
486  static CRef<CSeq_annot> MakeSeq_annot(const string& annot_name);
487  static CRef<CSeq_annot> MakeEmptyMatchAnnot(const string& annot_name);
488  static CRef<CAnnotdesc> MakeMatchAnnotIndicator(void);
489 
490 protected:
492 
493  CCSraDb_Impl& GetDb(void) const {
494  return m_RefIter.GetDb();
495  }
496 
497  CCSraAlignIterator(const CCSraDb& csra_db,
498  TAlignType align_type,
499  TVDBRowId align_row);
500 
501  void x_Settle(void); // skip all non-matching elements
502  void x_Next(void) {
503  ++m_AlnRowCur;
504  x_Settle();
505  }
506 
507  CRef<CSeq_entry> x_GetMatchEntry(const string* annot_name) const;
508  CRef<CSeq_annot> x_GetEmptyMatchAnnot(const string* annot_name) const;
509  CRef<CSeq_annot> x_GetMatchAnnot(const string* annot_name) const;
510  CRef<CSeq_annot> x_GetQualityGraphAnnot(const string* annot_name) const;
511  CRef<CSeq_annot> x_GetSeq_annot(const string* annot_name) const;
512 
515  CRef<CUser_object> x_GetSecondaryIndicator(void) const;
516  CObject_id& x_GetObject_id(const char* name, TObjectIdCache& cache) const;
517  CUser_field& x_AddField(CUser_object& obj,
518  const char* name,
519  TObjectIdCache& cache) const;
520  void x_AddField(CUser_object& obj, const char* name, CTempString value,
521  TObjectIdCache& cache) const;
522  void x_AddField(CUser_object& obj, const char* name, int value,
523  TObjectIdCache& cache) const;
524  void x_AddField(CUser_object& obj, const char* name, CTempString value,
525  TObjectIdCache& id_cache, TUserFieldCache& cache,
526  size_t max_value_length, size_t max_cache_size) const;
527 
528 private:
529  CCSraRefSeqIterator m_RefIter; // refseq selector
530  CRef<CCSraDb_Impl::SRefTableCursor> m_Ref; // VDB ref table accessor
531  CRef<CCSraDb_Impl::SAlnTableCursor> m_Aln; // VDB align table accessor
532 
533  rc_t m_Error; // result of VDB access
534  TSeqPos m_ArgRefPos, m_ArgRefLast; // requested refseq range
535  TSeqPos m_CurRefPos, m_CurRefLen; // current alignment refseq range
536 
537  TVDBRowId m_RefRowNext; // refseq row range
542  const TVDBRowId* m_AlnRowCur; // current refseq row alignments ids
544 
545  struct SCreateCache {
547 
558  CRef<CUser_object> m_ReadFilterIndicator[4];
559  };
561 
562  SCreateCache& x_GetCreateCache(void) const;
563 };
564 
565 
567 {
568 public:
569  enum EClipType {
570  eDefaultClip, // as defined by config
571  eNoClip, // force no clipping
572  eClipByQuality // force clipping
573  };
574 
576  explicit
577  CCSraShortReadIterator(const CCSraDb& csra_db,
578  EClipType clip_type = eDefaultClip);
579  // The last constructor parameter was changed from zero-based mate_index
580  // to one-based read_id to reflect standardization of short read ids
581  // in form gnl|SRA|<SRA accesion>.<Spot id>.<Read id>.
582  CCSraShortReadIterator(const CCSraDb& csra_db,
583  TVDBRowId spot_id,
584  EClipType clip_type = eDefaultClip);
585  CCSraShortReadIterator(const CCSraDb& csra_db,
586  TVDBRowId spot_id,
587  uint32_t read_id,
588  EClipType clip_type = eDefaultClip);
589  ~CCSraShortReadIterator(void);
590 
591  void Reset(void);
593  CCSraShortReadIterator& operator=(const CCSraShortReadIterator& iter);
594 
595  bool Select(TVDBRowId spot_id);
596  bool Select(TVDBRowId spot_id, uint32_t read_id);
597  void SetLastSpotId(TVDBRowId spot_id);
598 
599  operator const void*(void) const {
600  return m_Error? 0: this;
601  }
602  bool operator!(void) const {
603  return m_Error != 0;
604  }
605 
607  x_Next();
608  return *this;
609  }
610 
611  TVDBRowId GetSpotId(void) const {
612  return m_SpotId;
613  }
614  TVDBRowId GetMaxSpotId(void) const {
615  return m_MaxSpotId;
616  }
617  uint32_t GetReadId(void) const {
618  return m_ReadId;
619  }
620  uint32_t GetMaxReadId(void) const {
621  return m_MaxReadId;
622  }
623 
624  // Use GetReadId() instead of GetMateIndex().
625  // Note that GetReadId() is one-based and GetMateIndex() is zero-based.
627  return GetReadId()-1;
628  }
629  // Number of reads in this spot.
630  uint32_t GetReadCount(void) const {
631  return GetMaxReadId();
632  }
633  // Number of biological reads without taking into account any clipping.
634  uint32_t GetMateCount(void) const;
635 
636  CTempString GetSpotGroup(void) const;
637 
638  bool IsSetName(void) const;
639  CTempString GetName(void) const;
640 
641  // Returns true if current read has clipping info that can or does
642  // reduce sequence length.
643  bool HasClippingInfo(void) const;
644  // Returns true if current read is actually clipped by quality.
645  // It can be true only if clipping by quality is on.
646  bool IsClippedByQuality(void) const {
647  return m_ClipByQuality && HasClippingInfo();
648  }
649  // Returns true if current read has actual clipping info that is not
650  // applied because clipping by quality is off.
651  bool ShouldBeClippedByQuality(void) const {
652  return !m_ClipByQuality && HasClippingInfo();
653  }
654 
655  CTempString GetReadData(EClipType clip_type = eDefaultClip) const;
656 
657  TVDBRowId GetShortId1(void) const {
658  return GetSpotId();
659  }
660  uint32_t GetShortId2(void) const {
661  return GetReadId();
662  }
663 
664  bool IsTechnicalRead(void) const;
665 
666  INSDC_read_filter GetReadFilter(void) const;
667 
668  // returns current read range inside spot
670  TOpenRange GetReadRange(EClipType clip_type = eDefaultClip) const;
671 
672  TSeqPos GetShortLen(void) const {
673  return GetReadRange().GetLength();
674  }
675 
676  CRef<CSeq_id> GetShortSeq_id(void) const;
677 
678  // clip coordinate (inclusive)
679  TSeqPos GetClipQualityLeft(void) const;
680  TSeqPos GetClipQualityLength(void) const;
682  {
683  // inclusive
684  return GetClipQualityLeft() + GetClipQualityLength() - 1;
685  }
686 
687  CRef<CSeq_graph> GetQualityGraph(void) const;
688  CRef<CSeq_annot> GetQualityGraphAnnot(void) const;
689  CRef<CSeq_annot> GetQualityGraphAnnot(const string& annot_name) const;
690 
692  fQualityGraph = 1<<0,
693  fDefaultBioseqFlags = 0
694  };
695  typedef int TBioseqFlags;
696  CRef<CBioseq> GetShortBioseq(TBioseqFlags flags = fDefaultBioseqFlags) const;
697 
698  CCSraRefSeqIterator GetRefSeqIter(TSeqPos* ref_pos_ptr = NULL) const;
699  CCSraAlignIterator GetAlignIter() const;
700 
701 protected:
702  CCSraDb_Impl& GetDb(void) const {
703  return m_Db.GetNCObject();
704  }
705 
706  void x_Init(const CCSraDb& csra_db, EClipType clip_type);
707  bool x_ValidRead(void) const;
708  bool x_Settle(bool single_spot = false);
709  bool x_Next(void) {
710  ++m_ReadId;
711  return x_Settle();
712  }
713 
714 
715  void x_GetMaxReadId(void);
716  CTempString x_GetReadData(TOpenRange range) const;
717 
718  CRef<CSeq_annot> x_GetSeq_annot(const string* annot_name) const;
719  CRef<CSeq_annot> x_GetQualityGraphAnnot(const string* annot_name) const;
720  CRef<CSeq_annot> x_GetQualityGraphAnnot(TOpenRange range,
721  const string* annot_name) const;
722  CRef<CSeq_graph> x_GetQualityGraph(TOpenRange range) const;
723 
724 private:
725  CCSraDb m_Db; // refseq selector
726  CRef<CCSraDb_Impl::SSeqTableCursor> m_Seq; // VDB sequence table accessor
727 
734 
735  rc_t m_Error; // result of VDB access
736 };
737 
738 
739 /////////////////////////////////////////////////////////////////////////////
740 // CCSraRefSeqIterator
741 
742 inline
744 CCSraRefSeqIterator::GetSeq_annot(const string& annot_name) const
745 {
746  return x_GetSeq_annot(&annot_name);
747 }
748 
749 
750 inline
753 {
754  return x_GetSeq_annot(0);
755 }
756 
757 
758 /////////////////////////////////////////////////////////////////////////////
759 // CCSraAlignIterator
760 
761 inline
763 CCSraAlignIterator::GetMatchEntry(const string& annot_name) const
764 {
765  return x_GetMatchEntry(&annot_name);
766 }
767 
768 
769 inline
772 {
773  return x_GetMatchEntry(0);
774 }
775 
776 
777 inline
779 CCSraAlignIterator::GetEmptyMatchAnnot(const string& annot_name) const
780 {
781  return x_GetEmptyMatchAnnot(&annot_name);
782 }
783 
784 
785 inline
788 {
789  return x_GetEmptyMatchAnnot(0);
790 }
791 
792 
793 inline
795 CCSraAlignIterator::GetMatchAnnot(const string& annot_name) const
796 {
797  return x_GetMatchAnnot(&annot_name);
798 }
799 
800 
801 inline
804 {
805  return x_GetMatchAnnot(0);
806 }
807 
808 
809 inline
811 CCSraAlignIterator::GetQualityGraphAnnot(const string& annot_name) const
812 {
813  return x_GetQualityGraphAnnot(&annot_name);
814 }
815 
816 
817 inline
820 {
821  return x_GetQualityGraphAnnot(0);
822 }
823 
824 
825 inline
827 CCSraAlignIterator::x_GetSeq_annot(const string* annot_name) const
828 {
829  return m_RefIter.x_GetSeq_annot(annot_name);
830 }
831 
832 
833 inline
835 CCSraAlignIterator::GetSeq_annot(const string& annot_name) const
836 {
837  return x_GetSeq_annot(&annot_name);
838 }
839 
840 
841 inline
844 {
845  return x_GetSeq_annot(0);
846 }
847 
848 
849 inline
851 CCSraAlignIterator::MakeSeq_annot(const string& annot_name)
852 {
853  return CCSraRefSeqIterator::MakeSeq_annot(annot_name);
854 }
855 
856 
857 /////////////////////////////////////////////////////////////////////////////
858 // CCSraShortReadIterator
859 
860 inline
862 CCSraShortReadIterator::GetQualityGraphAnnot(const string& annot_name) const
863 {
864  return x_GetQualityGraphAnnot(&annot_name);
865 }
866 
867 
868 inline
871 {
872  return x_GetQualityGraphAnnot(0);
873 }
874 
875 
878 
879 #endif // SRA__READER__SRA__CSRAREAD__HPP
User-defined methods of the data storage class.
User-defined methods of the data storage class.
Extensions to std::atomic<>
uint32_t rc_t
AutoPtr –.
Definition: ncbimisc.hpp:401
bool operator!(void) const
Definition: csraread.hpp:415
CRef< CSeq_annot > x_GetMatchAnnot(const string *annot_name) const
Definition: csraread.cpp:1782
CRef< CSeq_annot > GetEmptyMatchAnnot(void) const
Definition: csraread.hpp:787
CCSraRefSeqIterator m_RefIter
Definition: csraread.hpp:529
CRef< CObject_id > TObjectIdCache
Definition: csraread.hpp:513
TVDBRowId m_RefRowLast
Definition: csraread.hpp:538
CRef< CSeq_entry > GetMatchEntry(void) const
Definition: csraread.hpp:771
static CRef< CSeq_annot > MakeSeq_annot(const string &annot_name)
Definition: csraread.hpp:851
CCSraDb_Impl & GetDb(void) const
Definition: csraread.hpp:493
CRef< CSeq_id > GetRefSeq_id(void) const
Definition: csraread.hpp:467
CRef< CSeq_annot > GetQualityGraphAnnot(void) const
Definition: csraread.hpp:819
TSeqPos GetRefSeqLen(void) const
Definition: csraread.hpp:434
TVDBRowId m_RefRowNext
Definition: csraread.hpp:537
map< CTempString, CRef< CUser_field > > TUserFieldCache
Definition: csraread.hpp:514
const TVDBRowId * m_AlnRowCur
Definition: csraread.hpp:542
CRef< CSeq_annot > x_GetSeq_annot(const string *annot_name) const
Definition: csraread.hpp:827
CRef< CSeq_annot > GetSeq_annot(void) const
Definition: csraread.hpp:843
TSeqPos GetRefSeqPos(void) const
Definition: csraread.hpp:431
CRef< CSeq_entry > x_GetMatchEntry(const string *annot_name) const
Definition: csraread.cpp:1800
CRef< CCSraDb_Impl::SRefTableCursor > m_Ref
Definition: csraread.hpp:530
CCSraAlignIterator & operator++(void)
Definition: csraread.hpp:419
CRef< CSeq_annot > GetMatchAnnot(void) const
Definition: csraread.hpp:803
TAlignType m_AlignType
Definition: csraread.hpp:541
bool IsSecondary(void) const
Definition: csraread.hpp:426
CRef< CSeq_annot > x_GetQualityGraphAnnot(const string *annot_name) const
Definition: csraread.cpp:1791
CRef< CSeq_annot > x_GetEmptyMatchAnnot(const string *annot_name) const
Definition: csraread.cpp:1758
void x_Next(void)
Definition: csraread.hpp:502
ESearchMode m_SearchMode
Definition: csraread.hpp:540
AutoPtr< SCreateCache > m_CreateCache
Definition: csraread.hpp:560
CRef< CCSraDb_Impl::SAlnTableCursor > m_Aln
Definition: csraread.hpp:531
const TVDBRowId * m_AlnRowEnd
Definition: csraread.hpp:543
CFastMutex m_OverlapMutex
Definition: csraread.hpp:212
const CVDBTable & SeqTable(void)
Definition: csraread.hpp:193
CVDBTable m_RefTable
Definition: csraread.hpp:213
TSeqPos m_RowSize
Definition: csraread.hpp:221
void GetSpotGroups(TSpotGroups &spot_groups)
Definition: csraread.cpp:424
list< SRefInfo > TRefInfoList
Definition: csraread.hpp:115
CVDBObjectCache< SSeqTableCursor > m_Seq
Definition: csraread.hpp:219
const CVDBTable & RefTable(void)
Definition: csraread.hpp:179
TRefInfoList m_RefList
Definition: csraread.hpp:222
vector< string > TSpotGroups
Definition: csraread.hpp:133
void SetSraIdPart(const string &s)
Definition: csraread.hpp:143
const TRefInfoMapBySeq_id & GetRefInfoMapBySeq_id(void) const
Definition: csraread.hpp:125
TRefInfoMapByName m_RefMapByName
Definition: csraread.hpp:223
CVDBObjectCache< SRefTableCursor > m_Ref
Definition: csraread.hpp:217
const string & GetCSraPath(void) const
Definition: csraread.hpp:136
TRefInfoMapBySeq_id m_RefMapBySeq_id
Definition: csraread.hpp:224
TSeqPos GetRowSize(void) const
Definition: csraread.hpp:129
string m_SraIdPart
Definition: csraread.hpp:209
const CVDBTable & AlnTable(bool is_secondary)
Definition: csraread.hpp:186
const string & GetSraIdPart(void) const
Definition: csraread.hpp:140
CVDBTable m_SeqTable
Definition: csraread.hpp:215
CVDBMgr m_Mgr
Definition: csraread.hpp:206
map< string, TRefInfoList::iterator, PNocase > TRefInfoMapByName
Definition: csraread.hpp:116
string m_CSraPath
Definition: csraread.hpp:208
const TRefInfoList & GetRefInfoList(void) const
Definition: csraread.hpp:119
CFastMutex m_TableMutex
Definition: csraread.hpp:211
map< CSeq_id_Handle, TRefInfoList::iterator > TRefInfoMapBySeq_id
Definition: csraread.hpp:117
const TRefInfoMapByName & GetRefInfoMapByName(void) const
Definition: csraread.hpp:122
CCSraDb(void)
Definition: csraread.hpp:231
CCSraDb_Impl::TSpotGroups TSpotGroups
Definition: csraread.hpp:256
void GetSpotGroups(TSpotGroups &spot_groups)
Definition: csraread.hpp:257
TSeqPos GetRowSize(void) const
Definition: csraread.hpp:251
static string MakeSraIdPart(EPathInIdType path_in_id_type, const string &dir_path, const string &csra_file)
Definition: csraread.cpp:379
const CCSraDb_Impl::SRefInfo & operator*(void) const
Definition: csraread.hpp:294
static CRef< CSeq_annot > MakeSeq_annot(const string &annot_name)
Definition: csraread.cpp:758
CRef< CSeq_annot > GetSeq_annot(void) const
Definition: csraread.hpp:752
CCSraDb_Impl::TRefInfoList::const_iterator m_Iter
Definition: csraread.hpp:369
CCSraRefSeqIterator(const CCSraDb &csra_db, CCSraDb_Impl::TRefInfoList::const_iterator iter)
Definition: csraread.hpp:270
const CBioseq::TId & GetRefSeq_ids(void) const
Definition: csraread.hpp:315
bool operator!(void) const
Definition: csraread.hpp:286
CCSraRefSeqIterator & operator++(void)
Definition: csraread.hpp:301
const string & GetRefSeqId(void) const
Definition: csraread.hpp:306
CRef< CSeq_annot > x_GetSeq_annot(const string *annot_name) const
Definition: csraread.cpp:770
list< CRef< CSeq_literal > > TLiterals
Definition: csraread.hpp:340
const CCSraDb_Impl::SRefInfo * operator->(void) const
Definition: csraread.hpp:297
CRange< TSeqPos > TRange
Definition: csraread.hpp:341
const CSeq_id_Handle & GetRefSeq_id_Handle(void) const
Definition: csraread.hpp:312
CRef< CSeq_id > GetRefSeq_id(void) const
Definition: csraread.hpp:309
CCSraDb_Impl & GetDb(void) const
Definition: csraread.hpp:363
uint32_t GetReadId(void) const
Definition: csraread.hpp:617
COpenRange< TSeqPos > TOpenRange
Definition: csraread.hpp:669
TSeqPos GetClipQualityRight(void) const
Definition: csraread.hpp:681
bool x_Settle(bool single_spot=false)
Definition: csraread.cpp:2064
CCSraShortReadIterator & operator++(void)
Definition: csraread.hpp:606
TVDBRowId GetShortId1(void) const
Definition: csraread.hpp:657
bool IsClippedByQuality(void) const
Definition: csraread.hpp:646
CRef< CSeq_annot > GetQualityGraphAnnot(void) const
Definition: csraread.hpp:870
CRef< CSeq_annot > x_GetQualityGraphAnnot(const string *annot_name) const
Definition: csraread.cpp:2321
TVDBRowId GetSpotId(void) const
Definition: csraread.hpp:611
CCSraDb_Impl & GetDb(void) const
Definition: csraread.hpp:702
uint32_t GetMaxReadId(void) const
Definition: csraread.hpp:620
TVDBRowId GetMaxSpotId(void) const
Definition: csraread.hpp:614
uint32_t GetMateIndex(void) const
Definition: csraread.hpp:626
CRef< CCSraDb_Impl::SSeqTableCursor > m_Seq
Definition: csraread.hpp:726
uint32_t GetReadCount(void) const
Definition: csraread.hpp:630
TSeqPos GetShortLen(void) const
Definition: csraread.hpp:672
uint32_t GetShortId2(void) const
Definition: csraread.hpp:660
bool ShouldBeClippedByQuality(void) const
Definition: csraread.hpp:651
bool operator!(void) const
Definition: csraread.hpp:602
CRef< CSeq_annot > x_GetSeq_annot(const string *annot_name) const
Definition: csraread.cpp:2297
CFastMutex –.
Definition: ncbimtx.hpp:667
CObject –.
Definition: ncbiobj.hpp:180
Definition: Seq_entry.hpp:56
CTempString implements a light-weight string on top of a storage buffer whose lifetime management is ...
Definition: tempstr.hpp:65
General IdMapper interface.
Definition: iidmapper.hpp:48
char value[7]
Definition: config.c:431
Include a standard set of the NCBI C++ Toolkit most basic headers.
BEGIN_NAMESPACE(objects)
uint8_t INSDC_read_filter
Definition: csraread.hpp:50
int32_t INSDC_coord_one
Definition: csraread.hpp:48
uint32_t INSDC_coord_len
Definition: csraread.hpp:49
END_NCBI_NAMESPACE
Definition: csraread.hpp:877
END_NAMESPACE(objects)
BEGIN_NCBI_NAMESPACE
Definition: csraread.hpp:52
static uch flags
int GetSeqLength(const CBioseq &bioseq)
Definition: cuSequence.cpp:216
unsigned int TSeqPos
Type for sequence locations and lengths.
Definition: ncbimisc.hpp:875
#define NULL
Definition: ncbistd.hpp:225
CRef< C > Ref(C *object)
Helper functions to get CRef<> and CConstRef<> objects.
Definition: ncbiobj.hpp:2015
TObjectType & GetObject(void)
Get object.
Definition: ncbiobj.hpp:1011
#define NCBI_DEPRECATED
uint64_t Uint8
8-byte (64-bit) unsigned integer
Definition: ncbitype.h:105
#define NCBI_SRAREAD_EXPORT
Definition: ncbi_export.h:1227
list< CRef< CSeq_id > > TId
Definition: Bioseq_.hpp:94
<!DOCTYPE HTML >< html > n< header > n< title > PubSeq Gateway Help Page</title > n< style > n table
static MDB_envinfo info
Definition: mdb_load.c:37
range(_Ty, _Ty) -> range< _Ty >
Multi-threading – mutexes; rw-locks; semaphore.
Portable reference counted smart and weak pointers using CWeakRef, CRef, CObject and CObjectEx.
static CObject_id & x_GetObject_id(CRef< CObject_id > &cache, const char *name)
Definition: snpread.cpp:2608
static const char * str(char *buf, int n)
Definition: stats.c:84
unsigned int uint32_t
Definition: stdint.h:126
signed int int32_t
Definition: stdint.h:123
unsigned char uint8_t
Definition: stdint.h:124
CRef< CUser_object > m_SecondaryIndicator
Definition: csraread.hpp:557
TObjectIdCache m_ObjectIdTracebacks
Definition: csraread.hpp:552
TUserFieldCache m_UserFieldCacheCigar
Definition: csraread.hpp:555
TUserFieldCache m_UserFieldCacheMismatch
Definition: csraread.hpp:556
CRef< CAnnotdesc > m_MatchAnnotIndicator
Definition: csraread.hpp:546
const CSeq_id_Handle & GetMainSeq_id_Handle(void) const
Definition: csraread.hpp:108
CBioseq::TId m_Seq_ids
Definition: csraread.hpp:100
CSeq_id_Handle m_Seq_id_Handle
Definition: csraread.hpp:101
CRef< CSeq_id > & GetMainSeq_id(void)
Definition: csraread.hpp:102
copyable_relaxed_atomic< TSeqPos > m_SeqLength
Definition: csraread.hpp:99
const CRef< CSeq_id > & GetMainSeq_id(void) const
Definition: csraread.hpp:105
vector< TSeqPos > m_AlnOverStarts
Definition: csraread.hpp:113
EAlignType TAlignType
Definition: csraread.hpp:83
@ ePathInId_config
Definition: csraread.hpp:74
Definition: type.c:6
int64_t TVDBRowId
Definition: vdbread.hpp:79
Modified on Wed Nov 29 02:23:16 2023 by modify_doxy.py rev. 669887