66 static bool IsLegalGoTermType(
const string&
val);
68 const string&
GetTerm()
const {
return m_Term; }
70 const string&
GetGoid()
const {
return m_Goid; }
76 const vector<string>&
GetErrors()
const {
return m_Errors; }
94 for (
auto sub_it : sublist) {
96 if (sub_it->IsSetLabel() && sub_it->GetLabel().IsStr()) {
97 label = sub_it->GetLabel().GetStr();
103 if (sub_it->GetData().IsStr()) {
104 m_Term = sub_it->GetData().GetStr();
106 m_Errors.push_back(
"Bad data format for GO term qualifier term");
109 if (sub_it->GetData().IsInt()) {
111 }
else if (sub_it->GetData().IsStr()) {
112 m_Goid = sub_it->GetData().GetStr();
114 m_Errors.push_back(
"Bad data format for GO term qualifier GO ID");
117 if (sub_it->GetData().IsInt()) {
118 m_Pmid = sub_it->GetData().GetInt();
120 m_Errors.push_back(
"Bad data format for GO term qualifier PMID");
123 if (sub_it->GetData().IsStr()) {
126 m_Errors.push_back(
"Bad data format for GO term qualifier evidence");
132 m_Errors.push_back(
"Unrecognized label on GO term qualifier field " +
label);
144 if (compare > 0)
return false;
145 if (compare < 0)
return true;
149 }
else if (l.
GetPmid() <
r.GetPmid()) {
154 auto ev2 =
r.GetEvidence();
155 if (ev1.size() > ev2.size()) {
157 }
else if (ev1.size() < ev2.size()) {
160 auto it1 = ev1.begin();
161 auto it2 = ev2.begin();
162 while (it1 != ev1.end() && it2 != ev2.end() && compare == 0) {
168 return (compare < 0);
200 size_t num_terms = 0;
201 for (
auto it : field_list) {
202 if (!it->IsSetData() || !it->GetData().IsFields()) {
212 for (
auto msg :
a.GetErrors()) {
220 pair<string, string> p(
a.GetGoid(),
a.GetTerm());
221 auto s = id_terms.
find(
a.GetGoid());
222 if (s == id_terms.
end()) {
223 id_terms[
a.GetGoid()] =
a.GetTerm();
226 "Inconsistent GO terms for GO ID " +
a.GetGoid()));
231 if (num_terms > terms.
size()) {
239 vector<TGoTermError> rval;
252 for (
auto it : user_object.
GetData()) {
254 if (!it->GetData().IsFields()) {
256 }
else if (!it->IsSetLabel() || !it->GetLabel().IsStr() || !it->IsSetData()) {
259 string qualtype = it->GetLabel().GetStr();
262 && it->GetData().IsFields()) {
282 auto it = field_list.
begin();
283 while (it != field_list.end()) {
284 if (!(*it)->IsSetData() || !(*it)->GetData().IsFields()) {
292 it = field_list.erase(it);
317 for (
auto it : user_object.
SetData()) {
319 if (!it->GetData().IsFields()) {
321 }
else if (!it->IsSetLabel() || !it->GetLabel().IsStr() || !it->IsSetData()) {
324 string qualtype = it->GetLabel().GetStr();
327 && it->GetData().IsFields()) {
339 bool found_existing =
false;
341 auto it = field.
SetData().SetFields().begin();
342 while (it != field.
SetData().SetFields().end()) {
343 bool do_erase =
false;
344 if ((*it)->IsSetLabel() && (*it)->GetLabel().IsStr() &&
345 NStr::Equal((*it)->GetLabel().GetStr(), val_name)) {
346 if (found_existing) {
349 (*it)->SetData().SetStr(
val);
350 found_existing =
true;
354 it = field.
SetData().SetFields().erase(it);
360 if (!found_existing) {
364 field.
SetData().SetFields().push_back (go_id);
371 bool found_existing =
false;
373 auto it = field.
SetData().SetFields().begin();
374 while (it != field.
SetData().SetFields().end()) {
375 bool do_erase =
false;
376 if ((*it)->IsSetLabel() && (*it)->GetLabel().IsStr() &&
377 NStr::Equal((*it)->GetLabel().GetStr(), val_name)) {
378 if (found_existing) {
381 (*it)->SetData().SetInt(
val);
382 found_existing =
true;
386 it = field.
SetData().SetFields().erase(it);
392 if (!found_existing) {
396 field.
SetData().SetFields().push_back (go_id);
404 auto it = field.
SetData().SetFields().begin();
405 while (it != field.
SetData().SetFields().end()) {
406 if ((*it)->IsSetLabel() && (*it)->GetLabel().IsStr() &&
407 NStr::Equal((*it)->GetLabel().GetStr(), val_name)) {
408 it = field.
SetData().SetFields().erase(it);
440 field.
SetData().SetFields().push_back (go_id);
464 bool found_existing =
false;
466 for (
auto it : feat.
SetExt().SetData()) {
467 if (it->IsSetLabel() &&
468 it->GetLabel().IsStr() &&
470 (!it->IsSetData() || it->GetData().IsFields())) {
471 it->SetData().SetFields().push_back(field);
472 found_existing =
true;
476 if (!found_existing) {
478 new_list->
SetLabel().SetStr(val_name);
479 new_list->
SetData().SetFields().push_back(field);
480 feat.
SetExt().SetData().push_back(new_list);
510 if (it->IsSetLabel() && it->GetLabel().IsStr() &&
513 it->GetData().IsFields()) {
514 return it->GetData().GetFields().size();
@ eErr_SEQ_FEAT_BadGeneOntologyFormat
@ eErr_SEQ_FEAT_GeneOntologyTermMissingGOID
@ eErr_SEQ_FEAT_DuplicateGeneOntologyTerm
@ eErr_SEQ_FEAT_InconsistentGeneOntologyTermAndId
static bool IsLegalGoTermType(const string &val)
const string & GetGoid() const
vector< string > m_Errors
const set< string > & GetEvidence() const
const vector< string > & GetErrors() const
CGoTermSortStruct(const CUser_object::TData &sublist)
const string & GetTerm() const
namespace ncbi::objects::
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
Include a standard set of the NCBI C++ Toolkit most basic headers.
The NCBI C++ standard methods for dealing with std::string.
static const string kGoTermText
void SetGoTermPMID(CUser_field &field, int pmid)
bool RemoveDuplicateGoTerms(CUser_object::TData &field_list)
size_t CountProcessGoTerms(const CSeq_feat &feat)
static const string kGeneOntology
static const string kGoTermComponent
void AddFunctionGoTerm(CSeq_feat &feat, CRef< CUser_field > field)
size_t CountComponentGoTerms(const CSeq_feat &feat)
void ClearGoTermPMID(CUser_field &field)
void SetGoTermText(CUser_field &field, const string &val)
void AddProcessGoTerm(CSeq_feat &feat, CRef< CUser_field > field)
static const string kGoTermEvidence
void SetGoTermValue(CUser_field &field, const string &val, const string &val_name)
size_t CountGoTerms(const CSeq_feat &feat, const string &list_name)
size_t CountFunctionGoTerms(const CSeq_feat &feat)
void ClearGoTermEvidence(CUser_field &field)
void SetGoTermId(CUser_field &field, const string &val)
void AddGoTermEvidence(CUser_field &field, const string &val)
void AddComponentGoTerm(CSeq_feat &feat, CRef< CUser_field > field)
bool operator<(const CGoTermSortStruct &l, const CGoTermSortStruct &r)
static const string kGoTermID
static const string kGoTermFunction
static const string kGoTermPubMedID
void AddGoTermToList(CSeq_feat &feat, CRef< CUser_field > field, const string &val_name)
void ClearGoTermValue(CUser_field &field, const string &val_name)
static const string kGoTermRef
static const string kGoTermProcess
bool IsGeneOntology(const CUser_object &user_object)
void GetGoTermErrors(CUser_object::TData field_list, map< string, string > &id_terms, vector< TGoTermError > &errors)
pair< EErrType, string > TGoTermError
#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.
static bool IsBlank(const CTempString str, SIZE_TYPE pos=0)
Check if a string is blank (has no text).
static string IntToString(int value, TNumToStringFlags flags=0, int base=10)
Convert int to string.
static bool EqualCase(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2)
Case-sensitive equality of a substring with another string.
static int Compare(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2, ECase use_case=eCase)
Compare of a substring with another 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 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.
virtual void Process(SOCK sock)=0
Runs asynchronously (from a separate thread) for each request.
static const char label[]
bool IsSetData(void) const
the object itself Check if a value has been assigned to Data data member.
bool IsStr(void) const
Check if variant Str is selected.
bool IsSetType(void) const
type of object within class Check if a value has been assigned to Type data member.
const TData & GetData(void) const
Get the Data member data.
bool IsFields(void) const
Check if variant Fields is selected.
TData & SetData(void)
Assign a value to Data data member.
const TStr & GetStr(void) const
Get the variant data.
void SetLabel(TLabel &value)
Assign a value to Label data member.
const TData & GetData(void) const
Get the Data member data.
void SetData(TData &value)
Assign a value to Data data member.
const TType & GetType(void) const
Get the Type member data.
bool IsSetData(void) const
Check if a value has been assigned to Data data member.
vector< CRef< CUser_field > > TData
bool IsSetExt(void) const
user defined structure extension Check if a value has been assigned to Ext data member.
void SetExt(TExt &value)
Assign a value to Ext data member.
const TExt & GetExt(void) const
Get the Ext member data.
static void text(MDB_val *v)
double r(size_t dimension_, const Int4 *score_, const double *prob_, double theta_)