NCBI C++ ToolKit
object_splitinfo.cpp
Go to the documentation of this file.

Go to the SVN repository for this file.

1 /* $Id: object_splitinfo.cpp 87845 2019-10-10 16:05:19Z vasilche $
2 * ===========================================================================
3 *
4 * PUBLIC DOMAIN NOTICE
5 * National Center for Biotechnology Information
6 *
7 * This software/database is a "United States Government Work" under the
8 * terms of the United States Copyright Act. It was written as part of
9 * the author's official duties as a United States Government employee and
10 * thus cannot be copyrighted. This software/database is freely available
11 * to the public for use. The National Library of Medicine and the U.S.
12 * Government have not placed any restriction on its use or reproduction.
13 *
14 * Although all reasonable efforts have been taken to ensure the accuracy
15 * and reliability of the software and data, the NLM and the U.S.
16 * Government do not and cannot warrant the performance or results that
17 * may be obtained by using this software or data. The NLM and the U.S.
18 * Government disclaim all warranties, express or implied, including
19 * warranties of performance, merchantability or fitness for any particular
20 * purpose.
21 *
22 * Please cite the author in any work or product based on this material.
23 *
24 * ===========================================================================
25 *
26 * Author: Eugene Vasilchenko
27 *
28 * File Description:
29 * Application for splitting blobs withing ID1 cache
30 *
31 * ===========================================================================
32 */
33 
34 #include <ncbi_pch.hpp>
36 
37 #include <serial/serial.hpp>
38 
40 #include <objects/seq/seq__.hpp>
42 
47 
48 #include <objmgr/error_codes.hpp>
50 
52 
53 #define NCBI_USE_ERRCODE_X ObjMgr_ObjSplitInfo
54 
55 #ifndef NCBI_ANNOT_TRACK_ZOOM_LEVEL_SUFFIX
56 # define NCBI_ANNOT_TRACK_ZOOM_LEVEL_SUFFIX "@@"
57 #endif
58 
60 
62 
64 
65 static CSafeStatic<CAsnSizer> s_Sizer; // for size estimation
66 
67 namespace {
68  template<class C>
69  string AsnText(const C& obj)
70  {
72  str << MSerial_AsnText << obj;
74  }
75 
76  template<class C>
77  int AsnCompare(const C& obj1, const C& obj2)
78  {
79  string str1 = AsnText(obj1);
80  string str2 = AsnText(obj2);
81  return str1.compare(str2);
82  }
83 }
84 
85 
86 /////////////////////////////////////////////////////////////////////////////
87 // CLocObjects_SplitInfo
88 /////////////////////////////////////////////////////////////////////////////
89 
90 
92 {
93  m_Objects.push_back(obj);
95  m_Size += obj.m_Size;
96 }
97 
98 
100 {
101  return out << m_Size;
102 }
103 
104 
105 /////////////////////////////////////////////////////////////////////////////
106 // CSeq_annot_SplitInfo
107 /////////////////////////////////////////////////////////////////////////////
108 
109 
111  : m_TopPriority(eAnnotPriority_max),
112  m_NamePriority(eAnnotPriority_max)
113 {
114 }
115 
116 
118 {
119  string name;
120  int version = -1;
121  if ( annot.IsSetId() ) {
122  const CSeq_annot::TId& ids = annot.GetId();
123  ITERATE ( CSeq_annot::TId, it, ids ) {
124  const CAnnot_id& id = **it;
125  if ( id.IsOther() ) {
126  const CTextannot_id& text_id = id.GetOther();
127  if ( text_id.IsSetAccession() ) {
128  const string& acc = text_id.GetAccession();
129  if ( acc.empty() ) {
130  ERR_POST_X(1, "Empty named annot accession");
131  }
132  else if ( name.empty() ) {
133  name = acc;
134  }
135  else if ( name != acc ) {
136  ERR_POST_X(2, "Conflicting named annot accessions: "<<
137  name<<" & "<<acc);
138  }
139  }
140  if ( text_id.IsSetVersion() ) {
141  int ver = text_id.GetVersion();
142  if ( ver < 0 ) {
143  ERR_POST_X(3, "Negative version: "<<ver);
144  }
145  else if ( version < 0 ) {
146  version = ver;
147  }
148  else if ( version != ver ) {
149  ERR_POST_X(4, "Conflicting named annot versions: "<<
150  name<<": "<<version<<" & "<<ver);
151  }
152  }
153  }
154  }
155  }
156  int zoom_level = -1;
157  if ( annot.IsSetDesc() ) {
158  const CSeq_annot::TDesc::Tdata& descs = annot.GetDesc().Get();
159  ITERATE( CSeq_annot::TDesc::Tdata, it, descs ) {
160  const CAnnotdesc& desc = **it;
161  if ( desc.Which() == CAnnotdesc::e_Name ) {
162  const string& s = desc.GetName();
163  if ( s.empty() ) {
164  ERR_POST_X(5, "Empty annot name");
165  }
166  else if ( name.empty() ) {
167  name = s;
168  }
169  else if ( name != s ) {
170  ERR_POST_X(6, "Conflicting annot names: "<<
171  name<<" & "<<s);
172  }
173  }
174  else if ( desc.Which() == CAnnotdesc::e_User ) {
175  const CUser_object& user = desc.GetUser();
176  const CObject_id& type = user.GetType();
177  if ( !type.IsStr() || type.GetStr() != "AnnotationTrack" ) {
178  continue;
179  }
180  CConstRef<CUser_field> field = user.GetFieldRef("ZoomLevel");
181  if ( field && field->GetData().IsInt() ) {
182  int level = field->GetData().GetInt();
183  if ( level < 0 ) {
184  ERR_POST_X(7, "Negative zoom level");
185  }
186  else if ( zoom_level < 0 ) {
187  zoom_level = level;
188  }
189  else if ( zoom_level != level ) {
190  ERR_POST_X(8, "Conflicting named annot zoom levels: "<<
191  name<<": "<<zoom_level<<" & "<<level);
192  }
193  }
194  }
195  }
196  }
197  if ( version >= 0 ) {
198  if ( name.empty() ) {
199  ERR_POST_X(9, "Named annot version with empty name");
200  }
201  else {
202  name += "."+NStr::IntToString(version);
203  }
204  }
205  if ( zoom_level >= 0 ) {
206  if ( name.empty() ) {
207  ERR_POST_X(10, "Named annot zoom level with empty name");
208  }
209  else {
211  }
212  }
213  if ( name.empty() ) {
214  return CAnnotName();
215  }
216  else {
217  return CAnnotName(name);
218  }
219 }
220 
221 
223 {
225  return m_NamePriority;
226  }
227  else if ( m_TopPriority != eAnnotPriority_max ) {
228  return m_TopPriority;
229  }
230  else {
232  }
233 }
234 
235 
238 {
240  return m_NamePriority;
241  }
242  else {
243  return obj.GetPriority();
244  }
245 }
246 
247 
249 {
250  switch ( annot.GetData().Which() ) {
252  return annot.GetData().GetFtable().size();
254  return annot.GetData().GetAlign().size();
256  return annot.GetData().GetGraph().size();
258  return 1;
259  default:
260  _ASSERT("bad annot type" && 0);
261  }
262  return 0;
263 }
264 
265 
267 {
268  if ( int cmp = m_Location.Compare(other.m_Location) ) {
269  return cmp;
270  }
271  if ( int cmp = m_Size.Compare(other.m_Size) ) {
272  return cmp;
273  }
274  if ( int cmp = AsnCompare(*m_Src_annot, *other.m_Src_annot) ) {
275  return cmp;
276  }
277  return 0;
278 }
279 
280 
282  const SSplitterParams& params,
283  const CBlobSplitterImpl& impl)
284 {
285  s_Sizer->Set(annot, params);
286  m_Size = CSize(*s_Sizer);
287 
288  auto ratio = m_Size.GetExactRatio();
290  m_Src_annot.Reset(&annot);
291  _ASSERT(!m_Name.IsNamed());
292  m_Name = GetName(annot);
293  switch ( annot.GetData().Which() ) {
296  Add(CAnnotObject_SplitInfo(**it, impl, ratio));
297  }
298  break;
301  Add(CAnnotObject_SplitInfo(**it, impl, ratio));
302  }
303  break;
306  Add(CAnnotObject_SplitInfo(**it, impl, ratio));
307  }
308  break;
310  Add(CAnnotObject_SplitInfo(annot.GetData().GetSeq_table(), impl, ratio));
311  break;
312  default:
313  _ASSERT("bad annot type" && 0);
314  }
315  if ( m_Name.IsNamed() ) {
316  // named annotation should have at most regular priority
319  // zoomed annotation have fixed priority
321  if ( p != NPOS ) {
323  int zoom_level = NStr::StringToInt(m_Name.GetName().substr(pl));
324  if ( zoom_level > 0 ) {
325  m_NamePriority = eAnnotPriority_zoomed + zoom_level;
326  }
327  }
328  }
329 }
330 
331 
333 {
334  TAnnotPriority index = obj.GetPriority();
335  m_TopPriority = min(m_TopPriority, index);
336  m_Objects.resize(max(m_Objects.size(), index + size_t(1)));
337  if ( !m_Objects[index] ) {
338  m_Objects[index] = new CLocObjects_SplitInfo;
339  }
340  m_Objects[index]->Add(obj);
342 }
343 
344 
346 {
347  string name;
348  if ( m_Name.IsNamed() ) {
349  name = " \"" + m_Name.GetName() + "\"";
350  }
351  out << "Seq-annot" << name << ":";
352 
353  size_t lines = 0;
354  ITERATE ( TObjects, it, m_Objects ) {
355  if ( !*it ) {
356  continue;
357  }
358  out << "\nObjects" << (it-m_Objects.begin()) << ": " << **it;
359  ++lines;
360  }
361  if ( lines > 1 ) {
362  out << "\n Total: " << m_Size;
363  }
364  return out << NcbiEndl;
365 }
366 
367 
368 /////////////////////////////////////////////////////////////////////////////
369 // CAnnotObject_SplitInfo
370 /////////////////////////////////////////////////////////////////////////////
371 
373  const CBlobSplitterImpl& impl,
374  CSize::TSizeRatio ratio)
375  : m_ObjectType(CSeq_annot::C_Data::e_Ftable),
376  m_Object(&obj),
377  m_Size(s_Sizer->GetAsnSize(obj), ratio)
378 {
379  m_Location.Add(obj, impl);
380 }
381 
382 
384  const CBlobSplitterImpl& impl,
385  CSize::TSizeRatio ratio)
386  : m_ObjectType(CSeq_annot::C_Data::e_Graph),
387  m_Object(&obj),
388  m_Size(s_Sizer->GetAsnSize(obj), ratio)
389 {
390  m_Location.Add(obj, impl);
391 }
392 
393 
395  const CBlobSplitterImpl& impl,
396  CSize::TSizeRatio ratio)
397  : m_ObjectType(CSeq_annot::C_Data::e_Align),
398  m_Object(&obj),
399  m_Size(s_Sizer->GetAsnSize(obj), ratio)
400 {
401  m_Location.Add(obj, impl);
402 }
403 
404 
406  const CBlobSplitterImpl& impl,
407  CSize::TSizeRatio ratio)
408  : m_ObjectType(CSeq_annot::C_Data::e_Seq_table),
409  m_Object(&obj),
410  m_Size(s_Sizer->GetAsnSize(obj), ratio)
411 {
412  m_Location.Add(obj, impl);
413 }
414 
415 
417 {
419  return eAnnotPriority_regular;
420  }
421  const CObject& annot = *m_Object;
422  const CSeq_feat& feat = dynamic_cast<const CSeq_feat&>(annot);
423  switch ( feat.GetData().GetSubtype() ) {
428  return eAnnotPriority_lowest;
429  default:
430  return eAnnotPriority_regular;
431  }
432 }
433 
434 
436 {
437  if ( m_Object == other.m_Object ) {
438  return 0;
439  }
440  if ( int cmp = m_ObjectType - other.m_ObjectType ) {
441  return cmp;
442  }
443  if ( int cmp = m_Size.Compare(other.m_Size) ) {
444  return cmp;
445  }
447  const CSeq_feat& f1 = dynamic_cast<const CSeq_feat&>(*m_Object);
448  const CSeq_feat& f2 = dynamic_cast<const CSeq_feat&>(*other.m_Object);
449  if ( int cmp = f1.GetData().GetSubtype() - f2.GetData().GetSubtype() ) {
450  return cmp;
451  }
452  if ( int cmp = AsnCompare(f1, f2) ) {
453  return cmp;
454  }
455  }
457  const CSeq_align& a1 = dynamic_cast<const CSeq_align&>(*m_Object);
458  const CSeq_align& a2 = dynamic_cast<const CSeq_align&>(*other.m_Object);
459  if ( int cmp = AsnCompare(a1, a2) ) {
460  return cmp;
461  }
462  }
464  const CSeq_graph& g1 = dynamic_cast<const CSeq_graph&>(*m_Object);
465  const CSeq_graph& g2 = dynamic_cast<const CSeq_graph&>(*other.m_Object);
466  if ( int cmp = AsnCompare(g1, g2) ) {
467  return cmp;
468  }
469  }
471  const CSeq_table& t1 = dynamic_cast<const CSeq_table&>(*m_Object);
472  const CSeq_table& t2 = dynamic_cast<const CSeq_table&>(*other.m_Object);
473  if ( int cmp = AsnCompare(t1, t2) ) {
474  return cmp;
475  }
476  }
477  return 0;
478 }
479 
480 
481 /////////////////////////////////////////////////////////////////////////////
482 // CBioseq_SplitInfo
483 /////////////////////////////////////////////////////////////////////////////
484 
485 
487  const SSplitterParams& params)
488  : m_Bioseq(&seq)
489 {
490  m_Location.clear();
491  ITERATE ( CBioseq::TId, it, seq.GetId() ) {
494  }
495  s_Sizer->Set(seq, params);
496  m_Size = CSize(*s_Sizer);
498 }
499 
500 
502 {
503  return m_Priority;
504 }
505 
506 
507 /////////////////////////////////////////////////////////////////////////////
508 // CSeq_entry_SplitInfo
509 /////////////////////////////////////////////////////////////////////////////
510 
511 
513 {
514 }
515 
516 
518 {
519 }
520 
521 
522 /////////////////////////////////////////////////////////////////////////////
523 // CSeq_descr_SplitInfo
524 /////////////////////////////////////////////////////////////////////////////
525 
526 
528  TSeqPos /*seq_length*/,
529  const CSeq_descr& descr,
530  const SSplitterParams& params)
531  : m_Descr(&descr)
532 {
533  if ( place_id.IsBioseq() ) {
535  }
536  else {
537  _ASSERT(place_id.IsBioseq_set()); // it's either Bioseq or Bioseq_set
538  // use dummy handle for Bioseq-sets
540  }
541  s_Sizer->Set(descr, params);
542  m_Size = CSize(*s_Sizer);
544 }
545 
546 
548 {
549  return m_Priority;
550 }
551 
552 
554 {
555  const CSeq_descr::Tdata& d1 = m_Descr->Get();
556  const CSeq_descr::Tdata& d2 = other.m_Descr->Get();
557  for ( CSeq_descr::Tdata::const_iterator i1(d1.begin()), i2(d2.begin());
558  i1 != d1.end() || i2 != d2.end(); ++i1, ++i2 ) {
559  if ( int cmp = (i1 != d1.end()) - (i2 != d2.end()) ) {
560  return cmp;
561  }
562  if ( int cmp = (*i1)->Which() - (*i2)->Which() ) {
563  return cmp;
564  }
565  }
566  if ( int cmp = m_Size.Compare(other.m_Size) ) {
567  return cmp;
568  }
569  if ( int cmp = AsnCompare(*m_Descr, *other.m_Descr) ) {
570  return cmp;
571  }
572  return 0;
573 }
574 
575 
576 /////////////////////////////////////////////////////////////////////////////
577 // CSeq_hist_SplitInfo
578 /////////////////////////////////////////////////////////////////////////////
579 
580 
582  const CSeq_hist& hist,
583  const SSplitterParams& params)
584 {
585  _ASSERT( hist.IsSetAssembly() );
586  m_Assembly = hist.GetAssembly();
587  _ASSERT( place_id.IsBioseq() );
589  s_Sizer->Set(hist, params);
590  m_Size = CSize(*s_Sizer);
592 }
593 
594 
596  const CSeq_align& align,
597  const SSplitterParams& params)
598 {
599  CRef<CSeq_align> dst(&const_cast<CSeq_align&>(align));
600  m_Assembly.push_back(dst);
601  _ASSERT( place_id.IsBioseq() );
603  s_Sizer->Set(align, params);
604  m_Size = CSize(*s_Sizer);
606 }
607 
608 
610 {
611  return m_Priority;
612 }
613 
614 
615 /////////////////////////////////////////////////////////////////////////////
616 // CSeq_data_SplitInfo
617 /////////////////////////////////////////////////////////////////////////////
618 
619 
621  const TRange& range,
622  TSeqPos seq_length,
623  const CSeq_data& data,
624  const SSplitterParams& params)
625 {
626  _ASSERT(place_id.IsBioseq()); // Seq-data is attribute of Bioseqs
627  m_Location.clear();
628  m_Location.Add(place_id.GetBioseqId(), range);
629  m_Data.Reset(&data);
630  s_Sizer->Set(data, params);
631  m_Size = CSize(*s_Sizer);
633  if ( seq_length <= 10000 ) {
635  }
636 }
637 
638 
640 {
641  _ASSERT(m_Location.size() == 1);
642  return m_Location.begin()->second.GetTotalRange();
643 }
644 
645 
647 {
648  return m_Priority;
649 }
650 
651 
652 /////////////////////////////////////////////////////////////////////////////
653 // CSeq_inst_SplitInfo
654 /////////////////////////////////////////////////////////////////////////////
655 
656 
658 {
659  m_Seq_data.push_back(data);
660 }
661 
662 
#define static
User-defined methods of the data storage class.
User-defined methods of the data storage class.
const string & GetName(void) const
Definition: annot_name.hpp:62
bool IsNamed(void) const
Definition: annot_name.hpp:58
CConstRef< CObject > m_Object
TAnnotPriority GetPriority(void) const
int Compare(const CAnnotObject_SplitInfo &other) const
CAnnot_id –.
Definition: Annot_id.hpp:66
CAnnotdesc –.
Definition: Annotdesc.hpp:66
TAnnotPriority m_Priority
CBioseq_SplitInfo(const CBioseq &bioseq, const SSplitterParams &params)
TAnnotPriority GetPriority(void) const
CNcbiOstream & Print(CNcbiOstream &out) const
void Add(const CAnnotObject_SplitInfo &obj)
CNcbiOstrstreamToString class helps convert CNcbiOstrstream to a string Sample usage:
Definition: ncbistre.hpp:802
CObject –.
Definition: ncbiobj.hpp:180
bool IsBioseq_set(void) const
Definition: place_id.hpp:71
bool IsBioseq(void) const
Definition: place_id.hpp:67
const TBioseqId & GetBioseqId(void) const
Definition: place_id.hpp:76
CRange –.
Definition: Range.hpp:68
CSafeStatic<>::
ESubtype GetSubtype(void) const
CNcbiOstream & Print(CNcbiOstream &out) const
vector< CRef< CLocObjects_SplitInfo > > TObjects
TAnnotPriority m_TopPriority
void SetSeq_annot(const CSeq_annot &annot, const SSplitterParams &params, const CBlobSplitterImpl &impl)
CConstRef< CSeq_annot > m_Src_annot
void Add(const CAnnotObject_SplitInfo &obj)
static CAnnotName GetName(const CSeq_annot &annot)
TAnnotPriority m_NamePriority
TAnnotPriority GetPriority(void) const
int Compare(const CSeq_annot_SplitInfo &other) const
static size_t CountAnnotObjects(const CSeq_annot &annot)
TAnnotPriority m_Priority
CConstRef< CSeq_data > m_Data
TRange GetRange(void) const
TAnnotPriority GetPriority(void) const
void SetSeq_data(const CPlaceId &place_id, const TRange &range, TSeqPos seq_length, const CSeq_data &data, const SSplitterParams &params)
CSeq_descr_SplitInfo(const CPlaceId &place_id, TSeqPos seq_length, const CSeq_descr &descr, const SSplitterParams &params)
CConstRef< CSeq_descr > m_Descr
int Compare(const CSeq_descr_SplitInfo &other) const
TAnnotPriority GetPriority(void) const
@Seq_descr.hpp User-defined methods of the data storage class.
Definition: Seq_descr.hpp:55
namespace ncbi::objects::
Definition: Seq_feat.hpp:58
TAnnotPriority GetPriority(void) const
TAnnotPriority m_Priority
CSeq_hist_SplitInfo(const CPlaceId &place_id, const CSeq_hist &hist, const SSplitterParams &params)
CSeq_hist –.
Definition: Seq_hist.hpp:66
void Add(const CSeq_data_SplitInfo &data)
void clear(void)
Definition: id_range.hpp:125
size_t size(void) const
Definition: id_range.hpp:117
int Compare(const CSeqsRange &other) const
Definition: id_range.cpp:418
void Add(const CSeq_id_Handle &id, const COneSeqRange &loc)
Definition: id_range.cpp:131
const_iterator begin(void) const
Definition: id_range.hpp:108
Definition: size.hpp:46
pair< TDataSize, TDataSize > TSizeRatio
Definition: size.hpp:49
TSizeRatio GetExactRatio(void) const
Definition: size.hpp:102
int Compare(const CSize &size) const
Definition: size.cpp:58
CTextannot_id –.
CConstRef< CUser_field > GetFieldRef(const string &str, const string &delim=".", NStr::ECase use_case=NStr::eCase) const
Definition: User_object.cpp:84
#define C(s)
Definition: common.h:231
std::ofstream out("events_result.xml")
main entry point for tests
static const char * str(char *buf, int n)
Definition: stats.c:84
char data[12]
Definition: iconv.c:80
unsigned int TSeqPos
Type for sequence locations and lengths.
Definition: ncbimisc.hpp:875
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
Definition: ncbimisc.hpp:815
#define ERR_POST_X(err_subcode, message)
Error posting with default error code and given error subcode.
Definition: ncbidiag.hpp:550
#define MSerial_AsnText
I/O stream manipulators –.
Definition: serialbase.hpp:696
static CSeq_id_Handle GetHandle(const CSeq_id &id)
Normal way of getting a handle, works for any seq-id.
void Reset(void)
Reset reference object.
Definition: ncbiobj.hpp:1439
static TThisType GetWhole(void)
Definition: range.hpp:272
#define END_NCBI_SCOPE
End previously defined NCBI scope.
Definition: ncbistl.hpp:103
#define END_SCOPE(ns)
End the previously defined scope.
Definition: ncbistl.hpp:75
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
Definition: ncbistl.hpp:100
#define BEGIN_SCOPE(ns)
Define a new scope.
Definition: ncbistl.hpp:72
#define NcbiEndl
Definition: ncbistre.hpp:548
IO_PREFIX::ostream CNcbiOstream
Portable alias for ostream.
Definition: ncbistre.hpp:149
NCBI_NS_STD::string::size_type SIZE_TYPE
Definition: ncbistr.hpp:132
static int StringToInt(const CTempString str, TStringToNumFlags flags=0, int base=10)
Convert string to int.
Definition: ncbistr.cpp:630
#define NPOS
Definition: ncbistr.hpp:133
static string IntToString(int value, TNumToStringFlags flags=0, int base=10)
Convert int to string.
Definition: ncbistr.hpp:5084
const TData & GetData(void) const
Get the Data member data.
bool IsInt(void) const
Check if variant Int is selected.
TInt GetInt(void) const
Get the variant data.
const TType & GetType(void) const
Get the Type member data.
const TData & GetData(void) const
Get the Data member data.
Definition: Seq_feat_.hpp:925
list< CRef< CSeqdesc > > Tdata
Definition: Seq_descr_.hpp:91
const Tdata & Get(void) const
Get the member data.
const TGraph & GetGraph(void) const
Get the variant data.
Definition: Seq_annot_.hpp:661
bool IsSetAssembly(void) const
how was this assembled? Check if a value has been assigned to Assembly data member.
Definition: Seq_hist_.hpp:500
list< CRef< CSeq_graph > > TGraph
Definition: Seq_annot_.hpp:195
TVersion GetVersion(void) const
Get the Version member data.
list< CRef< CAnnot_id > > TId
Definition: Seq_annot_.hpp:356
const TAccession & GetAccession(void) const
Get the Accession member data.
const TId & GetId(void) const
Get the Id member data.
Definition: Bioseq_.hpp:290
list< CRef< CSeq_align > > TAlign
Definition: Seq_annot_.hpp:194
const Tdata & Get(void) const
Get the member data.
Definition: Seq_descr_.hpp:166
bool IsSetVersion(void) const
Check if a value has been assigned to Version data member.
const TUser & GetUser(void) const
Get the variant data.
Definition: Annotdesc_.cpp:184
E_Choice Which(void) const
Which variant is currently selected.
Definition: Annotdesc_.hpp:466
const TDesc & GetDesc(void) const
Get the Desc member data.
Definition: Seq_annot_.hpp:852
const TAssembly & GetAssembly(void) const
Get the Assembly member data.
Definition: Seq_hist_.hpp:512
list< CRef< CSeq_id > > TId
Definition: Bioseq_.hpp:94
bool IsSetDesc(void) const
used only for stand alone Seq-annots Check if a value has been assigned to Desc data member.
Definition: Seq_annot_.hpp:840
bool IsSetAccession(void) const
Check if a value has been assigned to Accession data member.
const TAlign & GetAlign(void) const
Get the variant data.
Definition: Seq_annot_.hpp:641
bool IsSetId(void) const
Check if a value has been assigned to Id data member.
Definition: Seq_annot_.hpp:721
const TSeq_table & GetSeq_table(void) const
Get the variant data.
Definition: Seq_annot_.cpp:153
const TId & GetId(void) const
Get the Id member data.
Definition: Seq_annot_.hpp:733
const TFtable & GetFtable(void) const
Get the variant data.
Definition: Seq_annot_.hpp:621
list< CRef< CSeq_feat > > TFtable
Definition: Seq_annot_.hpp:193
const TData & GetData(void) const
Get the Data member data.
Definition: Seq_annot_.hpp:873
const TName & GetName(void) const
Get the variant data.
Definition: Annotdesc_.hpp:501
E_Choice Which(void) const
Which variant is currently selected.
Definition: Seq_annot_.hpp:586
list< CRef< CAnnotdesc > > Tdata
@ e_Name
a short name for this collection
Definition: Annotdesc_.hpp:97
@ e_User
user defined object
Definition: Annotdesc_.hpp:101
Definition of all error codes used in objmgr libraries (xobjmgr.lib, xobjutil.lib and others).
static int version
Definition: mdb_load.c:29
range(_Ty, _Ty) -> range< _Ty >
T max(T x_, T y_)
T min(T x_, T y_)
#define NCBI_ANNOT_TRACK_ZOOM_LEVEL_SUFFIX
static CSafeStatic< CAsnSizer > s_Sizer
NCBI_DEFINE_ERR_SUBCODE_X(10)
@ eAnnotPriority_skeleton
@ eAnnotPriority_lowest
@ eAnnotPriority_max
@ eAnnotPriority_low
@ eAnnotPriority_regular
@ eAnnotPriority_zoomed
@ eAnnotPriority_landmark
unsigned TAnnotPriority
Definition: type.c:6
#define _ASSERT
Modified on Wed Apr 17 13:08:55 2024 by modify_doxy.py rev. 669887