68 #define NCBI_USE_ERRCODE_X Objtools_Rd_GFF
87 while (pos < s.
size()) {
92 }
else if (s[pos2] ==
'+') {
95 }
else if (s[pos2] ==
'%') {
129 while ( !
in.AtEOF() ) {
131 char c =
in.PeekChar();
134 if (line.
size() > 2 && line[1] ==
'#') {
138 }
else if (c ==
'>') {
147 if ( line.
empty() ) {
154 if (record->id.empty()) {
176 loc_iter->ranges.begin();
177 for ( ; dst_iter != loc_iter->ranges.
end(); ) {
181 range.GetLength() + dst_iter->GetLength()) {
183 _TRACE(
"merging overlapping ranges: "
184 <<
range.GetFrom() <<
" - "
185 <<
range.GetTo() <<
" <-> "
186 << dst_iter->GetFrom() <<
" - "
187 << dst_iter->GetTo());
188 loc_iter->ranges.erase(dst_iter++);
198 if (rec.
key ==
"exon") {
210 if ( !iter->second->IsSetLocus() &&
211 !iter->second->IsSetLocus_tag()) {
212 iter->second->SetLocus(iter->first);
213 }
else if ( !iter->second->IsSetLocus() ||
214 iter->second->GetLocus() != iter->first) {
215 iter->second->SetSyn().push_back(iter->first);
220 for ( ; feat_iter; ++feat_iter) {
222 if (feat_iter->GetData().IsGene()) {
223 ref = &feat_iter->GetData().GetGene();
225 ref = feat_iter->GetGeneXref();
231 const_cast<CGene_ref*
>(ref)->Assign(*iter->second);
243 for ( ; feat_iter; ++feat_iter) {
249 qual_name =
"protein_id";
253 qual_name =
"transcript_id";
262 if ( !id_str.empty() ) {
271 for ( ; annot_iter; ++annot_iter) {
278 CSeq_annot::TData::TFtable::iterator feat_iter =
279 annot.
SetData().SetFtable().begin();
280 CSeq_annot::TData::TFtable::iterator feat_end =
281 annot.
SetData().SetFtable().end();
288 for (
bool has_genes =
false;
289 feat_iter != feat_end && !has_genes; ++feat_iter) {
316 x_Error(
"No consistent ID found; gene feature skipped");
320 TGeneMap::iterator iter = genes.find(gene_id);
321 if (iter == genes.end()) {
330 genes[gene_id] = gene;
349 ITERATE (TGeneMap, iter, genes) {
350 annot.
SetData().SetFtable().push_back(iter->second);
372 ERR_POST_X(1,
Error << message <<
" [GFF input, line " << line <<
']');
382 ERR_POST_X(1,
Info << message <<
" [GFF input, line " << line <<
']');
404 if ( line.
empty() || line[0] !=
'#' || line[1] !=
'#' ) {
412 if (v[0] ==
"date" && v.size() > 1) {
414 }
else if (v[0] ==
"Type" && v.size() > 1) {
416 }
else if (v[0] ==
"gff-version" && v.size() > 1) {
418 }
else if (v[0] ==
"FASTA") {
433 }
catch (exception& e) {
441 if (seqname.
empty()) {
455 if (it->GetId().empty()) {
464 our_bs->
SetId() = it->GetId();
465 if (it->IsSetDescr()) {
468 our_bs->
SetInst(it->SetInst());
477 bool misdelimited =
false;
484 x_Error(
"Skipping line due to insufficient fields",
502 record->source = v[1];
507 }
catch (std::exception& e) {
513 }
catch (std::exception& e) {
517 record->score = v[5];
521 }
else if (v[6] ==
"-") {
523 }
else if ( !(v[6] ==
".") ) {
524 x_Warn(
"Bad strand " +
string(v[6]) +
" (should be [+-.])",
528 if (v[7] ==
"0" || v[7] ==
"1" || v[7] ==
"2") {
529 record->frame = v[7][0] -
'0';
530 }
else if (v[7] ==
".") {
533 x_Warn(
"Bad frame " +
string(v[7]) +
" (should be [012.])",
544 record->loc.push_back(subloc);
554 if ( !misdelimited && (
i > 9 || (
i == 9 && v.size() > 9
559 if (record->FindAttribute(
"Target") != record->attrs.end()) {
568 if (id_it != record->attrs.end()) {
569 record->id = (*id_it)[1];
573 if (parent_it != record->attrs.end()) {
574 record->parent = (*parent_it)[1];
578 if (name_it != record->attrs.end()) {
579 record->name = (*name_it)[1];
595 feat->
SetData().SetCdregion().SetFrame
600 string tag = it->front();
604 if (
tag ==
"Parent") {
607 feat->
SetXref().push_back( xref );
612 if ( record.
source !=
"." ) {
614 source->SetQual(
"source" );
623 string tag = it->front();
625 switch (it->size()) {
637 if (
tag ==
"transcript_id") {
639 }
else if (
tag ==
"gene_id") {
642 }
else if (
tag ==
"gene") {
645 }
else if (
tag ==
"locus_tag") {
648 }
else if (
tag ==
"exon_number") {
660 feat->
SetQual().push_back(qual);
664 if ( !gene_id.empty() ) {
667 gene_id.erase(0, colon + 1);
672 if ( !iter->second ) {
675 if ( !gene.empty() ) {
676 if (iter->second->IsSetLocus() &&
677 iter->second->GetLocus() != gene) {
679 <<
"inconsistent gene name: "
680 << gene <<
" != " << iter->second->GetLocus()
681 <<
", ignoring second");
682 }
else if ( !iter->second->IsSetLocus() ) {
683 iter->second->SetLocus(gene);
686 if ( !locus_tag.empty() ) {
687 if (iter->second->IsSetLocus_tag() &&
688 iter->second->GetLocus_tag() != locus_tag) {
690 <<
"inconsistent locus tag: "
691 << locus_tag <<
" != " << iter->second->GetLocus_tag()
692 <<
", ignoring second");
693 }
else if ( !iter->second->IsSetLocus_tag() ) {
694 iter->second->SetLocus_tag(locus_tag);
719 vector<string> target;
723 if (target.size() != 3) {
730 TSeqPos tglen = tgstop - tgstart + 1;
736 reflen += it.GetRange().GetLength();
740 tgloc->
SetInt().SetId(*tgid);
741 tgloc->
SetInt().SetFrom(tgstart);
742 tgloc->
SetInt().SetTo(tgstop);
747 if (reflen == tglen && refloc->
IsInt()) {
750 ds.
SetIds().push_back(refid);
751 ds.
SetIds().push_back(tgid);
754 ds.
SetLens().push_back(reflen);
760 if (reflen != tglen && reflen != 3 * tglen) {
761 x_Warn(
"Reference and target locations have an irregular"
765 ss->SetLoc().push_back(refloc);
766 ss->SetLoc().push_back(tgloc);
767 align->
SetSegs().SetStd().push_back(ss);
793 if (
range->GetLength() == 1) {
806 si.SetStrand(it->strand);
810 seqloc->
SetMix().Set().push_front(segment);
812 seqloc->
SetMix().Set().push_back(segment);
817 if (seqloc->
GetMix().
Get().size() == 1) {
818 return seqloc->
SetMix().Set().front();
828 string attr_last_value;
829 vector<string> attr_values;
832 for (;
i < v.size(); ++
i) {
835 while (pos < s.size()) {
838 pos2 = s.find_first_of(
" \'\"\\", pos);
840 if (s[pos2] == quote_char) {
841 if (attr_values.empty()) {
842 x_Warn(
"quoted attribute tag " + attr_last_value,
846 attr_last_value += s.substr(pos, pos2 - pos);
851 attr_values.push_back(attr_last_value);
852 x_Warn(e.what() + (
" in value of " + attr_values[0]),
855 attr_last_value.erase();
856 }
else if (s[pos2] ==
'\\') {
858 attr_last_value += s.substr(pos, pos2 + 1 - pos);
860 attr_last_value += s.substr(pos, pos2 + 1 - pos);
863 pos2 = s.find_first_of(
" #;\"", pos);
867 attr_last_value += s.substr(pos, pos2 - pos);
868 attr_values.push_back(attr_last_value);
869 attr_last_value.erase();
874 if (pos2 == s.size() - 1) {
884 if (attr_values.empty()) {
895 quote_char = s[pos2];
906 if ( !attr_values.empty() ) {
929 vector<string>
v2, attr;
939 ITERATE (vector<string>, it2, vals) {
940 string value( *it2 );
964 if (attr.size() == 0) {
969 if (attr[0] ==
"gbkey" && attr.size() == 2) {
970 record.
key = attr[1];
986 if (!record.
id.empty()) {
989 else if (!record.
parent.empty()) {
1003 if (gene_it != record.
attrs.
end()) {
1004 id += (*gene_it)[1];
1007 if (transcript_it != record.
attrs.
end()) {
1008 if ( !
id.
empty() ) {
1011 id += (*transcript_it)[1];
1017 for ( ; dbxref_it != record.
attrs.
end() &&
1018 dbxref_it->front() ==
"db_xref"; ++dbxref_it) {
1019 if ( !
id.
empty() ) {
1022 id += (*dbxref_it)[1];
1029 if (record.
key ==
"start_codon" || record.
key ==
"stop_codon") {
1032 }
else if (record.
key ==
"CDS"
1036 }
else if (record.
key ==
"exon") {
1046 id += record.
key +
' ' + (*it)[1];
1060 bool merge_overlaps =
false;
1061 if (dest.
key ==
"CDS" &&
1062 (src.
key ==
"start_codon" || src.
key ==
"stop_codon")) {
1065 merge_overlaps =
true;
1068 if ((dest.
key ==
"start_codon" || dest.
key ==
"stop_codon") &&
1072 merge_overlaps =
true;
1077 int best_frame = dest.
frame;
1080 bool merged =
false;
1082 if (slit->accession != dlit->accession) {
1083 if (dest.
loc.size() == 1) {
1087 }
else if (slit->strand != dlit->strand) {
1088 if (dest.
loc.size() == 1) {
1094 if (slit->ranges.begin()->GetFrom() <
1095 dlit->ranges.begin()->GetFrom()) {
1096 best_frame = src.
frame;
1099 if (slit->ranges.begin()->GetTo() >
1100 dlit->ranges.begin()->GetTo()) {
1101 best_frame = src.
frame;
1104 if (merge_overlaps) {
1106 dlit->merge_ranges.insert(*set_iter);
1110 dlit->ranges.insert(*set_iter);
1118 dest.
loc.push_back(*slit);
1122 dest.
frame = best_frame;
1123 if (src.
key != dest.
key) {
1131 x_Warn(
"Merging features with different keys: " + dest.
key
1146 const string&
tag = sait->front();
1147 while (dait != dait_end && dait->front() <
tag) {
1151 if (dait_tag == dait_end || dait_tag->front() !=
tag) {
1154 if (dait != dait_end && dait->front() ==
tag) {
1155 while (dait != dait_end && *dait < *sait) {
1159 if (dait != dait_end && *dait == *sait) {
1162 if (dait_tag != dait_end) {
1163 while (dait != dait_end && dait->front() ==
tag) {
1167 dait_tag = dait_end;
1184 }
else if ( seq2.
NotEmpty() && seq != seq2) {
1194 if ((*it)->GetData().IsFtable()) {
1201 annots.push_back(annot);
1215 if ((*it)->GetData().IsAlign()) {
1222 annots.push_back(annot);
1228 switch (record.
type) {
1248 x_Warn(
"x_ResolveSeqName: invalid cache entry for " + name);
1256 x_Warn(
"x_ResolveNewSeqName returned null or invalid ID for " + name);
1274 if (name.find_first_not_of(
"0123456789") == string::npos) {
1315 seq->
SetId().push_back(id_copy);
1318 const string& mol = mol0.empty() ?
m_DefMol : mol0;
1319 if (mol.empty() || mol ==
"dna") {
1321 }
else if (mol ==
"rna") {
1323 }
else if (mol ==
"protein") {
1326 x_Warn(
"unrecognized sequence type " + mol +
"; assuming DNA");
1336 for ( ; feat_iter; ++feat_iter) {
1342 qual_name =
"protein_id";
1346 qual_name =
"transcript_id";
1355 if ( !id_str.empty() ) {
1365 for ( ; annot_iter; ++annot_iter) {
1372 CSeq_annot::TData::TFtable::iterator feat_iter =
1373 annot.
SetData().SetFtable().begin();
1374 CSeq_annot::TData::TFtable::iterator feat_end =
1375 annot.
SetData().SetFtable().end();
1382 for (
bool has_genes =
false;
1383 feat_iter != feat_end && !has_genes; ++feat_iter) {
1410 x_Error(
"No consistent ID found; gene feature skipped");
1414 TGeneMap::iterator iter = genes.find(gene_id);
1415 if (iter == genes.end()) {
1424 genes[gene_id] = gene;
1443 ITERATE (TGeneMap, iter, genes) {
1444 annot.
SetData().SetFtable().push_back(iter->second);
1451 if ( !tse || gene_refs.
empty() ) {
1455 if ( !iter->second->IsSetLocus() &&
1456 !iter->second->IsSetLocus_tag()) {
1457 iter->second->SetLocus(iter->first);
1458 }
else if ( !iter->second->IsSetLocus() ||
1459 iter->second->GetLocus() != iter->first) {
1460 iter->second->SetSyn().push_back(iter->first);
1465 for ( ; feat_iter; ++feat_iter) {
1467 if (feat_iter->GetData().IsGene()) {
1468 ref = &feat_iter->GetData().GetGene();
1470 ref = feat_iter->GetGeneXref();
1475 if (iter != gene_refs.
end()) {
1476 const_cast<CGene_ref*
>(ref)->Assign(*iter->second);
1505 while (it !=
attrs.
end() && it->front() == att_name
1506 && it->size() <= min_values) {
User-defined methods of the data storage class.
User-defined methods of the data storage class.
bool IsReverse(ENa_strand s)
User-defined methods of the data storage class.
User-defined methods of the data storage class.
Code to handle Concise Idiosyncratic Gapped Alignment Report notation.
void SetToTime(const CTime &time, EPrecision prec=ePrecision_second)
Base class for reading FASTA sequences.
@ fKeepBadKey
= 0x02 (As much as possible, try to use bad keys as if they were acceptable)
@ fTranslateBadKey
= 0x04 (yields misc_feature /standard_name="...")
static CRef< CSeq_feat > CreateSeqFeat(const string &feat, CSeq_loc &location, const TFlags flags=0, ILineErrorListener *pMessageListener=nullptr, unsigned int line=0, std::string *seq_id=nullptr, ITableFilter *filter=nullptr)
static void AddFeatQual(CRef< CSeq_feat > sfp, const string &feat_name, const string &qual, const string &val, const TFlags flags=0, ILineErrorListener *pMessageListener=nullptr, int line=0, const string &seq_id=std::string())
@Gb_qual.hpp User-defined methods of the data storage class.
void GetLabel(string *label) const
ESubtype GetSubtype(void) const
const CSeq_id & GetSeq_id(TDim row) const
Get seq-id (the first one if segments have different ids).
namespace ncbi::objects::
const string & GetNamedQual(const CTempString &qual_name) const
Return a named qualifier.
const CGene_ref * GetGeneXref(void) const
See related function in util/feature.hpp.
Seq-loc iterator class – iterates all intervals from a seq-loc in the correct order.
Simple implementation of ILineReader for i(o)streams.
CTempString implements a light-weight string on top of a storage buffer whose lifetime management is ...
Template class for iteration on objects of class C (non-medifiable version)
Template class for iteration on objects of class C.
Abstract base class for lightweight line-by-line reading.
container_type::const_iterator const_iterator
container_type::iterator iterator
const_iterator end() const
iterator_bool insert(const value_type &val)
container_type::value_type value_type
const_iterator find(const key_type &key) const
iterator_bool insert(const value_type &val)
const_iterator begin() const
parent_type::iterator iterator
const_iterator end() const
const_iterator lower_bound(const key_type &key) const
parent_type::const_iterator const_iterator
static const char si[8][64]
std::ofstream out("events_result.xml")
main entry point for tests
Operators to edit gaps in sequences.
static CRef< CFeat_id > s_StringToFeatId(const string &str)
static string & s_URLDecode(const CTempString &s, string &out)
Reader for GFF (including GTF) files.
unsigned int TSeqPos
Type for sequence locations and lengths.
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
#define NON_CONST_ITERATE(Type, Var, Cont)
Non constant version of ITERATE macro.
#define ERR_POST_X(err_subcode, message)
Error posting with default error code and given error subcode.
void Error(CExceptionArgs_Base &args)
void Warning(CExceptionArgs_Base &args)
void Info(CExceptionArgs_Base &args)
virtual CRef< CSeq_id > x_ResolveSeqName(const string &name)
Falls back to x_ResolveNewSeqName on cache misses.
virtual void x_PlaceAlignment(CSeq_align &align, const SRecord &record)
virtual void x_ParseV3Attributes(SRecord &record, const TStrVec &v, SIZE_TYPE &i)
virtual void x_ParseDateComment(const TStr &date)
virtual CRef< CBioseq > x_ResolveID(const CSeq_id &id, const TStr &mol)
Falls back to x_ResolveNewID on cache misses.
virtual void x_PlaceSeq(CBioseq &seq)
virtual void x_PlaceFeature(CSeq_feat &feat, const SRecord &record)
virtual CRef< CSeq_loc > x_ResolveLoc(const SRecord::TLoc &loc)
virtual void x_MergeRecords(SRecord &dest, const SRecord &src)
virtual void x_Warn(const string &message, unsigned int line=0)
TDelayedRecords m_DelayedRecords
CRef< CSeq_entry > ReadSet(int max_seqs=kMax_Int, ILineErrorListener *pMessageListener=nullptr)
Read multiple sequences (by default, as many as are available.)
TLoc loc
from accession, start, stop, strand
virtual void x_ParseTypeComment(const TStr &moltype, const TStr &seqname)
virtual CRef< CBioseq > x_ResolveNewID(const CSeq_id &id, const string &mol)
The base version just constructs a shell so as not to depend on the object manager,...
CRef< CSeq_entry > Read(CNcbiIstream &in, TFlags flags=fDefaults)
unsigned int x_GetLineNumber(void)
virtual void x_ReadFastaSequences(ILineReader &in)
virtual CRef< SRecord > x_NewRecord(void)
virtual void x_ParseAndPlace(const SRecord &record)
virtual void x_MergeAttributes(SRecord &dest, const SRecord &src)
virtual void x_Reset(void)
Reset all state, since we're between streams.
TFlags x_GetFlags(void) const
virtual CRef< CSeq_id > x_ResolveNewSeqName(const string &name)
virtual void x_Error(const string &message, unsigned int line=0)
virtual void x_RemapGeneRefs(CRef< CSeq_entry > &, TGeneRefs &)
virtual void x_CreateGeneFeatures(CRef< CSeq_entry > &)
unsigned int m_LineNumber
TSeqNameCache m_SeqNameCache
TAttrs::const_iterator FindAttribute(const string &att_name, size_t min_values=1) const
virtual void x_AddAttribute(SRecord &record, vector< string > &attr)
virtual bool x_IsLineUcscMetaInformation(const TStr &)
virtual string x_FeatureID(const SRecord &record)
Returning the empty string indicates that record constitutes an entire feature.
virtual void x_Info(const string &message, unsigned int line=0)
virtual bool x_ParseStructuredComment(const TStr &line)
virtual CRef< CSeq_align > x_ParseAlignRecord(const SRecord &record)
virtual CRef< CSeq_feat > x_ParseFeatRecord(const SRecord &record)
virtual void x_SetProducts(CRef< CSeq_entry > &)
set< TSeqRange > ranges
the set of ranges that make up this location this allows us to separately assign frame even if the ra...
virtual bool x_SplitKeyValuePair(const string &, string &, string &)
virtual void x_ParseV2Attributes(SRecord &record, const TStrVec &v, SIZE_TYPE &i)
virtual CRef< SRecord > x_ParseFeatureInterval(const TStr &line)
ILineReader * m_LineReader
@ fAssumeNuc
Assume nucs unless accns indicate otherwise.
@ fMergeOnyCdsMrna
move protein_id and transcript_id to products for mRNA and CDS features
@ fAllIdsAsLocal
all identifiers are local IDs
@ fNoGTF
don't honor/recognize GTF conventions
@ fSetProducts
create gene features for mRNAs and CDSs if none exist already
@ fCreateGeneFeats
numeric identifiers are local IDs
@ fGBQuals
merge exons with the same transcript_id
@ fNumericIdsAsLocal
all identifiers are local IDs
@ fMergeExons
restrict merging to just CDS and mRNA features
virtual void Assign(const CSerialObject &source, ESerialRecursionMode how=eRecursive)
Optimized implementation of CSerialObject::Assign, which is not so efficient.
ENa_strand GetStrand(void) const
Get the location's strand.
TRange GetTotalRange(void) const
const CSeq_id * GetId(void) const
Get the id of the location return NULL if has multiple ids or no id at all.
void Reset(void)
Reset reference object.
bool NotEmpty(void) const THROWS_NONE
Check if CRef is not empty – pointing to an object and has a non-null value.
CRange< TSeqPos > TSeqRange
typedefs for sequence ranges
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define END_SCOPE(ns)
End the previously defined scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
#define BEGIN_SCOPE(ns)
Define a new scope.
IO_PREFIX::istream CNcbiIstream
Portable alias for istream.
NCBI_NS_STD::string::size_type SIZE_TYPE
static int StringToInt(const CTempString str, TStringToNumFlags flags=0, int base=10)
Convert string to int.
static list< string > & Split(const CTempString str, const CTempString delim, list< string > &arr, TSplitFlags flags=0, vector< SIZE_TYPE > *token_pos=NULL)
Split a string using specified delimiters.
static SIZE_TYPE FindNoCase(const CTempString str, const CTempString pattern, SIZE_TYPE start, SIZE_TYPE end, EOccurrence which=eFirst)
Find the pattern in the specified range of a string using a case insensitive search.
static bool MatchesMask(CTempString str, CTempString mask, ECase use_case=eCase)
Match "str" against the "mask".
static bool EndsWith(const CTempString str, const CTempString end, ECase use_case=eCase)
Check if a string ends with a specified suffix value.
static double StringToDouble(const CTempStringEx str, TStringToNumFlags flags=0)
Convert string to double.
static string IntToString(int value, TNumToStringFlags flags=0, int base=10)
Convert int to string.
static string ParseEscapes(const CTempString str, EEscSeqRange mode=eEscSeqRange_Standard, char user_char='?')
Parse C-style escape sequences in the specified string.
bool empty(void) const
Return true if the represented string is empty (i.e., the length is zero)
static bool StartsWith(const CTempString str, const CTempString start, ECase use_case=eCase)
Check if a string starts with a specified prefix value.
static bool SplitInTwo(const CTempString str, const CTempString delim, string &str1, string &str2, TSplitFlags flags=0)
Split a string into two pieces using the specified delimiters.
static unsigned int StringToUInt(const CTempString str, TStringToNumFlags flags=0, int base=10)
Convert string to unsigned int.
CTempString substr(size_type pos) const
Obtain a substring from this string, beginning at a given offset.
size_type find_first_of(const CTempString match, size_type pos=0) const
Find the first occurrence of any character in the matching string within the current string,...
size_type size(void) const
Return the length of the represented array.
@ fSplit_Tokenize
All delimiters are merged and trimmed, to get non-empty tokens only.
@ fSplit_MergeDelimiters
Merge adjacent delimiters.
bool IsSetLocus(void) const
Official gene symbol Check if a value has been assigned to Locus data member.
const TLocus & GetLocus(void) const
Get the Locus member data.
TStr & SetStr(void)
Select the variant.
TScore & SetScore(void)
Assign a value to Score data member.
TLens & SetLens(void)
Assign a value to Lens data member.
void SetSegs(TSegs &value)
Assign a value to Segs data member.
void SetDim(TDim value)
Assign a value to Dim data member.
void SetType(TType value)
Assign a value to Type data member.
TStarts & SetStarts(void)
Assign a value to Starts data member.
TStrands & SetStrands(void)
Assign a value to Strands data member.
void SetNumseg(TNumseg value)
Assign a value to Numseg data member.
TIds & SetIds(void)
Assign a value to Ids data member.
@ eType_partial
mapping pieces together
TXref & SetXref(void)
Assign a value to Xref data member.
void SetQual(const TQual &value)
Assign a value to Qual data member.
void SetLocation(TLocation &value)
Assign a value to Location data member.
bool IsCdregion(void) const
Check if variant Cdregion is selected.
void SetProduct(TProduct &value)
Assign a value to Product data member.
const TLocation & GetLocation(void) const
Get the Location member data.
TLocal & SetLocal(void)
Select the variant.
const TData & GetData(void) const
Get the Data member data.
void SetId(TId &value)
Assign a value to Id data member.
void SetData(TData &value)
Assign a value to Data data member.
void SetVal(const TVal &value)
Assign a value to Val data member.
TQual & SetQual(void)
Assign a value to Qual data member.
bool IsSetProduct(void) const
product of process Check if a value has been assigned to Product data member.
void SetPoint(TPoint value)
Assign a value to Point data member.
void SetId(TId &value)
Assign a value to Id data member.
ENa_strand
strand of nucleic acid
void SetStrand(TStrand value)
Assign a value to Strand data member.
TFrom GetFrom(void) const
Get the From member data.
E_Choice Which(void) const
Which variant is currently selected.
TGi GetGi(void) const
Get the variant data.
const Tdata & Get(void) const
Get the member data.
bool IsSetStrand(void) const
Check if a value has been assigned to Strand data member.
TStrand GetStrand(void) const
Get the Strand member data.
bool IsGi(void) const
Check if variant Gi is selected.
bool IsInt(void) const
Check if variant Int is selected.
const TInt & GetInt(void) const
Get the variant data.
const TMix & GetMix(void) const
Get the variant data.
@ e_not_set
No variant selected.
@ e_MaxChoice
== e_Named_annot_track+1
TSet & SetSet(void)
Select the variant.
TAnnot & SetAnnot(void)
Assign a value to Annot data member.
void SetDescr(TDescr &value)
Assign a value to Descr data member.
TSeq & SetSeq(void)
Select the variant.
TSeq_set & SetSeq_set(void)
Assign a value to Seq_set data member.
void SetData(TData &value)
Assign a value to Data data member.
TId & SetId(void)
Assign a value to Id data member.
TAnnot & SetAnnot(void)
Assign a value to Annot data member.
const TId & GetId(void) const
Get the Id member data.
list< CRef< CSeq_id > > TId
void SetInst(TInst &value)
Assign a value to Inst data member.
void SetDescr(TDescr &value)
Assign a value to Descr data member.
const TData & GetData(void) const
Get the Data member data.
list< CRef< CSeq_annot > > TAnnot
TUpdate_date & SetUpdate_date(void)
Select the variant.
E_Choice Which(void) const
Which variant is currently selected.
@ eRepr_virtual
no seq data
range(_Ty, _Ty) -> range< _Ty >
constexpr bool empty(list< Ts... >) noexcept
const struct ncbi::grid::netcache::search::fields::KEY key
const CharType(& source)[N]
Defines: CTimeFormat - storage class for time format.
Useful/utility classes and methods.
std::istream & in(std::istream &in_, double &x_)
double r(size_t dimension_, const Int4 *score_, const double *prob_, double theta_)
static int match(register const pcre_uchar *eptr, register const pcre_uchar *ecode, const pcre_uchar *mstart, int offset_top, match_data *md, eptrblock *eptrb, unsigned int rdepth)
static const char * str(char *buf, int n)