69 for (
const CSeq_feat& feat : context.GetFeat()) {
70 if (feat.IsSetPseudo() && feat.GetPseudo() && (feat.GetData().IsCdregion() || feat.GetData().IsRna())) {
71 const CSeq_feat* gene = context.GetGeneForFeature(feat);
72 if (gene && !context.IsPseudo(*gene)) {
74 m_Objs[
kPseudoMismatch].Add(*context.SeqFeatObjRef(*gene),
false).Fatal();
87 context.ReplaceSeq_feat(*obj, *sf, *new_feat);
97 for (
const CSeq_feat& feat : context.GetFeat()) {
99 m_Objs[
"[n] rRNA feature[s] [is] too short"].Add(*context.SeqFeatObjRef(feat)).Fatal();
115 if (!
f.IsSetQual()) {
118 for (
const auto& it :
f.GetQual()) {
119 if (it->IsSetQual() &&
NStr::Equal(it->GetQual(),
"regulatory_class") &&
130 bool has_genes =
false;
131 for (
const CSeq_feat& feat : context.GetAllFeat()) {
138 for (
const CSeq_feat& feat : context.GetFeat()) {
139 if (
IsRBS(feat) && !context.GetGeneForFeature(feat)) {
140 m_Objs[
"[n] RBS feature[s] [does] not have overlapping gene[s]"].Add(*context.SeqFeatObjRef(feat)).Fatal();
156 f.GetData().IsCdregion() ||
157 f.GetData().IsRna() ||
168 for (
const CSeq_feat& feat : context.GetFeat()) {
170 const CSeq_feat* gene_feat = context.GetGeneForFeature(feat);
172 m_Objs[
"[n] feature[s] [has] no genes"].Add(*context.SeqFeatObjRef(feat)).Fatal();
181 const string kExtraGene =
"[n] gene feature[s] [is] not associated with a CDS or RNA feature.";
182 const string kExtraPseudo =
"[n] pseudo gene feature[s] [is] not associated with a CDS or RNA feature.";
183 const string kExtraGeneNonPseudoNonFrameshift =
"[n] non-pseudo gene feature[s] are not associated with a CDS or RNA feature and [does] not have frameshift in the comment.";
187 for (
const auto& it : feat.
GetXref()) {
194 if (it->IsSetData() && it->GetData().IsGene()) {
195 have_gene_ref =
true;
196 const CGene_ref& gene_ref = it->GetData().GetGene();
203 && (gene_ref.
IsSetLocus() || locus.empty())) {
215 const auto& genes = context.FeatGenes();
216 const auto&
all = context.FeatAll();
218 if ((gene->IsSetComment() && !gene->GetComment().empty()) || (gene->GetData().GetGene().IsSetDesc() && !gene->GetData().GetGene().GetDesc().empty())) {
221 const CSeq_loc& loc = gene->GetLocation();
224 if (feat->GetData().IsCdregion() || feat->GetData().IsRna()) {
225 const CSeq_loc& loc_f = feat->GetLocation();
228 bool have_gene_ref =
false;
233 else if (!have_gene_ref) {
235 if (best_gene.
NotEmpty() && &*best_gene == &*gene) {
254 const auto& genes = context.FeatGenes();
255 const auto& feats = context.FeatAll();
256 for (
size_t i = 0;
i < genes.size();
i++) {
257 if (genes[
i]->IsSetPseudo() && genes[
i]->GetPseudo()) {
260 const CSeq_loc& loc_i = genes[
i]->GetLocation();
262 for (
size_t j = 0; j < feats.size(); j++) {
263 if (feats[j]->GetData().IsGene()) {
266 const CSeq_loc& loc_j = feats[j]->GetLocation();
271 if (genes[
i] == context.GetGeneForFeature(*feats[j])) {
277 m_Objs[
"[n] gene feature[s] [is] not associated with any feature and [is] not pseudo."].Add(*context.SeqFeatObjRef(*genes[
i]));
305 if (it->IsLiteral()) {
306 offset += it->GetLiteral().GetLength();
307 if (!it->GetLiteral().IsSetSeq_data()) {
311 else if (it->GetLiteral().GetSeq_data().IsGap()) {
316 else if (it->IsLoc()) {
323 if (left >= last_gap_stop && left - last_gap_stop <= 3) {
324 extend_len = left - last_gap_stop;
329 CSeqVector svec(seq, scope, CBioseq_Handle::CBioseq_Handle::eCoding_Iupac);
331 TSeqPos count = extend_len ? extend_len : 1;
333 for (
unsigned i = 0;
i < count;
i++) {
334 if (codon[
i] ==
'N') {
344 svec.
GetSeqData(left - extend_len, left - extend_len + 3, codon);
346 if (codon ==
"CTA" || codon ==
"TTA" || codon ==
"TCA") {
351 if (codon ==
"TAG" || codon ==
"TAA" || codon ==
"TGA") {
365 extend_len = seq.
GetLength() - right - 1;
373 if (it->IsLiteral()) {
374 if (!it->GetLiteral().IsSetSeq_data()) {
378 else if (it->GetLiteral().GetSeq_data().IsGap()) {
382 offset += it->GetLiteral().GetLength();
384 else if (it->IsLoc()) {
391 if (next_gap_start > right && next_gap_start - right - 1 <= 3) {
392 extend_len = next_gap_start - right - 1;
397 CSeqVector svec(seq, scope, CBioseq_Handle::CBioseq_Handle::eCoding_Iupac);
399 TSeqPos count = extend_len ? extend_len : 1;
400 svec.
GetSeqData(right + 1, right + count + 1, codon);
401 for (
unsigned i = 0;
i < count;
i++) {
402 if (codon[
i] ==
'N') {
412 svec.
GetSeqData(right + extend_len - 3, right + extend_len, codon);
414 if (codon ==
"CTA" || codon ==
"TTA" || codon ==
"TCA") {
419 if (codon ==
"TAG" || codon ==
"TAA" || codon ==
"TGA") {
456 const CBioseq& bioseq = context.CurrentBioseq();
457 const CSeqdesc* biosrc = context.GetBiosource();
458 if (!biosrc || context.IsEukaryotic(&biosrc->
GetSource()) || context.IsOrganelle(&biosrc->
GetSource()) || bioseq.
IsAa()) {
461 for (
const CSeq_feat& feat : context.GetAllFeat()) {
462 if (feat.IsSetData() && feat.GetData().IsCdregion() &&
IsNonExtendable(feat.GetLocation(), bioseq, &(context.GetScope()))) {
463 m_Objs[
"[n] feature[s] [has] partial ends that do not abut the end of the sequence or a gap, and cannot be extended by 3 or fewer nucleotides to do so"].Add(*context.SeqFeatObjRef(feat, &feat)).Fatal();
484 context.ReplaceSeq_feat(*obj, *sf, *new_feat);
494 DISCREPANCY_CASE(BACTERIAL_PARTIAL_NONEXTENDABLE_EXCEPTION, SEQUENCE,
eDisc |
eSubmitter |
eSmart,
"Find partial feature ends on bacterial sequences that cannot be extended but have exceptions: on when non-eukaryote")
496 const CBioseq& bioseq = context.CurrentBioseq();
497 const CSeqdesc* biosrc = context.GetBiosource();
498 if (!biosrc || context.IsEukaryotic(&biosrc->
GetSource()) || context.IsOrganelle(&biosrc->
GetSource()) || bioseq.
IsAa()) {
501 for (
const CSeq_feat& feat : context.GetAllFeat()) {
503 m_Objs[
"[n] feature[s] [has] partial ends that do not abut the end of the sequence or a gap, and cannot be extended by 3 or fewer nucleotides to do so, but [has] the correct exception"].Add(*context.SeqFeatObjRef(feat));
513 const CBioseq& bioseq = context.CurrentBioseq();
514 const CSeqdesc* biosrc = context.GetBiosource();
515 if (!biosrc || context.IsEukaryotic(&biosrc->
GetSource()) || context.IsOrganelle(&biosrc->
GetSource()) || bioseq.
IsAa()) {
519 for (
const CSeq_feat& feat : context.GetAllFeat()) {
520 if (feat.IsSetData() && feat.GetData().IsCdregion()) {
521 if (feat.IsSetPseudo() && feat.GetPseudo() ==
true && !context.IsRefseq())
continue;
522 bool add_this =
false;
529 add_this = extend_len > 0 && extend_len <= 3;
539 add_this = extend_len > 0 && extend_len <= 3;
544 m_Objs[
"[n] feature[s] [has] partial ends that do not abut the end of the sequence or a gap, but could be extended by 3 or fewer nucleotides to do so"].Add(*context.SeqFeatObjRef(feat,
CDiscrepancyContext::eFixSet)).Fatal();
565 gene.
Reset(&gene_it->GetMappedFeature());
594 unsigned fr = (unsigned)frame - 1;
595 fr = (fr + extend_len) % 3;
597 new_feat->
SetData().SetCdregion().SetFrame() = frame;
616 unsigned fr = (unsigned)frame - 1;
617 fr = (fr + extend_len) % 3;
619 new_feat->
SetData().SetCdregion().SetFrame() = frame;
661 const CSeqdesc* biosrc = context.GetBiosource();
662 if (!context.IsEukaryotic(biosrc ? &biosrc->
GetSource() :
nullptr)) {
665 for (
const CSeq_feat& feat : context.GetAllFeat()) {
666 if (feat.IsSetData() && feat.GetData().IsCdregion() && !context.IsPseudo(feat)) {
681 if (m_Objs.empty()) {
696 for (
const CSeq_feat& feat : context.GetFeat()) {
697 if (feat.IsSetQual() && (!feat.IsSetData() || !feat.GetData().IsGene())) {
698 for (
const auto& it : feat.GetQual()) {
700 m_Objs[
"[n] non-gene feature[s] [has] locus tag[s]."].Add(*context.SeqFeatObjRef(feat));
713 for (
const CSeq_feat& feat : context.GetFeat()) {
716 if (!feat.IsSetPartial() &&
len < 50) {
717 m_Objs[
"[n] tRNA[s] [is] too short"].Add(*context.SeqFeatObjRef(feat));
719 else if (
len >= 150) {
720 m_Objs[
"[n] tRNA[s] [is] too long - over 150 nucleotides"].Add(*context.SeqFeatObjRef(feat));
731 for (
const CSeq_feat& feat : context.GetFeat()) {
735 const string aa = context.GetAminoacidName(feat);
736 if (aa !=
"Ser" && aa !=
"Sec" && aa !=
"Leu") {
737 m_Objs[
"[n] tRNA[s] [is] too long"].Add(*context.SeqFeatObjRef(feat));
750 if (partial_feat != partial_gene) {
763 if (partial_feat != partial_gene) {
772 const string kGenePartialConflictOther =
"[n/2] feature[s] that [is] not coding region[s] or misc_feature[s] conflict with partialness of overlapping gene";
775 const string kConflictBoth =
" feature partialness conflicts with gene on both ends";
776 const string kConflictStart =
" feature partialness conflicts with gene on 5' end";
777 const string kConflictStop =
" feature partialness conflicts with gene on 3' end";
783 const CSeqdesc* biosrc = context.GetBiosource();
785 bool is_eukaryotic = context.IsEukaryotic(biosrc ? &biosrc->
GetSource() :
nullptr);
787 const auto&
all = context.FeatAll();
789 if (!feat->IsSetData()) {
792 const CSeq_feat* gene = context.GetGeneForFeature(*feat);
796 bool conflict_start =
false;
797 bool conflict_stop =
false;
800 if (feat->GetData().IsCdregion()) {
801 if (!is_eukaryotic || is_mrna) {
809 bool found_start =
false;
810 bool found_utr5 =
false;
816 conflict_start =
false;
821 if (found_utr5 && !found_start) {
822 conflict_start =
true;
827 bool found_stop =
false;
828 bool found_utr3 =
false;
834 conflict_stop =
false;
839 if (found_utr3 && !found_stop) {
840 conflict_stop =
true;
852 if (conflict_start || conflict_stop) {
855 m_Objs[
kGenePartialConflictTop][middle_label].Ext()[
label].Ext().Add(*context.SeqFeatObjRef(*feat),
false).Add(*context.SeqFeatObjRef(*gene),
false);
863 m_ReportItems = m_Objs.Export(*
this,
false)->GetSubitems();
899 const string kBadGeneStrand =
"[n/2] feature location[s] conflict with gene location strand[s]";
905 const auto& genes = context.FeatGenes();
906 const auto& feats = context.FeatAll();
908 for (
size_t j = 0; j < feats.size(); j++) {
913 const CSeq_loc& loc_j = feats[j]->GetLocation();
916 for (
size_t i = 0;
i < genes.size();
i++) {
917 if (!genes[
i]->IsSetLocation()) {
920 const CSeq_loc& loc_i = genes[
i]->GetLocation();
924 if (feat_start == gene_start || feat_stop == gene_stop) {
930 bool found_bad =
false;
931 while (f_loc && !found_bad) {
934 while (g_loc && !found_bad) {
954 m_Objs[
kBadGeneStrand][
label].Ext().Add(*context.SeqFeatObjRef(*genes[
i]),
false).Add(*context.SeqFeatObjRef(*feats[j]),
false);
964 m_ReportItems = m_Objs.Export(*
this,
false)->GetSubitems();
972 for (
const CSeq_feat& feat : context.GetFeat()) {
974 bool is_microsatellite =
false;
975 bool is_tandem =
false;
977 for (
auto it = quals.cbegin(); it != quals.cend() && (!is_microsatellite || !is_tandem); ++it) {
982 is_microsatellite =
true;
989 if (is_microsatellite && !is_tandem) {
990 m_Objs[
"[n] microsatellite[s] do not have a repeat type of tandem"].Add(*context.SeqFeatObjRef(feat, &feat)).Fatal();
1003 new_feat->
SetQual().push_back(new_qual);
1004 context.ReplaceSeq_feat(*obj, *sf, *new_feat);
1044 for (
const CSeq_feat& feat : context.GetFeat()) {
1045 if (feat.IsSetData()) {
1046 switch (feat.GetData().GetSubtype()) {
1049 if (feat.IsSetComment()) {
1052 if (feat.GetData().GetGene().IsSetDesc()) {
1057 if (feat.GetData().GetProt().IsSetDesc()) {
1063 if (feat.IsSetComment()) {
1077 m_ReportItems = m_Objs.Export(*
this,
false)->GetSubitems();
1085 "annotated by transcript or proteomic data",
1086 "heterogeneous population sequenced",
1087 "low-quality sequence region",
1088 "unextendable partial coding region",
1095 for (
const CSeq_feat& feat : context.GetFeat()) {
1096 if (feat.IsSetData() && feat.GetData().IsCdregion() && feat.IsSetExcept_text()) {
1097 for (
size_t i = 0;
i <
max;
i++) {
1099 m_Objs[
"[n] coding region[s] [has] new exception[s]"].Add(*context.SeqFeatObjRef(feat));
1110 m_ReportItems = m_Objs.Export(*
this,
false)->GetSubitems();
1118 for (
const CSeq_feat& feat : context.GetFeat()) {
1120 && feat.GetData().GetRna().IsSetExt() && feat.GetData().GetRna().GetExt().IsGen() && feat.GetData().GetRna().GetExt().GetGen().IsSetClass()
1121 &&
NStr::EqualNocase(feat.GetData().GetRna().GetExt().GetGen().GetClass(),
"lncrna")
1124 m_Objs[
"[n] lncRNA feature[s] [is] suspiciously short"].Add(*context.SeqFeatObjRef(feat));
1132 m_ReportItems = m_Objs.Export(*
this,
false)->GetSubitems();
1145 const CSeqdesc* biosrc = context.GetBiosource();
1146 if (biosrc && !context.IsEukaryotic(&biosrc->
GetSource()) && !context.IsOrganelle(&biosrc->
GetSource())) {
1147 for (
const CSeq_feat& feat : context.GetFeat()) {
1148 if (feat.IsSetLocation()) {
1149 if (feat.GetLocation().IsMix() || feat.GetLocation().IsPacked_int()) {
1150 if (feat.IsSetExcept_text()) {
1158 else if (feat.IsSetExcept() && feat.GetExcept()) {
1173 m_ReportItems = m_Objs.Export(*
this,
false)->GetSubitems();
1181 const CSeqdesc* biosrc = context.GetBiosource();
1182 if (biosrc && (context.IsEukaryotic(&biosrc->
GetSource()) || context.IsOrganelle(&biosrc->
GetSource()))) {
1185 for (
const CSeq_feat& feat : context.GetAllFeat()) {
1186 if (feat.IsSetLocation() && feat.CanGetData() && feat.GetData().IsCdregion() && !context.IsPseudo(feat)) {
1187 if (feat.GetLocation().IsMix() || feat.GetLocation().IsPacked_int()) {
1188 if ((feat.IsSetExcept_text() && !feat.GetExcept_text().empty()) || (feat.IsSetExcept() && feat.GetExcept())) {
1192 if (context.CurrentBioseq().CanGetInst()) {
1193 const CSeq_inst& inst = context.CurrentBioseq().GetInst();
1219 m_Objs[
"[n] coding region[s] with joined location[s] [has] no exception[s]"][bad ?
"[n] coding region[s] not over the origin of circular DNA" :
"[n] coding region[s] over the origin of circular DNA"].Severity(bad ?
CReportItem::eSeverity_error :
CReportItem::eSeverity_warning).Add(*context.SeqFeatObjRef(feat));
1228 m_ReportItems = m_Objs.Export(*
this,
false)->GetSubitems();
1236 const CSeqdesc* biosrc = context.GetBiosource();
1237 if (biosrc && !context.IsEukaryotic(&biosrc->
GetSource()) && !context.IsOrganelle(&biosrc->
GetSource())) {
1238 for (
const CSeq_feat& feat : context.GetFeat()) {
1239 if (feat.IsSetLocation() && feat.CanGetData() && feat.GetData().IsCdregion() && feat.IsSetExcept_text() && (feat.GetLocation().IsMix() || feat.GetLocation().IsPacked_int())) {
1240 if (feat.GetExcept_text().find(
"ribosomal slippage") != string::npos) {
1242 string product = context.GetProdForFeature(feat);
1246 m_Objs[
"[n] coding region[s] [has] unexpected ribosomal slippage"].Fatal().Add(*context.SeqFeatObjRef(feat));
1256 m_ReportItems = m_Objs.Export(*
this,
false)->GetSubitems();
1267 for (
const CSeq_feat& feat : context.GetFeat()) {
1268 if (feat.IsSetData() && feat.GetData().IsCdregion() && feat.IsSetLocation() && !feat.IsSetExcept() && !context.IsPseudo(feat)) {
1271 bool found_short =
false;
1275 while (li && !found_short) {
1278 if (start >= last_stop && start - last_stop < 11) {
1281 else if (last_stop >= start && last_stop - start < 11) {
1284 else if (stop >= last_start && stop - last_start < 11) {
1287 else if (last_start >= stop && last_start - stop < 11) {
1308 m_ReportItems = m_Objs.Export(*
this,
false)->GetSubitems();
1344 sf.
SetComment(
"contains short intron that may represent a frameshift");
1362 sf.
SetComment(
"contains short intron that may represent a frameshift");
1394 sf.
SetData().SetImp().SetKey(
"misc_feature");
1446 AddException(sf, scope,
"low-quality sequence region");
1457 std::list<CConstRef<CSeq_loc>> to_remove;
1461 for (
auto& loc : to_remove) {
1473 DISCREPANCY_CASE(UNNECESSARY_VIRUS_GENE, FEAT,
eOncaller,
"Unnecessary gene features on virus: on when lineage is not Picornaviridae,Potyviridae,Flaviviridae and Togaviridae")
1475 const CSeqdesc* biosrc = context.GetBiosource();
1478 if (context.HasLineage(src,
"Picornaviridae") || context.HasLineage(src,
"Potyviridae") || context.HasLineage(src,
"Flaviviridae") || context.HasLineage(src,
"Togaviridae")) {
1479 for (
const CSeq_feat& feat : context.GetFeat()) {
1480 if (feat.IsSetData() && feat.GetData().IsGene()) {
1481 m_Objs[
"[n] virus gene[s] need to be removed"].Add(*context.SeqFeatObjRef(feat));
1491 m_ReportItems = m_Objs.Export(*
this,
false)->GetSubitems();
1499 for (
const CSeq_feat& feat : context.GetFeat()) {
1500 if (feat.IsSetData() && feat.GetData().IsCdregion() && feat.IsSetDbxref()) {
1501 for (
auto& x : feat.GetDbxref()) {
1503 m_Objs[
"[n] feature[s] [has] CDD Xrefs"].Add(*context.SeqFeatObjRef(feat));
1514 m_ReportItems = m_Objs.Export(*
this,
false)->GetSubitems();
1522 for (
const CSeq_feat& feat : context.GetFeat()) {
1523 if (feat.IsSetData() && feat.GetData().IsCdregion() && feat.GetData().GetCdregion().IsSetCode_break()) {
1524 m_Objs[
"[n] coding region[s] [has] a translation exception"].Add(*context.SeqFeatObjRef(feat));
1532 m_ReportItems = m_Objs.Export(*
this,
false)->GetSubitems();
1538 static const string kNoProductStr =
"[n] product[s] [has] \"no product string in file\"";
1542 for (
const CSeq_feat& feat : context.GetFeat()) {
1543 if (feat.IsSetData() && feat.GetData().IsProt()) {
1545 if (
prot.IsSetName()) {
1550 m_Objs[
kNoProductStr].Add(*context.SeqFeatObjRef(*product),
false);
1561 m_ReportItems = m_Objs.Export(*
this,
false)->GetSubitems();
1568 "trnL-trnF intergenic spacer",
1569 "trnH-psbA intergenic spacer",
1570 "trnS-trnG intergenic spacer",
1571 "trnF-trnL intergenic spacer",
1572 "psbA-trnH intergenic spacer",
1573 "trnG-trnS intergenic spacer" };
1580 const CSeqdesc* biosrc = context.GetBiosource();
1587 for (
const CSeq_feat& feat : context.GetFeat()) {
1591 m_Objs[
"[n] suspect intergenic spacer note[s] not organelle"].Add(*context.SeqFeatObjRef(feat));
1604 for (
const CSeq_feat& feat : context.GetFeat()) {
1605 if (feat.IsSetData() && feat.GetData().IsRna()) {
1608 string product =
rna.GetRnaProductName();
1610 if (feat.IsSetComment()) {
1611 comment = feat.GetComment();
1614 m_Objs[
"[n] RNA product_name or comment[s] contain[S] 'suspect phrase'"].Add(*context.SeqFeatObjRef(feat));
1624 m_ReportItems = m_Objs.Export(*
this,
false)->GetSubitems();
1650 if (this_strand != first_strand) {
1664 while (feat_i && gene_i) {
1670 bool found_stop =
false;
1682 if ((feat_i && !gene_i) || (!feat_i && gene_i)) {
1694 if (stop < 1 || stop > bsh.GetBioseqLength() - 2) {
1700 search->
SetInt().SetFrom(stop - 1);
1701 search->
SetInt().SetTo(stop - 1);
1704 search->
SetInt().SetFrom(stop + 1);
1705 search->
SetInt().SetTo(stop + 1);
1720 if (start < 1 || start > bsh.GetBioseqLength() - 2) {
1726 search->
SetInt().SetFrom(start + 1);
1727 search->
SetInt().SetTo(start + 1);
1730 search->
SetInt().SetFrom(start - 1);
1731 search->
SetInt().SetTo(start - 1);
1763 if (gene_start == feat_start) {
1772 rbs_search->
SetInt().SetId().Assign(*
id);
1774 if (gene_start < feat_start) {
1777 rbs_search->
SetInt().SetFrom(feat_start + 1);
1778 rbs_search->
SetInt().SetTo(gene_start);
1781 if (gene_start > feat_start) {
1784 rbs_search->
SetInt().SetFrom(gene_start);
1785 rbs_search->
SetInt().SetTo(feat_start - 1);
1824 if (context.InGenProdSet()) {
1827 const CSeqdesc* biosrc = context.GetBiosource();
1828 bool eukaryotic = context.IsEukaryotic(biosrc ? &biosrc->
GetSource() :
nullptr);
1829 const auto&
all = context.FeatAll();
1831 if (feat->IsSetData() && feat->IsSetLocation() && (feat->GetData().IsRna() || (!eukaryotic && feat->GetData().IsCdregion()))) {
1832 ENa_strand feat_strand = feat->GetLocation().GetStrand();
1833 const CGene_ref* gx = feat->GetGeneXref();
1834 const CSeq_feat* gene = context.GetGeneForFeature(*feat);
1836 if (feat->GetGeneXref()) {
1838 if (feat->GetData().IsCdregion()) {
1839 m_Objs[
kFeatureLocationConflictTop][
"Coding region xref gene does not exist" + subitem_id].Ext().Add(*context.SeqFeatObjRef(*feat),
false);
1842 m_Objs[
kFeatureLocationConflictTop][
"RNA feature xref gene does not exist" + subitem_id].Ext().Add(*context.SeqFeatObjRef(*feat),
false);
1849 if (!
IsGeneLocationOk(feat->GetLocation(), gene->
GetLocation(), feat_strand, gene_strand, feat->GetData().IsCdregion(), context.GetScope(),
all)) {
1851 if (feat->GetData().IsCdregion()) {
1867 m_ReportItems = m_Objs.Export(*
this,
false)->GetSubitems();
1887 for (
const CSeq_feat& feat : context.GetFeat()) {
1888 if (feat.IsSetData()) {
1890 if (feat.GetData().IsCdregion() && feat.IsSetComment()) {
1891 check = feat.GetComment();
1893 else if (feat.GetData().IsProt() && feat.GetData().GetProt().IsSetDesc()) {
1894 check = feat.GetData().GetProt().GetDesc();
1896 if (!
check.empty()) {
1899 m_Objs[
"[n] cds comment[s] or protein description[s] contain[S] suspect_phrase[s]"][
"[n] cds comment[s] or protein description[s] contain[S] '" +
suspect_phrases[
i] +
"'"].Summ().Add(*context.SeqFeatObjRef(feat));
1911 m_ReportItems = m_Objs.Export(*
this,
false)->GetSubitems();
1919 for (
const CSeq_feat& feat : context.GetFeat()) {
1922 string product =
rna.GetRnaProductName();
1924 m_Objs[
"[n] unexpected misc_RNA feature[s] found. misc_RNAs are unusual in a genome, consider using ncRNA, misc_binding, or misc_feature as appropriate"].Add(*context.SeqFeatObjRef(feat));
1935 if (rna_product.empty() || cds_product.empty()) {
1938 if (rna_product == cds_product) {
1941 const string kmRNAVariant =
", transcript variant ";
1942 const string kCDSVariant =
", isoform ";
1943 size_t pos_in_rna = rna_product.find(kmRNAVariant);
1944 size_t pos_in_cds = cds_product.find(kCDSVariant);
1945 if (pos_in_rna == string::npos || pos_in_cds == string::npos || pos_in_rna != pos_in_cds ||
1949 string rna_rest = rna_product.substr(pos_in_rna + kmRNAVariant.size()), cds_rest = cds_product.substr(pos_in_cds + kCDSVariant.size());
1950 return rna_rest == cds_rest;
1956 const CBioseq& bioseq = context.CurrentBioseq();
1957 const CSeqdesc* biosrc = context.GetBiosource();
1963 vector<const CSeq_feat*> cds = context.FeatCDS();
1964 vector<const CSeq_feat*> mrnas = context.FeatMRNAs();
1965 auto cds_it = cds.begin();
1966 while (cds_it != cds.end()) {
1967 if (context.IsPseudo(**cds_it)) {
1968 cds_it = cds.erase(cds_it);
1972 if ((*cds_it)->IsSetXref()) {
1973 auto rna_it = mrnas.cbegin();
1974 while (rna_it != mrnas.end()) {
1975 if ((*rna_it)->IsSetId()) {
1976 auto& rnaid = (*rna_it)->
GetId();
1977 if (rnaid.IsLocal()) {
1978 for (
auto xref : (*cds_it)->GetXref()) {
1979 if (xref->IsSetId()) {
1980 auto&
id = xref->GetId();
1982 if (!
id.GetLocal().
Compare(rnaid.GetLocal())) {
1991 mrnas.erase(rna_it);
1999 string prod = context.GetProdForFeature(**cds_it);
2001 m_Objs[
"[n] coding region[s] [has] mismatching mRNA"].Add(*context.SeqFeatObjRef(**cds_it));
2003 cds_it = cds.erase(cds_it);
2009 for (
size_t i = 0;
i < cds.size();
i++) {
2010 if (context.IsPseudo(*cds[
i])) {
2014 string prod = context.GetProdForFeature(*cds[
i]);
2015 const CSeq_loc& loc_i = cds[
i]->GetLocation();
2016 for (
size_t j = 0; j < mrnas.size(); j++) {
2017 const CSeq_loc& loc_j = mrnas[j]->GetLocation();
2020 if (
IsProductMatch(prod, mrnas[j]->GetData().GetRna().GetRnaProductName())) {
2039 if (old_mRNA.
Empty()) {
2042 annot_handle.
AddFeat(*new_mRNA);
2046 old_mRNA_edit.Replace(*new_mRNA);
2057 for (; annot_ci; ++annot_ci) {
2075 CScope& scope = context.GetScope();
2079 if (old_mRNA.
Empty()) {
2082 annot_handle.
AddFeat(*new_mRNA);
2086 old_mRNA_edit.
Replace(*new_mRNA);
2097 for (
const CSeq_feat& feat : context.GetFeat()) {
2098 if (feat.IsSetData() && feat.GetData().IsProt()) {
2100 if (
prot.IsSetName() && !
prot.GetName().empty()) {
2101 m_Objs[feat.GetData().GetProt().GetName().front()].Incr();
2110 static const size_t MIN_REPORTABLE_AMOUNT = 100;
2111 auto& M = m_Objs.GetMap();
2112 if (M.size() == 1 && M.begin()->second->GetCount() >= MIN_REPORTABLE_AMOUNT) {
2114 rep[
"All proteins have same name [(]\"" + M.begin()->first +
"\""];
2124 bool protein_id =
false,
2125 transcript_id =
false;
2127 for (
const auto& qual : quals) {
2128 if (qual->IsSetQual()) {
2130 if (qual->GetQual() ==
"orig_protein_id") {
2134 if (qual->GetQual() ==
"orig_transcript_id") {
2135 transcript_id =
true;
2138 if (protein_id && transcript_id) {
2144 return protein_id && transcript_id;
2150 const CBioseq& bioseq = context.CurrentBioseq();
2151 const CSeqdesc* biosrc = context.GetBiosource();
2153 for (
const CSeq_feat& feat : context.GetAllFeat()) {
2154 if (feat.IsSetData() && feat.GetData().IsCdregion() && !context.IsPseudo(feat)) {
2157 m_Objs.Add(*context.SeqFeatObjRef(feat)).Fatal();
2167 if (!m_Objs.empty()) {
2169 out[
"no protein_id and transcript_id present"];
2170 m_ReportItems =
out.Export(*this)->GetSubitems();
2181 for (
const CSeq_feat& feat : context.GetFeat()) {
2183 string subitem =
"[n] " + feat.GetData().GetKey();
2184 subitem +=
" feature[s]";
2185 m_Objs[
kFeatureList].Info()[subitem].Info().Add(*context.SeqFeatObjRef(feat));
2195 for (
const CSeq_feat& feat : context.GetFeat()) {
2196 if (feat.IsSetQual()) {
2197 size_t num_of_number_quals = 0;
2198 for (
const auto& qual : feat.GetQual()) {
2199 if (qual->IsSetQual() && qual->GetQual() ==
"number") {
2200 ++num_of_number_quals;
2201 if (num_of_number_quals > 1) {
2202 m_Objs[
"[n] feature[s] contain[S] multiple /number qualifiers"].Add(*context.SeqFeatObjRef(feat));
2216 for (
const CSeq_feat& feat : context.GetFeat()) {
2218 for (
const auto& qual : feat.GetQual()) {
2219 if (qual->IsSetQual() && qual->GetQual() ==
"product") {
2220 m_Objs[
"[n] feature[s] [has] a product qualifier"].Add(*context.SeqFeatObjRef(feat));
2230 const string kCDShasNoTRNA =
"[n] coding region[s] [does] not have adjacent tRNA";
2235 switch (aa.
Which()) {
2249 static const int STOP_CODON = 25;
2250 return aa_idx == STOP_CODON;
2256 const CSeqdesc* biosrc = context.GetBiosource();
2260 const auto& cds = context.FeatCDS();
2261 const auto& trnas = context.FeatTRNAs();
2262 for (
size_t i = 0;
i < cds.size();
i++) {
2263 if (!cds[
i]->GetData().GetCdregion().IsSetCode_break()) {
2272 const CSeq_feat* nearest_trna =
nullptr;
2275 if (trna->IsSetLocation()) {
2279 if (start <= stop) {
2280 cur_diff = stop - start;
2284 if (start >= stop) {
2285 cur_diff = start - stop;
2288 if (cur_diff < diff) {
2290 nearest_trna = trna;
2296 if (trna_strand == strand && diff > 1) {
2297 m_Objs[
kCDShasNoTRNA].Add(*context.SeqFeatObjRef(*cds[
i]),
false).Incr();
2298 m_Objs[
kCDShasNoTRNA].Add(*context.SeqFeatObjRef(*nearest_trna),
false);
2309 const CSeqdesc* biosrc = context.GetBiosource();
2310 if (context.IsEukaryotic(biosrc ? &biosrc->
GetSource() :
nullptr)) {
2311 const auto& rnas = context.Feat_RNAs();
2312 for (
size_t i = 0;
i < rnas.size();
i++) {
2314 const string& name = rnas[
i]->GetData().GetRna().GetExt().
GetName();
2315 if (name.find(
"16S") != string::npos || name.find(
"12S") != string::npos) {
2316 m_Objs[
"[n] non mitochondrial rRNA name[s] contain[S] 12S/16S"].Add(*context.SeqFeatObjRef(*rnas[
i]));
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.
@ eExtreme_Positional
numerical value
@ eExtreme_Biological
5' and 3'
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
CRef< CSeq_feat > MakemRNAforCDS(const CSeq_feat &cds, CScope &scope)
MakemRNAforCDS A function to create a CSeq_feat that represents the appropriate mRNA for a given CDS.
TSeqPos GetLength(void) const
static bool SeqLocExtend(CSeq_loc &loc, size_t pos, CScope &scope)
Extends a location to the specificed position.
static bool HasLineage(const CBioSource &biosrc, const string &def_lineage, const string &type)
CRef< CDiscrepancyObject > SeqFeatObjRef(const CSeq_feat &feat, EFixType fix=eFixNone, const CObject *more=nullptr)
static bool IsUnculturedNonOrganelleName(const string &taxname)
@Gb_qual.hpp User-defined methods of the data storage class.
bool IsSuppressed(void) const
@RNA_ref.hpp User-defined methods of the data storage class.
string GetRnaProductName(void) const
virtual vector< CRef< CReportItem > > GetSubitems() const =0
static void Add(TReportObjectList &list, TReportObjectSet &hash, CReportObj &obj, bool unique=true)
CReportNode & Ext(bool b=true)
CRef< CReportItem > Export(CDiscrepancyCore &test, bool unique=true) const
static const string & GetRegulatoryClass(ESubtype subtype)
static bool IsLegalProductNameForRibosomalSlippage(const string &product_name)
ESubtype GetSubtype(void) const
static CTempString SubtypeValueToName(ESubtype eSubtype)
Turns a ESubtype into its string value which is NOT necessarily related to the identifier of the enum...
namespace ncbi::objects::
Seq-loc iterator class – iterates all intervals from a seq-loc in the correct order.
static TIndex GetMapToIndex(CSeq_data::E_Choice from_type, CSeq_data::E_Choice to_type, TIndex from_idx)
bool IsShortrRNA(const objects::CSeq_feat &f, objects::CScope *scope)
#define DISCREPANCY_AUTOFIX(name)
#define DISCREPANCY_CASE(name, type, group, descr)
#define DISCREPANCY_SUMMARIZE(name)
int GetSubtype(CFieldNamePanel *field_name_panel, string &ncRNA_class)
vector< CConstRef< CObject > > GetObjects(CSeq_entry_Handle seh, const string &field, CFieldNamePanel::EFieldType field_type, int subtype, const string &ncRNA_class, CConstRef< objects::CSeq_submit > submit, CRef< CEditingActionConstraint > constraint, vector< CSeq_entry_Handle > *descr_context=nullptr)
std::ofstream out("events_result.xml")
main entry point for tests
static const string kNoProductStr
static bool IsRBS(const CSeq_feat &f)
static bool AddExceptionsToShortIntron(const CSeq_feat &sf, CScope &scope, std::list< CConstRef< CSeq_loc >> &to_remove)
const string & kJoinedFeaturesException
static void AddException(const CSeq_feat &sf, CScope &scope, const string &exception_text)
EExtensibe IsExtendableRight(TSeqPos right, const CBioseq &seq, CScope *scope, TSeqPos &extend_len, ENa_strand strand)
bool IsPartialStopConflict(const CSeq_feat &feat, const CSeq_feat &gene, bool is_mrna=false)
const string kPseudoMismatch
const string kExtraGeneNonPseudoNonFrameshift
bool StartAbutsGap(const CSeq_loc &loc, ENa_strand strand, CScope &scope)
const string kConflictStart
const string kBadGeneStrand
const string kConflictBoth
static bool IsStopCodon(const CCode_break::C_Aa &aa)
static const size_t kIntergenicSpacerNames_len
static void AdjustBacterialGeneForCodingRegionWithShortIntron(CSeq_feat &sf, CSeq_feat &gene, bool is_bacterial)
const string kFeatureLocationCodingRegion
const string kGenePartialConflictTop
bool StopAbutsGap(const CSeq_loc &loc, ENa_strand strand, CScope &scope)
const string kGenePartialConflictMiscFeat
EExtensibe IsExtendableLeft(TSeqPos left, const CBioseq &seq, CScope *scope, TSeqPos &extend_len, ENa_strand strand)
static bool IsmRnaQualsPresent(const CSeq_feat::TQual &quals)
const string kGenePartialConflictCodingRegion
const string kFeatureLocationConflictTop
bool IsMixedStrandGeneLocationOk(const CSeq_loc &feat_loc, const CSeq_loc &gene_loc)
static const string kSuspiciousNotePhrases[]
const string kFeatureLocationRNA
static bool ExtendToGapsOrEnds(const CSeq_feat &cds, CScope &scope)
const string & kJoinedFeaturesNoException
bool IsGeneInXref(const CSeq_feat &gene, const CSeq_feat &feat, bool &have_gene_ref)
static CSeq_annot_EditHandle GetAnnotHandle(CBioseq_Handle bsh)
const string suspect_phrases[]
const string kShortIntronExcept
bool HasMixedStrands(const CSeq_loc &loc)
const string kExtraPseudo
bool StrandsMatch(ENa_strand s1, ENa_strand s2)
bool ReportGeneMissing(const CSeq_feat &f)
static const string kNewExceptions[]
const string kShortIntronTop
bool IsNonExtendable(const CSeq_loc &loc, const CBioseq &seq, CScope *scope)
static bool IsProductMatch(const string &rna_product, const string &cds_product)
bool IsPartialStartConflict(const CSeq_feat &feat, const CSeq_feat &gene, bool is_mrna=false)
const string kEukaryoteShouldHavemRNA
const string kGenePartialConflictOther
const size_t kNumSuspiciousNotePhrases
const string kEukaryoticCDSHasMrna
static const string kIntergenicSpacerNames[]
bool GeneRefMatch(const CGene_ref &g1, const CGene_ref &g2)
bool IsGeneLocationOk(const CSeq_loc &feat_loc, const CSeq_loc &gene_loc, ENa_strand feat_strand, ENa_strand gene_strand, bool is_coding_region, CScope &scope, const vector< const CSeq_feat * > &features)
static void FindSuspiciousNotePhrases(const string &s, CDiscrepancyContext &context, CReportNode &rep, const CSeq_feat &feat)
const string & kJoinedFeatures
const string kCDShasNoTRNA
const string kNonExtendableException
static const string kFeatureList
static string GetNextSubitemId(size_t num)
const string kConflictStop
static const string kPutativeFrameShift
bool IsMixedStrand(const CSeq_loc &loc)
static void ConvertToMiscFeature(CSeq_feat &sf, CScope &scope)
const string & kJoinedFeaturesBlankException
unsigned int TSeqPos
Type for sequence locations and lengths.
constexpr size_t ArraySize(const Element(&)[Size])
virtual void Assign(const CSerialObject &source, ESerialRecursionMode how=eRecursive)
Set object to copy of another one.
virtual bool Equals(const CSerialObject &object, ESerialRecursionMode how=eRecursive) const
Check if both objects contain the same values.
bool IsPartialStart(ESeqLocExtremes ext) const
check start or stop of location for e_Lim fuzz
ENa_strand GetStrand(void) const
Get the location's strand.
TSeqPos GetStart(ESeqLocExtremes ext) const
Return start and stop positions of the seq-loc.
CConstRef< CSeq_loc > GetRangeAsSeq_loc(void) const
Get seq-loc for the current iterator position.
bool IsSetStrand(EIsSetStrand flag=eIsSetStrand_Any) const
Check if strand is set for any/all part(s) of the seq-loc depending on the flag.
const CSeq_id * GetId(void) const
Get the id of the location return NULL if has multiple ids or no id at all.
TRange GetRange(void) const
Get the range.
ENa_strand GetStrand(void) const
void SetStrand(ENa_strand strand)
Set the strand for all of the location's ranges.
bool IsPartialStop(ESeqLocExtremes ext) const
TSeqPos GetStop(ESeqLocExtremes ext) const
CMappedFeat GetBestOverlappingFeat(const CMappedFeat &feat, CSeqFeatData::ESubtype need_subtype, sequence::EOverlapType overlap_type, CFeatTree *feat_tree=0, const SAnnotSelector *base_sel=0)
TSeqPos GetLength(const CSeq_id &id, CScope *scope)
Get sequence length if scope not null, else return max possible TSeqPos.
sequence::ECompare Compare(const CSeq_loc &loc1, const CSeq_loc &loc2, CScope *scope)
Returns the sequence::ECompare containment relationship between CSeq_locs.
@ eOverlap_Contained
2nd contained within 1st extremes
@ eContains
First CSeq_loc contains second.
@ eSame
CSeq_locs contain each other.
@ eContained
First CSeq_loc contained by second.
@ eNoOverlap
CSeq_locs do not overlap or abut.
const CSeq_feat * GetCDSForProduct(const CBioseq &product, CScope *scope)
Get the encoding CDS feature of a given protein sequence.
CConstRef< CSeq_feat > GetGeneForFeature(const CSeq_feat &feat, CScope &scope)
Finds gene for feature, but obeys SeqFeatXref directives.
CConstRef< CSeq_feat > GetmRNAforCDS(const CSeq_feat &cds, CScope &scope)
GetmRNAforCDS A function to find a CSeq_feat representing the appropriate mRNA for a given CDS.
CBioseq_Handle GetBioseqHandle(const CSeq_id &id)
Get bioseq handle by seq-id.
CSeq_feat_Handle GetSeq_featHandle(const CSeq_feat &feat, EMissing action=eMissing_Default)
CConstRef< CBioseq > GetCompleteBioseq(void) const
Get the complete bioseq.
bool IsFtable(void) const
CSeq_entry_Handle GetParentEntry(void) const
Get parent Seq-entry handle.
void Remove(void) const
Remove the feature from Seq-annot.
CSeq_feat_EditHandle AddFeat(const CSeq_feat &new_obj) const
void Remove(ERemoveMode mode=eRemoveSeq_entry) const
CSeq_annot_EditHandle AttachAnnot(CSeq_annot &annot) const
Attach an annotation.
CBioseq_EditHandle GetEditHandle(void) const
Get 'edit' version of handle.
CScope & GetScope(void) const
Get scope this handle belongs to.
void Replace(const CSeq_feat &new_feat) const
Replace the feature with new Seq-feat object.
bool IsInGap(TSeqPos pos) const
true if sequence at 0-based position 'pos' has gap Note: this method is not MT-safe,...
void GetSeqData(TSeqPos start, TSeqPos stop, string &buffer) const
Fill the buffer string with the sequence data for the interval [start, stop).
bool Empty(void) const THROWS_NONE
Check if CConstRef is empty – not pointing to any object which means having a null value.
TObjectType * GetPointer(void) const THROWS_NONE
Get pointer,.
void Reset(void)
Reset reference object.
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.
bool NotEmpty(void) const THROWS_NONE
Check if CConstRef is not empty – pointing to an object and has a non-null value.
#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 string SizetToString(size_t value, TNumToStringFlags flags=0, int base=10)
Convert size_t to string.
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 IsBlank(const CTempString str, SIZE_TYPE pos=0)
Check if a string is blank (has no text).
static SIZE_TYPE Find(const CTempString str, const CTempString pattern, ECase use_case=eCase, EDirection direction=eForwardSearch, SIZE_TYPE occurrence=0)
Find the pattern in the 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 SIZE_TYPE FindCase(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 sensitive search.
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 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.
@ eNocase
Case insensitive compare.
static const char label[]
TGenome GetGenome(void) const
Get the Genome member data.
bool IsSetOrg(void) const
Check if a value has been assigned to Org data member.
const TOrg & GetOrg(void) const
Get the Org member data.
bool IsSetGenome(void) const
Check if a value has been assigned to Genome data member.
TTo GetTo(void) const
Get the To member data.
TFrom GetFrom(void) const
Get the From member data.
const TDesc & GetDesc(void) const
Get the Desc member data.
bool IsSetPseudo(void) const
pseudogene Check if a value has been assigned to Pseudo data member.
bool IsSetLocus_tag(void) const
systematic gene name (e.g., MI0001, ORF0069) Check if a value has been assigned to Locus_tag data mem...
bool IsSetLocus(void) const
Official gene symbol Check if a value has been assigned to Locus data member.
bool IsSetDesc(void) const
descriptive name Check if a value has been assigned to Desc data member.
bool IsSetAllele(void) const
Official allele designation Check if a value has been assigned to Allele data member.
bool IsSetMaploc(void) const
descriptive map location Check if a value has been assigned to Maploc data member.
const TLocus_tag & GetLocus_tag(void) const
Get the Locus_tag member data.
const TLocus & GetLocus(void) const
Get the Locus member data.
const TAllele & GetAllele(void) const
Get the Allele member data.
const TMaploc & GetMaploc(void) const
Get the Maploc member data.
const TTaxname & GetTaxname(void) const
Get the Taxname member data.
bool IsSetTaxname(void) const
preferred formal name Check if a value has been assigned to Taxname data member.
const TVal & GetVal(void) const
Get the Val member data.
bool IsSetComment(void) const
Check if a value has been assigned to Comment data member.
bool IsSetData(void) const
the specific data Check if a value has been assigned to Data data member.
bool IsSetQual(void) const
qualifiers Check if a value has been assigned to Qual data member.
TNcbi8aa GetNcbi8aa(void) const
Get the variant data.
E_Choice Which(void) const
Which variant is currently selected.
void SetLocation(TLocation &value)
Assign a value to Location data member.
bool IsCdregion(void) const
Check if variant Cdregion is selected.
void SetComment(const TComment &value)
Assign a value to Comment data member.
const TQual & GetQual(void) const
Get the Qual member data.
const TId & GetId(void) const
Get the Id member data.
const TLocation & GetLocation(void) const
Get the Location member data.
void SetExcept(TExcept value)
Assign a value to Except data member.
TFrame GetFrame(void) const
Get the Frame member data.
const TData & GetData(void) const
Get the Data member data.
const TExcept_text & GetExcept_text(void) const
Get the Except_text member data.
void ResetData(void)
Reset Data data member.
bool IsSetExcept_text(void) const
explain if except=TRUE Check if a value has been assigned to Except_text data member.
bool CanGetId(void) const
Check if it is safe to call GetId method.
void SetData(TData &value)
Assign a value to Data data member.
void ResetComment(void)
Reset Comment data member.
const TCdregion & GetCdregion(void) const
Get the variant data.
bool IsSetAa(void) const
Check if a value has been assigned to Aa data member.
const TAa & GetAa(void) const
Get the Aa member data.
const TProduct & GetProduct(void) const
Get the Product member data.
TNcbieaa GetNcbieaa(void) const
Get the variant data.
const TComment & GetComment(void) const
Get the Comment member data.
bool CanGetFrame(void) const
Check if it is safe to call GetFrame method.
void SetPseudo(TPseudo value)
Assign a value to Pseudo data member.
const TGene & GetGene(void) const
Get the variant data.
void SetExcept_text(const TExcept_text &value)
Assign a value to Except_text data member.
const TXref & GetXref(void) const
Get the Xref member data.
void ResetProduct(void)
Reset Product data member.
vector< CRef< CGb_qual > > TQual
const TQual & GetQual(void) const
Get the Qual member data.
const TRna & GetRna(void) const
Get the variant data.
TNcbistdaa GetNcbistdaa(void) const
Get the variant data.
TQual & SetQual(void)
Assign a value to Qual data member.
const TCode_break & GetCode_break(void) const
Get the Code_break member data.
bool IsSetProduct(void) const
product of process Check if a value has been assigned to Product data member.
bool IsRna(void) const
Check if variant Rna is selected.
bool IsSetLocation(void) const
feature made from Check if a value has been assigned to Location data member.
@ eFrame_not_set
not set, code uses one
@ e_Ncbieaa
ASCII value of NCBIeaa code.
ENa_strand
strand of nucleic acid
TRepr GetRepr(void) const
Get the Repr member data.
const TInst & GetInst(void) const
Get the Inst member data.
TTopology GetTopology(void) const
Get the Topology member data.
bool IsSetRepr(void) const
Check if a value has been assigned to Repr data member.
bool IsSetMol(void) const
Check if a value has been assigned to Mol data member.
const TSource & GetSource(void) const
Get the variant data.
bool IsSetBiomol(void) const
Check if a value has been assigned to Biomol data member.
bool IsSetExt(void) const
extensions for special types Check if a value has been assigned to Ext data member.
bool IsSetInst(void) const
the sequence data Check if a value has been assigned to Inst data member.
TLength GetLength(void) const
Get the Length member data.
TMol GetMol(void) const
Get the Mol member data.
bool IsDelta(void) const
Check if variant Delta is selected.
const TExt & GetExt(void) const
Get the Ext member data.
TBiomol GetBiomol(void) const
Get the Biomol member data.
const TDelta & GetDelta(void) const
Get the variant data.
const Tdata & Get(void) const
Get the member data.
const TMolinfo & GetMolinfo(void) const
Get the variant data.
const TName & GetName(void) const
Get the variant data.
@ eRepr_delta
sequence made by changes (delta) to others
@ e_Ncbieaa
extended ASCII 1 letter aa codes
@ e_Ncbistdaa
consecutive codes for std aas
@ e_Source
source of materials, includes Org-ref
where boath are integers</td > n< td ></td > n</tr > n< tr > n< td > tse</td > n< td > optional</td > n< td > String</td > n< td class=\"description\"> TSE option controls what blob is smart and slim</td> n<td> orig</td> n</tr> n<tr> n<td> last_modified</td> n<td> optional</td> n<td> Integer</td> n<td class=\"description\"> The blob last modification If provided then the exact match will be requested with n the Cassandra storage corresponding field value</td> n<td> Positive integer Not provided means that the most recent match will be selected</td> n<td></td> n</tr> n<tr> n<td> use_cache</td> n<td> optional</td> n<td> String</td> n<td class=\"description\"> The option controls if the Cassandra LMDB cache and or database should be used It n affects the seq id resolution step and the blob properties lookup step The following n options are BIOSEQ_INFO and BLOB_PROP at all
static string GetProductName(const CProt_ref &prot)
constexpr bool empty(list< Ts... >) noexcept
const struct ncbi::grid::netcache::search::fields::SIZE size
const CharType(& source)[N]
double f(double x_, const double &y_)
static const char *const features[]