88 if (num_row < 2)
return aln_type;
92 for (
int row = 0; row < num_row; ++row) {
95 if ( !handle )
continue;
120 }
else if (this_type !=
type) {
127 aln_type =
"protein";
130 aln_type =
"protein-to-nucleotide";
134 aln_type =
"nucleotide";
159 int f_subtype = (*feat_it)->GetData().GetSubtype();
173 CSeqTable_column_info::GetTypeInfo_enum_EField_id();
214 if (type_iter != temp_types.
end()) {
215 subtypes.
insert(
"gene_model");
216 temp_types.
erase(type_iter);
222 type_iter = temp_types.
find(subtype_iter->GetStoragekey());
223 if (type_iter != temp_types.
end()) {
224 temp_types.
erase(type_iter);
230 if (*iter ==
"variation") {
244 for ( ; header_names && *header_names; ++header_names) {
245 if (headers.count(
string(*header_names)) == 0) {
255 static const char* graph_headers[] = {
256 "location-from",
"span",
"values",
NULL
262 static const char* bins_headers[] = {
263 "pos",
"pvalue",
"trait",
"pmids",
"reportedGenes",
264 "mappedGenes",
"snpId",
"trackType",
"clinSigID",
NULL
270 static const char* GWAS_headers[] = {
271 "pos",
"pvalue",
"trackType",
NULL
277 static const char* HapMap_headers[] = {
278 "pos",
"value",
"trackType",
NULL
310 if ((*descrIter)->IsName()) {
311 info->m_DataId = (*descrIter)->GetName();
333 feat_info->m_Subtype = *subtype_iter;
334 info_list.push_back(feat_info);
338 if ( !aligns.empty() ) {
341 if ( !aln_type.empty() ) {
342 info->m_Subtype = aln_type;
343 info_list.push_back(
info);
347 info->m_Subtype =
"graph";
348 info_list.push_back(
info);
357 if ( !subtypes.
empty() ) {
359 info_list.push_back(
info);
365 if ( !
info->m_Subtype.empty() ) {
366 info_list.push_back(
info);
376 const string& subtype,
389 if (annot_type == align) {
390 track_key =
"alignment_track";
392 }
else if (annot_type ==
ftable) {
393 if (subtype ==
"gene_model") {
394 track_key =
"gene_model_track";
395 }
else if (subtype ==
"dbVar") {
396 track_key =
"dbvar_track";
397 }
else if (subtype ==
"dbSNP") {
398 track_key =
"SNP_track";
400 track_key =
"feature_track";
403 }
else if (annot_type == graph) {
404 if (subtype ==
"graph") {
405 track_key =
"graph_track";
406 }
else if (subtype ==
"GWAS") {
407 track_key =
"SNP_Bins_track";
409 }
else if (annot_type == seq_table) {
410 if (subtype ==
"GWAS") {
411 track_key =
"SNP_Bins_track";
412 }
else if (subtype ==
"HapMap") {
413 track_key =
"HapMapRR_track";
414 }
else if (subtype ==
"SNP_bins") {
415 track_key =
"SNP_bins_track";
416 }
else if (subtype ==
"graph") {
417 track_key =
"graph_track";
419 track_key =
"feature_track";
423 if (subtype ==
"sequence") {
424 track_key =
"sequence_track";
425 }
else if (subtype ==
"six_frame") {
426 track_key =
"six_frames_translation";
427 }
else if (subtype ==
"segment_map") {
428 track_key =
"segment_map_track";
454 LOG_POST(
Error <<
"Get error when trying to retrieve NA meta-data. Error: " << e.
GetMsg());
542 bool isGetLinks)
const
555 GetNAMetaData(md_set, naas, filtering, pMDSource, pUidsSource, isGetLinks);
564 bool isGetLinks)
const
591 const string& context,
596 for (TEntrezIds::const_iterator it = uids.begin(); it != uids.end();) {
598 for (
size_t i =
kChunkSize;
i != 0 && it != uids.end(); ++it, --
i)
600 if (canceledCallback && canceledCallback->
IsCanceled())
608 const string& naa)
const
620 if (md_set.
empty())
return;
623 if (iter != md_set.
end()) {
639 info->m_Dbname =
"SADB";
647 feat_info->m_Subtype = *subtype_iter;
648 track_info.push_back(feat_info);
666 if ( !aln_type.empty() ) {
667 info->m_Subtype = aln_type;
668 track_info.push_back(
info);
675 track_info.push_back(
info);
680 info->m_Subtype =
"graph";
684 track_info.push_back(
info);
688 track_info.push_back(
info);
709 if ( !subtypes.
empty() ) {
711 track_info.push_back(
info);
717 if ( !
info->m_Subtype.empty() ) {
718 track_info.push_back(
info);
729 const TNAAs& naas)
const
741 if (md_set.
empty())
return;
817 for (
auto i : uids_from) {
820 info +=
i.AsString();
842 LOG_POST(
Error <<
"Got error when trying to get NA list for seq-id: " <<
m_SeqIdHandle.AsString() <<
" and context: " << context <<
". Error: " << e.
GetMsg());
855 if (query_key_str.empty() || web_env.empty())
864 LOG_POST(
Error <<
"Got error when trying to get NA id list for viewer_context: " << context <<
" and query_key: " << query_key_str <<
". Error: " << e.
GetMsg());
872 for (; ds_iter; ++ds_iter) {
875 if (c_i != ds_iter->end() && sum_i != ds_iter->end()) {
889 if(uids.size() == 0) {
904 md_set[iCacheHit->second->m_Name] = iCacheHit->second;
907 non_cached_uids.push_back(*iuids);
912 if(uids.size() == 0) {
915 if(non_cached_uids.size() > 0) {
916 if(non_cached_uids.size() == uids.size()) {
925 if (non_cached_uids.size() > 0) {
931 +
". esummary.fcgi query for ";
933 for (
auto i : non_cached_uids) {
941 for (; ds_iter; ++ds_iter) {
944 if (c_i != ds_iter->end() && sum_i != ds_iter->end()) {
950 data->
m_Id = a_i->get_value();
958 md_set[data->
m_Name] = data;
959 if (!data->
m_Id.empty())
973 catch (
const exception&) {
1004 filtered_ids.push_back(*i_uids);
1007 uids.swap(filtered_ids);
1011 #define USE_GI_CACHING
1012 #ifdef USE_GI_CACHING
1017 bool isMatch(
false);
1037 EUidsSource* pUidsSource)
const
1040 uids_from.push_back(uid);
1052 return !gis_to.empty() && gis_to[0] ==
m_Gi;
1055 LOG_POST(
Error <<
"Get error when trying to get GIs for NA uid: " << uid <<
". Error: " << e.
GetMsg());
1073 if(!
x_GetNAId(na_uid, naa, pUidsSource)) {
1101 if(!isIncremental) {
1110 gis.
insert(iCacheHit->second.begin(), iCacheHit->second.end());
1120 uids_from.push_back(uid);
1155 string container_path[] = {
"eLinkResult",
"LinkSet",
"LinkSetDb" };
1156 const int container_path_length = 3;
1157 string content_path[] = {
"Link",
"Id" };
1158 const int content_path_length = 2;
1166 if (container->
get_name() == container_path[cp++]) {
1168 for (; cp < container_path_length; ++cp) {
1170 for (it = container->
begin(); it != container->
end(); ++it) {
1183 for (it1 = container->
begin(); it1 != container->
end(); ++it1) {
1190 if (content->
get_name() == content_path[cp++]) {
1192 for (; cp < content_path_length; ++cp) {
1194 for (it2 = content->
begin(); it2 != content->
end(); ++it2) {
1209 gis_to.push_back(NStr::StringToNumeric<TGi>(
id));
1214 std::sort(gis_to.begin(), gis_to.end());
1227 LOG_POST(
Error <<
"Get error when trying to get GIs for uid: " << uid <<
". Error: " << e.
GetMsg());
1239 cached_gis.
insert(*i_gis_to);
1251 if(
x_GetNAId(uid, *inaas, pUidsSource)) {
1252 uids.push_back(uid);
1270 uid = iCacheHit->second;
1290 ecli.
Search(
"seqannot", naa, uids);
1294 LOG_POST(
Error <<
"Get error when trying to search NAAs for: " << naa <<
". Error: " << e.
GetMsg());
1299 NCBI_ASSERT(uids.size() == 1,
"More that one uid is returned for NAA");
1324 if (
NStr::Equal(
i->get_name(),
"Algorithm-List"))
continue;
1326 string node_name =
i->get_name();
1327 if (node_name ==
"Descriptor") {
1330 data.
m_Title = e_i->get_content();
1331 }
else if (
NStr::Equal(e_i->get_name(),
"Comment")) {
1332 string tmp_str = e_i->get_content();
1342 }
else if (
NStr::Equal(a_i->get_name(),
"scope")) {
1343 data.
m_Scope = a_i->get_value();
1350 else if (node_name ==
"Provider") {
1357 }
else if (node_name ==
"XClass") {
1364 }
else if (node_name ==
"Properties") {
1367 string e_name = e_i->get_name();
1368 if (e_name ==
"TargetAssembly") {
1374 }
else if (e_name ==
"LinkList") {
1381 if (
NStr::Equal(url_entrez_i->get_name(),
"URL_Link")) {
1384 label = lln_i->get_content();
1385 }
else if (
NStr::Equal(lln_i->get_name(),
"URL")) {
1386 url = lln_i->get_content();
1389 }
else if (
NStr::Equal(url_entrez_i->get_name(),
"Entrez_Link")) {
1395 label = lln_i->get_content();
1396 }
else if (
NStr::Equal(lln_i->get_name(),
"ID")) {
1397 url = lln_i->get_content();
1400 if ( !
label.empty() && !url.empty() ) {
1401 url =
"https://www.ncbi.nlm.nih.gov/" +
1405 if ( !
label.empty() && !url.empty() ) {
1413 }
else if (node_name ==
"Content") {
1419 string e_name = e_i->get_name();
1420 if (e_name ==
"Annot") {
1423 annot_types.
insert(a_i->get_value());
1446 vector<string> priorytized_types;
1447 priorytized_types.push_back(
1449 priorytized_types.push_back(
1451 priorytized_types.push_back(
1454 ITERATE(vector<string>, type_iter, priorytized_types) {
1456 if (at_iter != annot_types.
end()) {
1471 uids_from.push_back(NStr::StringToNumeric<TEntrezId>(data.
m_Id));
1482 LOG_POST(
Error <<
"Get error when trying to get Entrez links for NA id: " << data.
m_Id <<
". Error: " << e.
GetMsg());
1488 for (itLinkInfo = nodes.
begin(); itLinkInfo != nodes.
end(); ++itLinkInfo) {
1493 if (db_to ==
"nuccore")
1503 LOG_POST(
Error <<
"Get error when trying to get Entrez links for link name: " << link_name <<
". Error: " << e.
GetMsg());
1507 string link(
"https://www.ncbi.nlm.nih.gov/");
1511 if (c_link->second == link) {
1516 data.
m_Links[html_tag] = link;
static CRef< CScope > m_Scope
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
void SetMaxReturn(int ret_max)
Uint8 Search(const string &db, const string &term, vector< objects::CSeq_id_Handle > &uids, const string &xml_path=kEmptyStr)
void Summary(const string &db, const vector< objects::CSeq_id_Handle > &uids, xml::document &docsums, const string &version="")
CConfigurableItems - a static list of items that can be configured.
string GetStoragekey(int type, int subtype) const
Get the key used to store this type of feature.
help class for iterating through the NA DocSum one by one.
CNADocSumIterator(const CNAUtils::TEntrezIds &uids, const int max_nas)
xml::node::const_iterator operator->() const
xml::node::const_iterator m_Iter
unique_ptr< xml::document > m_Doc
xml::node::const_iterator m_DocSumRoot
const xml::node & operator*() const
static const CFeatList * GetFeatList()
TDim CheckNumRows(void) const
Validatiors.
const CSeq_id & GetSeq_id(TDim row) const
Get seq-id (the first one if segments have different ids).
bool IsSeq_table(void) const
bool IsFtable(void) const
Data structure for holding basic data track information.
Interface for testing cancellation request in a long lasting operation.
container_type::const_iterator const_iterator
const_iterator end() const
const_iterator find(const key_type &key) const
iterator_bool insert(const value_type &val)
const_iterator begin() const
const_iterator find(const key_type &key) const
const_iterator end() const
The xml::attributes class is used to access all the attributes of one xml::node.
The xml::document class is used to hold the XML tree and various bits of information about it.
const node & get_root_node(void) const
Get a reference to the root node of this document.
The xml::node::const_iterator provides a way to access children nodes similar to a standard C++ conta...
The xml::node_set::const_iterator class is used to iterate over nodes in a node set.
The xml::node_set class is used to store xpath query result set.
iterator begin()
Get an iterator that points to the beginning of the xpath query result node set.
bool empty() const
Inform if the xpath query result node set is empty.
iterator end()
Get an iterator that points one past the last node in the xpath query result node set.
The xml::node class is used to hold information about one XML node.
bool is_text(void) const
Find out if this node is a text node or sometiming like a text node, CDATA for example.
const char * get_name(void) const
Get the name of this xml::node.
iterator end(void)
Get an iterator that points one past the last child for this node.
iterator find(const char *name, const ns *nspace=NULL)
Find the first child node that has the given name and namespace.
iterator begin(void)
Get an iterator that points to the beginning of this node's children.
node_set run_xpath_query(const xpath_expression &expr)
Run the given XPath query.
const char * get_content(void) const
Get the content for this text node.
static DLIST_TYPE *DLIST_NAME() first(DLIST_LIST_TYPE *list)
SStrictId_Entrez::TId TEntrezId
TEntrezId type for entrez ids which require the same strictness as TGi.
#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 NCBI_ASSERT(expr, mess)
#define LOG_POST(message)
This macro is deprecated and it's strongly recomended to move in all projects (except tests) to macro...
void Error(CExceptionArgs_Base &args)
const string & GetMsg(void) const
Get message string.
const string & FindName(TEnumValueType value, bool allowBadValue) const
Find name of the enum by its numeric value.
void x_SearchNAIds(TEntrezIds &uids, const TNAAs &naas, bool filtering, EUidsSource *pUidsSource=NULL) const
Search all NAAs for a given term.
string m_AssmAcc
GenColl assembly accession.
static void GetColumnHeader(set< string > &headers, const objects::CSeq_annot &annot)
Collect all column header names for a given seq-table.
static void ELinkQuery(const string &db_from, const string &db_to, const TEntrezIds &uids_from, TEntrezIds &uids_to, const string &cmd="neighbor", const string &xpath="//Link/Id/text()")
Queries elink.fcgi with a vector of uids/seq-ids (seq-ids preferred for future compatibility) and ret...
TGi m_Gi
GI of m_TargetSeq; it may be ZERO_GI for one of two reasons: either a target seq is not given at all ...
CTrackInfo::TTrackInfoList TTrackInfoList
string m_AnnotType
annot type, such as ftable, seq-table, align
objects::CBioseq_Handle m_BioseqHandle
Derived values which make sense only if m_TargetSeq is set.
string m_xClass
annotation category
static TNAAtoUidCache sm_NAAtoUidCache
string m_Scope
NAA-specific info.
static void ESearchQuery(const string &db, const string &term, TEntrezIds &uids, size_t &count, const int ret_max, const string &xpath="//IdList/Id/text()")
Queries esearch.fcgi and returns a vector of uids/seq-ids (seq-ids preferred for future compatibility...
void x_FilterNAIds(TEntrezIds &uids, EUidsSource *pUidsSource=NULL) const
filter a given list of NA uids and keep only the ones that are related to a given gi (m_GI)
EMetaDataSource
source of obtained NA metadata were internal caches hit, partially hit or totally missed during some ...
EEntrezDB m_SeqDB
Entrez db name for m_TargetSeq: nucleotide/protein or Undef if no TargetSeq is given.
void x_GetAllNAIdsWithContext(TEntrezIds &uids, const string &context) const
get all available NA ids applied to a viewer context for a given gi.
set< string > m_Subtypes
feature/track types (track-specific)
static void GetAllGIs(const TNAA &naa, EEntrezDB eedb, TGis &gis, EUidsSource *pUidsSource=NULL)
string TNAA
typedefs for NAA meta-data
void x_GetNAIds(TEntrezIds &uids, const string &context="") const
Get all available NA uids w/wo a context.
void GetNAMetaData(TNAMetaDataSet &md_set, const string &na, bool filtering=false, EMetaDataSource *pMDSource=NULL, EUidsSource *pUidsSource=NULL, bool isGetLinks=true) const
Get meta-data for a specific NA.
vector< objects::CSeq_id_Handle > TSeqIdHandles
static TEntrezIdtoGiCache sm_UidtoGiCache
static string GetAnnotName(const objects::CSeq_annot_Handle &annot_handle)
CRef< objects::CScope > m_Scope
Scope helping resolve sequences and retrieve annotations.
void x_Init()
Initialize some internal states.
static string GetAlignType(const objects::CSeq_align &align, objects::CScope &scope)
Get alignment type.
void GetAllNAMetaData(TNAMetaDataSet &md_set, const string &context="", ICanceled *canceledCallback=0) const
Get meta-data for a given NAA associated with seq_id.
void x_GetNAMetaData(TNAMetaDataSet &md_set, const TEntrezIds &uids, bool isGetLinks, EMetaDataSource *pSource=NULL) const
Retrieve NA meta data for a list of NA uids.
static void FeatSubtypes2TrackSubtypes(set< string > &subtypes, const set< string > &feat_subtypes)
Convert feature subtypes to track subtypes.
static const string & GetUnnamedAnnot()
Get the commonly used symbol representing a unnnamed annotation.
ELinksStatus m_LinksStatus
string m_Id
annotation id. It may only apply to NAs from SADB
void x_GetAllNAIds(TEntrezIds &uids) const
get all available NA uids for a given gi.
string m_Descr
annotation description (or comment)
static string GetSeqTableSubtype(const set< string > &headers)
Guess the track subtype based on seq-table headers.
static bool IsGeneModelFeature(int type, int subtype)
Does feature belong to gene model track Gene, RNA, cdregion, exon, C_region, and VDJ segments.
static string CreateIdStr(const vector< T > &uids)
Convert a list of ids into a comma-delimited string.
static string GetAnnotComment(const objects::CSeq_annot_Handle &annot_handle)
static void DataType2TrackType(const string &annot_type, const string &subtype, string &track_key, string &subkey)
Map data type to track type.
objects::CSeq_id_Handle m_SeqIdHandle
sequence handles
static bool GetAnnotShown(const objects::CSeq_annot &annot)
string m_Title
annotation title
static CTrackInfo::TTrackInfoList GetTrackInfo(objects::CSeq_annot_Handle annot_handle)
Get data track information from a seq-annot.
static bool x_GetNAId(TEntrezId &uid, const string &naa, EUidsSource *pUidsSource=NULL)
get an id for a given NAA string returns false if no id is found
void x_GetNAEntrezLinks(CAnnotMetaData &data) const
Retrieve Entrez links for a given NA.
CSeqUtils::TEntrezIds TEntrezIds
int m_MaxNAMeta
maximal number of NAAs for retrieving meta-data.
static TEntrezIdtoMetaDataCache sm_UidtoMetaDataCache
void GetNATrackInfo(TTrackInfoList &track_info, const string &naa) const
Do data track discovery for a given NA.
bool x_NAIdMatchesGI(TEntrezId uid, EUidsSource *pUidsSource=NULL) const
returns true if an uid is related to a given gi (m_GI) or GI is ZERO_GI
void x_GetNAAs(TNAAs &naas, const TEntrezIds &uids) const
Retrieve NAAs for a list of NA uids.
string m_Name
annotation name, e.g. named annotation accession
EEntrezDB
eutils databases that can be used
static void x_GetAllGIs(TEntrezId uid, EEntrezDB eedb, TGis &gis, EUidsSource *pUidsSource=NULL, bool isIncremental=false)
get all GIs for a given uid this needs a given database where to search for GIs
static void GetFeatSubtypes(const objects::CSeq_annot &annot, set< string > &subtypes)
Collect unique list of feature subtypes for all features in a seq-annot.
list< CRef< CTrackInfo > > TTrackInfoList
void GetAllNAAs(TNAAs &naas, const string &context="") const
Get a list of NAAs associated with the target sequence.
CConstRef< objects::CSeq_id > m_TargetSeq
The target sequence associating with the NAAs.
void x_ParseNAMetaData(CAnnotMetaData &data, const char *xml_str) const
Parse the meta-data xml DocSum.
@ EUidsSource_EmptyRequest
@ EMetaDataSource_EmptyRequest
@ EMetaDataSource_EmptyAfterFilteringRequest
@ EEDB_All
try both nucleotide and protein databases, merge results
const CSeq_id & GetId(const CSeq_loc &loc, CScope *scope)
If all CSeq_ids embedded in CSeq_loc refer to the same CBioseq, returns the first CSeq_id found,...
@ eGetId_ForceGi
return only a gi-based seq-id
static CRef< CObjectManager > GetInstance(void)
Return the existing object manager or create one.
CBioseq_Handle GetBioseqHandle(const CSeq_id &id)
Get bioseq handle by seq-id.
TBioseqCore GetBioseqCore(void) const
Get bioseq core structure.
CConstRef< CSeq_annot > GetCompleteSeq_annot(void) const
Complete and return const reference to the current seq-annot.
CScope & GetScope(void) const
Get scope this handle belongs to.
SAnnotSelector & IncludeNamedAnnotAccession(const string &acc, int zoom_level=0)
SAnnotSelector & SetCollectNames(bool value=true)
Collect available annot names rather than annots.
SAnnotSelector & IncludeAnnotType(TAnnotType type)
Include annotation type in the search.
SAnnotSelector & SetMaxSize(TMaxSize max_size)
Set maximum number of annotations to find.
SAnnotSelector & AddNamedAnnots(const CAnnotName &name)
Add named annot to set of annots names to look for.
void Reset(void)
Reset reference object.
static TThisType GetWhole(void)
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
virtual bool IsCanceled(void) const =0
static string IntToString(int value, TNumToStringFlags flags=0, int base=10)
Convert int to string.
static string & Replace(const string &src, const string &search, const string &replace, string &dst, SIZE_TYPE start_pos=0, SIZE_TYPE max_replace=0, SIZE_TYPE *num_replace=0)
Replace occurrences of a substring within a string.
static bool EqualNocase(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2)
Case-insensitive equality of a substring with another string.
static enable_if< is_arithmetic< TNumeric >::value||is_convertible< TNumeric, Int8 >::value, string >::type NumericToString(TNumeric value, TNumToStringFlags flags=0, int base=10)
Convert numeric value to string.
static bool Equal(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2, ECase use_case=eCase)
Test for equality of a substring with another string.
void Stop(void)
Suspend the timer.
string AsSmartString(CTimeSpan::ESmartStringPrecision precision, ERound rounding, CTimeSpan::ESmartStringZeroMode zero_mode=CTimeSpan::eSSZ_SkipZero) const
Transform elapsed time to "smart" string.
void Start(void)
Start the timer.
static const char label[]
TField_id GetField_id(void) const
Get the Field_id member data.
const TColumns & GetColumns(void) const
Get the Columns member data.
bool IsSetFeat_subtype(void) const
subtype of features in this table, defined in header SeqFeatData.hpp Check if a value has been assign...
bool CanGetField_name(void) const
Check if it is safe to call GetField_name method.
TFeat_subtype GetFeat_subtype(void) const
Get the Feat_subtype member data.
vector< CRef< CSeqTable_column > > TColumns
const TField_name & GetField_name(void) const
Get the Field_name member data.
bool CanGetField_id(void) const
Check if it is safe to call GetField_id method.
const Tdata & Get(void) const
Get the member data.
const TInst & GetInst(void) const
Get the Inst member data.
list< CRef< CSeq_align > > TAlign
const TDesc & GetDesc(void) const
Get the Desc member data.
bool IsSetDesc(void) const
used only for stand alone Seq-annots Check if a value has been assigned to Desc data member.
TMol GetMol(void) const
Get the Mol member data.
const TAlign & GetAlign(void) const
Get the variant data.
static string SelectionName(E_Choice index)
Retrieve selection name (for diagnostic purposes).
const TSeq_table & GetSeq_table(void) const
Get the variant data.
const TFtable & GetFtable(void) const
Get the variant data.
list< CRef< CSeq_feat > > TFtable
bool IsFtable(void) const
Check if variant Ftable is selected.
const TData & GetData(void) const
Get the Data member data.
E_Choice Which(void) const
Which variant is currently selected.
list< CRef< CAnnotdesc > > Tdata
@ eMol_na
just a nucleic acid
DEFINE_CLASS_STATIC_FAST_MUTEX(CNAUtils::sm_NAAtoUidCacheMutex)
static string s_MakeUidtoGiCacheKey(TEntrezId uid, CNAUtils::EEntrezDB eedb)
static const char * kSnpSubtypeStr
static string s_EEDBToString(CNAUtils::EEntrezDB eedb)
static bool s_MatchHeaders(const char **header_names, const set< string > &headers)
static string s_GetFeatSubtypeStr(int subtype)
constexpr auto sort(_Init &&init)
constexpr bool empty(list< Ts... >) noexcept
const struct ncbi::grid::netcache::search::fields::SIZE size
const struct ncbi::grid::netcache::search::fields::SUBKEY subkey