116 if ( type1 != type2 ) {
120 int diff = order1 - order2;
139 int diff = subtype1 - subtype2;
173 if (diff)
return diff;
177 return s1.str().compare(s2.str());
185 if ((*it)->IsSetData () && (*it)->GetData ().IsGene ()) {
186 return &((*it)->GetData ().GetGene ());
204 xref.push_back(gref);
205 gref->SetData().SetGene(
value);
214 return ref.
SetData().SetGene();
218 xref.push_back(gref);
219 return gref->SetData().SetGene();
226 if ((*it)->IsSetData () && (*it)->GetData ().IsProt ()) {
227 return &((*it)->GetData ().GetProt ());
245 xref.push_back(pref);
246 pref->SetData().SetProt(
value);
256 return ref.
SetData().SetProt();
260 xref.push_back(pref);
261 return pref->SetData().SetProt();
271 if ((*xit)->IsSetId() && (*xit)->GetId().Equals(
id)) {
285 x1->SetId().Assign(
id);
300 const string& qual_name,
const string& qual_val)
304 if ( (*iter)->GetQual() == qual_name ) {
305 (*iter)->SetVal(qual_val);
331 if ( (*iter)->GetQual() != qual_name ) {
332 new_qual_vec.push_back(*iter);
338 if ( new_qual_vec.empty() ) {
380 if( ! sCurrentExceptTextContents.empty() ) {
381 sCurrentExceptTextContents +=
", ";
392 list<CTempString> list_of_except_texts;
396 string new_except_texts;
397 ITERATE(list<CTempString>, text_it, list_of_except_texts) {
399 if( ! new_except_texts.empty() ) {
400 new_except_texts +=
", ";
407 if( new_except_texts.empty() ) {
419 if ( (*iter)->GetDb() == db) {
433 if ( (*iter)->GetQual() == qual_name && (*iter)->IsSetVal()) {
434 return (*iter)->GetVal();
454 vector<CTempStringEx> exception_parts;
457 ITERATE( vector<CTempStringEx>, part_it, exception_parts ) {
469 if( sCleanedInputText.
empty() ) {
478 return ( p_exception_text_set->find(sCleanedInputText) !=
479 p_exception_text_set->end() );
487 {
"16S ribosomal RNA and 23S ribosomal RNA overlap",
true },
488 {
"16S ribosomal RNA and 5S ribosomal RNA overlap",
true },
489 {
"23S ribosomal RNA and 16S ribosomal RNA overlap",
true },
490 {
"23S ribosomal RNA and 5S ribosomal RNA overlap",
true },
491 {
"5S ribosomal RNA and 16S ribosomal RNA overlap",
true },
492 {
"5S ribosomal RNA and 23S ribosomal RNA overlap",
true },
493 {
"adjusted for low-quality genome",
true },
494 {
"alternative processing",
false },
495 {
"alternative start codon",
false },
496 {
"annotated by transcript or proteomic data",
false },
497 {
"artificial frameshift",
false },
498 {
"artificial location",
false },
499 {
"circular RNA",
false },
500 {
"dicistronic gene",
false },
501 {
"gene split at contig boundary",
false },
502 {
"gene split at sequence boundary",
false },
503 {
"genetic code exception",
false },
504 {
"heterogeneous population sequenced",
false },
505 {
"low-quality sequence region",
false },
506 {
"mismatches in transcription",
true },
507 {
"mismatches in translation",
true },
508 {
"modified codon recognition",
false },
509 {
"nonconsensus splice site",
false },
510 {
"rearrangement required for product",
false },
511 {
"reasons given in citation",
false },
512 {
"ribosomal slippage",
false },
513 {
"RNA editing",
false },
514 {
"trans-splicing",
false },
515 {
"transcribed product replaced",
false },
516 {
"transcribed pseudogene",
false },
517 {
"translated product replaced",
false },
518 {
"translation initiation by tRNA-Leu at CUG codon",
true },
519 {
"unclassified transcription discrepancy",
true },
520 {
"unclassified translation discrepancy",
true },
521 {
"unextendable partial coding region",
false }
528 vector<string> exception_list;
531 while (it != sc_ExceptionPairMap.end()) {
532 if (include_refseq || !it->second) {
533 exception_list.push_back(it->first);
538 return exception_list;
545 if (it != sc_ExceptionPairMap.end() && (allow_refseq || !it->second)) {
556 if (it == sc_ExceptionPairMap.end()) {
569 const CObject_id& obj_type = (*it)->GetType();
570 if ( obj_type.
IsStr() && obj_type.
GetStr() == ext_type ) {
571 ret.
Reset(it->GetPointer());
577 if (
GetExt().GetType().IsStr()) {
578 if (
GetExt().GetType().GetStr() == ext_type) {
581 else if (
GetExt().GetType().GetStr() ==
"CombinedFeatureUserObjects") {
584 if (
f.GetData().IsObject() &&
585 f.GetData().GetObject().GetType().IsStr() &&
586 f.GetData().GetObject().GetType().GetStr() == ext_type) {
587 ret.
Reset(&
f.GetData().GetObject());
602 const CObject_id& obj_type = (*it)->GetType();
603 if ( obj_type.
IsStr() && obj_type.
GetStr() == ext_type ) {
604 ret.
Reset(it->GetPointer());
610 if (
GetExt().GetType().IsStr()) {
611 if (
GetExt().GetType().GetStr() == ext_type) {
614 else if (
GetExt().GetType().GetStr() ==
"CombinedFeatureUserObjects") {
617 if (
f.GetData().IsObject() &&
618 f.GetData().GetObject().GetType().IsStr() &&
619 f.GetData().GetObject().GetType().GetStr() == ext_type) {
620 ret.
Reset(&
f.SetData().SetObject());
655 const CObject_id& obj_type = (*it)->GetType();
656 if ( obj_type.
IsStr() && obj_type.
GetStr() == ext_type ) {
665 if (
GetExt().GetType().IsStr()) {
666 if (
GetExt().GetType().GetStr() == ext_type) {
669 else if (
GetExt().GetType().GetStr() ==
"CombinedFeatureUserObjects") {
676 if (
f.GetData().IsObject() &&
677 f.GetData().GetObject().GetType().IsStr() &&
678 f.GetData().GetObject().GetType().GetStr() == ext_type) {
681 new_ext_data.push_back(*it);
684 if( new_ext_data.empty() ) {
686 }
else if( new_ext_data.size() != curr_ext_data.size() ) {
688 new_ext_data.swap(curr_ext_data);
bool IsReverse(ENa_strand s)
static int s_GetCdregionOrder(const CSeqFeatData &fd)
DEFINE_STATIC_ARRAY_MAP(TExceptionPairMap, sc_ExceptionPairMap, k_LegalExceptionMap)
static bool s_IsOperon(const CSeqFeatData &fd)
CStaticArrayMap< const char *, bool, PNocase_CStr > TExceptionPairMap
SStaticPair< const char *, bool > TExceptionPairElem
static const TExceptionPairElem k_LegalExceptionMap[]
@Gb_qual.hpp User-defined methods of the data storage class.
ESubtype GetSubtype(void) const
namespace ncbi::objects::
const CProt_ref * GetProtXref(void) const
get protein (if present) from Seq-feat.xref list
const string & GetNamedQual(const CTempString &qual_name) const
Return a named qualifier.
int GetTypeSortingOrder(void) const
Return relative importance order of features by their type.
void RemoveExceptText(const string &exception_text)
Remove all instances of the given exception text in this feature, and reset the except flag if there ...
void AddExceptText(const string &exception_text)
Add the given exception_text and set the except flag to true.
bool HasSeqFeatXref(const CSeqFeatXref::TId &id) const
CProt_ref & SetProtXref(void)
int CompareNonLocation(const CSeq_feat &f2, const CSeq_loc &loc1, const CSeq_loc &loc2) const
Compare relative order of this feature and feature f2 similarily to the Compare() method,...
void RemoveExt(const string &ext_type)
Remove all Exts with the given type.
CConstRef< CDbtag > GetNamedDbxref(const CTempString &db) const
Return a specified DB xref.
int CompareStrict(const CSeq_feat &f2) const
Compare features more thoroughly than Compare() - return zero only if the features are identical,...
CConstRef< CUser_object > FindExt(const string &ext_type) const
Find extension by type in exts container.
CGene_ref & SetGeneXref(void)
static vector< string > GetListOfLegalExceptions(bool include_refseq)
Produces the list of legal exceptions.
int TAddExt
binary OR of EAddExt
bool HasExceptionText(const string &exception_text) const
Returns whether or not the given exception_text is set for this feature.
int Compare(const CSeq_feat &f2) const
Compare relative order of this feature and feature f2, ordering first by features' coordinates,...
void AddOrReplaceQualifier(const string &qual_name, const string &qual_val)
Add a qualifier to this feature, or replace the value for the first one if it already exists.
static bool IsExceptionTextInLegalList(const string &exception_text, bool allow_refseq)
Indicates whether this specific text occurs in the list of legal exceptions.
void AddQualifier(const string &qual_name, const string &qual_val)
Add a qualifier to this feature.
void RemoveQualifier(const string &qual_name)
Remove all qualifiers with the given name; do nothing if no such qualifier exists.
@ fAddExt_ReplaceAll
Before adding, remove all previous.
AutoPtr< TExceptionTextSet > GetTempExceptionTextSet(void) const
Returns a case-insensitive set of exception texts.
const CGene_ref * GetGeneXref(void) const
See related function in util/feature.hpp.
void AddDbxref(const string &db_name, const string &db_key)
add a DB xref to this feature
void AddExt(CRef< CUser_object > ext, TAddExt add_flags=0)
Add an extension by type in exts container.
bool AddSeqFeatXref(const CSeqFeatXref::TId &id)
static bool IsExceptionTextRefSeqOnly(const string &exception_text)
Indicates whether this specific text is a RefSeq-only exception.
~CSeq_feat(void)
destructor
class CStaticArrayMap<> provides access to a static array in much the same way as CStaticArraySet<>,...
TBase::const_iterator const_iterator
CTempString implements a light-weight string on top of a storage buffer whose lifetime management is ...
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
#define ERASE_ITERATE(Type, Var, Cont)
Non-constant version with ability to erase current element, if container permits.
#define NON_CONST_ITERATE(Type, Var, Cont)
Non constant version of ITERATE macro.
#define NCBI_USER_THROW(message)
Throw a quick-and-dirty runtime exception of type 'CException' with the given error message and error...
#define MSerial_AsnText
I/O stream manipulators –.
ENa_strand GetStrand(void) const
Get the location's strand.
int CompareSubLoc(const CSeq_loc &loc, ENa_strand strand, const ISubLocFilter *filter=NULL) const
Compare first-level sub-locations sequentially to order them by biological "complexity".
void Reset(void)
Reset reference object.
void Reset(void)
Reset reference object.
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
static CTempString TruncateSpaces_Unsafe(const CTempString str, ETrunc where=eTrunc_Both)
Truncate spaces in a string.
static int CompareNocase(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2)
Case-insensitive compare of a substring with another string.
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.
bool empty(void) const
Return true if the represented string is empty (i.e., the length is zero)
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 string TruncateSpaces(const string &str, ETrunc where=eTrunc_Both)
Truncate spaces in a string.
@ fSplit_Tokenize
All delimiters are merged and trimmed, to get non-empty tokens only.
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.
void SetTag(TTag &value)
Assign a value to Tag data member.
TData & SetData(void)
Assign a value to Data data member.
const TStr & GetStr(void) const
Get the variant data.
const TType & GetType(void) const
Get the Type member data.
void SetDb(const TDb &value)
Assign a value to Db data member.
vector< CRef< CUser_field > > TData
TXref & SetXref(void)
Assign a value to Xref data member.
void SetQual(const TQual &value)
Assign a value to Qual data member.
const TKey & GetKey(void) const
Get the Key member data.
vector< CRef< CDbtag > > TDbxref
TDbxref & SetDbxref(void)
Assign a value to Dbxref data member.
void SetData(TData &value)
Assign a value to Data data member.
const TData & GetData(void) const
Get the Data member data.
bool IsSetQual(void) const
qualifiers Check if a value has been assigned to Qual data member.
E_Choice Which(void) const
Which variant is currently selected.
const TExts & GetExts(void) const
Get the Exts member data.
bool IsProt(void) const
Check if variant Prot is selected.
bool IsSetExt(void) const
user defined structure extension Check if a value has been assigned to Ext data member.
TExcept & SetExcept(void)
Assign a value to Except data member.
list< CRef< CUser_object > > TExts
void ResetExcept(void)
Reset Except data member.
const TQual & GetQual(void) const
Get the Qual member data.
bool IsSetXref(void) const
cite other relevant features Check if a value has been assigned to Xref data member.
TExts & SetExts(void)
Assign a value to Exts data member.
TData & SetData(void)
Assign a value to Data data member.
void ResetExts(void)
Reset Exts data member.
bool IsGene(void) const
Check if variant Gene is selected.
TFrame GetFrame(void) const
Get the Frame member data.
const TData & GetData(void) const
Get the Data member data.
bool IsSetData(void) const
the specific data Check if a value has been assigned to Data data member.
bool IsSetExcept(void) const
something funny about this? Check if a value has been assigned to Except data member.
const TExcept_text & GetExcept_text(void) const
Get the Except_text member data.
bool IsSetExcept_text(void) const
explain if except=TRUE Check if a value has been assigned to Except_text data member.
const TDbxref & GetDbxref(void) const
Get the Dbxref member data.
const TCdregion & GetCdregion(void) const
Get the variant data.
void ResetExt(void)
Reset Ext data member.
void SetVal(const TVal &value)
Assign a value to Val data member.
bool IsSetExts(void) const
set of extensions; will replace 'ext' field Check if a value has been assigned to Exts data member.
TExt & SetExt(void)
Assign a value to Ext data member.
TExcept GetExcept(void) const
Get the Except member data.
const TXref & GetXref(void) const
Get the Xref member data.
vector< CRef< CSeqFeatXref > > TXref
vector< CRef< CGb_qual > > TQual
bool IsSetDbxref(void) const
support for xref to other databases Check if a value has been assigned to Dbxref data member.
TQual & SetQual(void)
Assign a value to Qual data member.
const TExt & GetExt(void) const
Get the Ext member data.
TExcept_text & SetExcept_text(void)
Assign a value to Except_text data member.
void ResetQual(void)
Reset Qual data member.
const TImp & GetImp(void) const
Get the variant data.
@ eFrame_not_set
not set, code uses one
ENa_strand
strand of nucleic acid
const struct ncbi::grid::netcache::search::fields::SIZE size
double f(double x_, const double &y_)
Template structure SStaticPair is simlified replacement of STL pair<> Main reason of introducing this...