has_map =
false;
58 boolhas_chromosome =
false;
60 if(it->IsSetSubtype()) {
65has_chromosome =
true;
70 if(has_map && !has_chromosome) {
71m_Objs[
"[n] source[s] on eukaryotic sequence[s] [has] map but not chromosome"].Add(*
context.SeqdescObjRef(*biosrc)).Fatal();
82 if(biosrc->IsSetOrg() && biosrc->IsSetSubtype() && biosrc->GetOrg().IsSetOrgname() && biosrc->GetOrg().GetOrgname().IsSetMod() && biosrc->GetOrg().IsSetTaxname() &&
NStr::StartsWith(biosrc->GetOrg().GetTaxname(),
"Influenza ")) {
84 intcollection_year = 0;
85 for(
const auto& it : biosrc->GetOrg().GetOrgname().GetMod()) {
87 strings = it->GetSubname();
88 size_tpos = s.rfind(
'/');
89 if(pos == string::npos) {
93 while(
isspace(s.c_str()[pos])) {
107 for(
const auto& it : biosrc->GetSubtype()) {
121 if(strain_year != collection_year) {
122m_Objs[
"[n] influenza strain[s] conflict with collection date"].Add(*
context.BiosourceObjRef(*biosrc));
134 if(biosrc->IsSetOrg() && biosrc->GetOrg().IsSetTaxname() &&
NStr::StartsWith(biosrc->GetOrg().GetTaxname(),
"Influenza ")) {
135 boolfound_strain =
false;
136 boolfound_host =
false;
137 boolfound_country =
false;
138 boolfound_collection_date =
false;
139 if(biosrc->IsSetSubtype()) {
140 for(
const auto& it : biosrc->GetSubtype()) {
141 if(it->IsSetSubtype()) {
142 switch(it->GetSubtype()) {
144found_country =
true;
147found_collection_date =
true;
153 if(biosrc->GetOrg().IsSetOrgname() && biosrc->GetOrg().GetOrgname().IsSetMod()) {
154 for(
const auto& it : biosrc->GetOrg().GetOrgname().GetMod()) {
155 if(it->IsSetSubtype()) {
156 switch(it->GetSubtype()) {
158found_strain =
true;
168m_Objs[
"[n] Influenza biosource[s] [does] not have strain"].Add(*
context.BiosourceObjRef(*biosrc));
171m_Objs[
"[n] Influenza biosource[s] [does] not have host"].Add(*
context.BiosourceObjRef(*biosrc));
173 if(!found_country) {
174m_Objs[
"[n] Influenza biosource[s] [does] not have country"].Add(*
context.BiosourceObjRef(*biosrc));
176 if(!found_collection_date) {
177m_Objs[
"[n] Influenza biosource[s] [does] not have collection-date"].Add(*
context.BiosourceObjRef(*biosrc));
189 if(biosrc->IsSetOrg() && biosrc->GetOrg().IsSetTaxname() &&
NStr::StartsWith(biosrc->GetOrg().GetTaxname(),
"Influenza A virus ") && biosrc->GetOrg().IsSetOrgname() && biosrc->GetOrg().GetOrgname().IsSetMod()) {
191 for(
const auto& it : biosrc->GetOrg().GetOrgname().GetMod()) {
198m_Objs[
"[n] Influenza A virus biosource[s] [does] not have serotype"].Add(*
context.BiosourceObjRef(*biosrc));
210 DISCREPANCY_CASE(INFLUENZA_SEROTYPE_FORMAT, BIOSRC,
eOncaller,
"Influenza A virus serotype must match /^H[1-9]\\d*$|^N[1-9]\\d*$|^H[1-9]\\d*N[1-9]\\d*$|^mixed$/")
212constexpr
ctll::fixed_stringsubname_re =
"^H[1-9]\\d*$|^N[1-9]\\d*$|^H[1-9]\\d*N[1-9]\\d*$|^mixed$";
215 if(biosrc->IsSetOrg() && biosrc->GetOrg().IsSetTaxname() &&
NStr::StartsWith(biosrc->GetOrg().GetTaxname(),
"Influenza A virus ")) {
216 if(biosrc->GetOrg().IsSetOrgname() && biosrc->GetOrg().GetOrgname().IsSetMod()) {
217 for(
const auto& it : biosrc->GetOrg().GetOrgname().GetMod()) {
219std::string_view
subname= it->GetSubname();
220 if(!ctre::match<subname_re>(
subname)) {
221m_Objs[
"[n] Influenza A virus serotype[s] [has] incorrect format"].Add(*
context.BiosourceObjRef(*biosrc));
236 if(biosrc->IsSetSubtype()) {
237 for(
const auto& it : biosrc->GetSubtype()) {
239m_Objs[
"[n] bio-source[s] [has] uncultured note[s]"].Add(*
context.BiosourceObjRef(*biosrc)).Fatal();
255 if(
context.HasLineage(src ? &src->
GetSource() :
nullptr,
"Viruses")) {
257 boolhas_collection_date =
false;
258 boolhas_country =
false;
259 boolhas_specific_host =
false;
260 if(biosrc->IsSetSubtype()) {
261 for(
const auto& it : biosrc->GetSubtype()) {
262 if(it->IsSetSubtype()) {
264has_collection_date =
true;
269 if(has_collection_date && has_country) {
275 if(biosrc->IsSetOrg() && biosrc->GetOrg().IsSetOrgname() && biosrc->GetOrg().GetOrgname().IsSetMod()) {
276 for(
const auto& it : biosrc->GetOrg().GetOrgname().GetMod()) {
278has_specific_host =
true;
282 if(!has_collection_date || !has_country || !has_specific_host) {
283 if(!has_collection_date) {
284m_Objs[
kMissingViralQualsTop][
"[n] virus organism[s] [is] missing suggested qualifier collection date"].Ext().Add(*
context.BiosourceObjRef(*biosrc));
287m_Objs[
kMissingViralQualsTop][
"[n] virus organism[s] [is] missing suggested qualifier country"].Ext().Add(*
context.BiosourceObjRef(*biosrc));
289 if(!has_specific_host) {
290m_Objs[
kMissingViralQualsTop][
"[n] virus organism[s] [is] missing suggested qualifier specific-host"].Ext().Add(*
context.BiosourceObjRef(*biosrc));
306 for(
const auto& m : mods) {
308 string cmp= m->GetSubname().substr(5);
311 if(pos != string::npos) {
312 cmp=
cmp.substr(0, pos);
330 for(
const auto& m : mods) {
332 string cmp= m->GetSubname().substr(5);
335 if(pos != string::npos) {
336 cmp=
cmp.substr(0, pos);
351 if(biosrc->IsSetOrg() && biosrc->GetOrg().IsSetOrgname() && biosrc->GetOrg().GetOrgname().IsSetMod()) {
352 boolreport =
false;
353 for(
const auto& m : biosrc->GetOrg().GetOrgname().GetMod()) {
354 if(m->IsSetSubtype() && m->IsSetSubname()) {
366m_Objs[
"[n] biosource[s] [has] conflicting ATCC strain and culture collection values"].Add(*
context.BiosourceObjRef(*biosrc,
true));
380 if(m->IsSetSubtype() && m->IsSetSubname()) {
383add.push_back(
"ATCC:"+ m->GetSubname());
388 for(
const string& s : add) {
390src.
SetOrg().SetOrgname().SetMod().push_back(m);
422 boolhas_bad_isolate =
false;
423 boolis_metagenomic =
false;
424 boolis_env_sample =
false;
425 if(biosrc->IsSetSubtype()) {
426 for(
const auto& s : biosrc->GetSubtype()) {
427 if(s->IsSetSubtype()) {
429is_env_sample =
true;
430 if(is_metagenomic && is_env_sample) {
435is_metagenomic =
true;
436 if(is_metagenomic && is_env_sample) {
444 stringnm = s->GetName();
448 size_tspc = nm.find(
' ');
449 if(spc != std::string::npos) {
463 if(biosrc->IsSetOrg() && biosrc->GetOrg().IsSetOrgname() && biosrc->GetOrg().GetOrgname().IsSetMod()) {
464 for(
const auto& m : biosrc->GetOrg().GetOrgname().GetMod()) {
465 if(m->IsSetSubtype()) {
473has_bad_isolate =
true;
478 if(has_bad_isolate) {
479m_Objs[
"[n] bacterial biosource[s] [has] isolate"].Add(*
context.BiosourceObjRef(*biosrc));
493 boolis_metagenomic =
false;
494 boolis_env_sample =
false;
495 if(biosrc->IsSetSubtype()) {
496 for(
const auto& s : biosrc->GetSubtype()) {
497 if(s->IsSetSubtype()) {
499is_env_sample =
true;
502is_metagenomic =
true;
507 if(is_metagenomic && is_env_sample && biosrc->IsSetOrg() && biosrc->GetOrg().IsSetOrgname() && biosrc->GetOrg().GetOrgname().IsSetMod()) {
508 for(
const auto& m : biosrc->GetOrg().GetOrgname().GetMod()) {
510m_Objs[
"[n] organism[s] assembled from metagenome [has] strain"].Add(*
context.BiosourceObjRef(*biosrc));
527 boolis_metagenomic =
false;
528 boolis_env_sample =
false;
529 boolhas_isolate =
false;
530 if(biosrc->IsSetSubtype()) {
531 for(
const auto& s : biosrc->GetSubtype()) {
532 if(s->IsSetSubtype()) {
534is_env_sample =
true;
537is_metagenomic =
true;
542 if(!is_metagenomic || !is_env_sample) {
545 if(biosrc->IsSetOrg() && biosrc->GetOrg().IsSetOrgname() && biosrc->GetOrg().GetOrgname().IsSetMod()) {
546 for(
const auto& m : biosrc->GetOrg().GetOrgname().GetMod()) {
554m_Objs[
"[n] organism[s] assembled from metagenome [is] missing isolate"].Add(*
context.BiosourceObjRef(*biosrc));
566 if(biosrc->IsSetOrg() && biosrc->GetOrg().IsSetOrgname() && biosrc->GetOrg().GetOrgname().IsSetMod()) {
567 boolreport =
false;
568 for(
const auto& m : biosrc->GetOrg().GetOrgname().GetMod()) {
575m_Objs[
"[n] organism[s] [has] comma or semicolon in strain or isolate"].Add(*
context.BiosourceObjRef(*biosrc));
587 if(biosrc->IsSetOrg() && biosrc->GetOrg().IsSetOrgname() && biosrc->GetOrg().GetOrgname().IsSetMod()) {
589 for(
const auto& m : biosrc->GetOrg().GetOrgname().GetMod()) {
592m_Objs[
"[n] organism[s] [has] multiple culture-collection qualifiers"].Add(*
context.BiosourceObjRef(*biosrc));
610 if(biosrc->IsSetSubtype()) {
611 boolis_metagenomic =
false;
612 boolis_env_sample =
false;
613 boolis_single_cell_amplified =
false;
614 for(
const auto& s : biosrc->GetSubtype()) {
615 if(s->IsSetSubtype()) {
617is_env_sample =
true;
618 if(is_metagenomic) {
623is_metagenomic =
true;
629 stringnm = s->GetName();
631is_single_cell_amplified =
true;
633 size_tspc = nm.find(
' ');
634 if(spc != std::string::npos) {
638is_single_cell_amplified =
true;
648 if(is_metagenomic && is_env_sample) {
651 if(is_single_cell_amplified) {
655 if(biosrc->IsSetOrg() && biosrc->GetOrg().IsSetOrgname() && biosrc->GetOrg().GetOrgname().IsSetMod()) {
657 for(
const auto& m : biosrc->GetOrg().GetOrgname().GetMod()) {
667m_Objs[
"[n] biosource[s] [is] missing required strain value"].Add(*
context.BiosourceObjRef(*biosrc));
679 while(
i<
a.length() && j <
b.length()) {
680 while(
i<
a.length() && (
a[
i] ==
':'||
a[
i] ==
' '))
i++;
681 while(j <
b.length() && (
b[j] ==
':'||
b[j] ==
' ')) j++;
682 if(
i==
a.length()) {
683 returnj ==
b.length();
685 if(j ==
b.length() ||
a[
i] !=
b[j]) {
698 if(biosrc->IsSetOrg() && biosrc->GetOrg().IsSetOrgname() && biosrc->GetOrg().GetOrgname().IsSetMod()) {
699vector<const COrgMod*> OrgMods;
700 for(
const auto& m : biosrc->GetOrg().GetOrgname().GetMod()) {
701OrgMods.push_back(&*m);
704 boolconflict =
false;
705 for(
size_t i= 0;
i< OrgMods.size();
i++) {
707 for(
size_tj =
i+ 1; j < OrgMods.size(); j++) {
723 if(conflict && !
match) {
724m_Objs[
"[n] organism[s] [has] conflicting strain and culture-collection values"].Add(*
context.BiosourceObjRef(*biosrc));
736 if(biosrc->IsSetOrg() && biosrc->GetOrg().CanGetTaxname()) {
737 const string& s = biosrc->GetOrg().GetTaxname();
738 if(s.length() > 4 && s.substr(s.length() - 4) ==
" sp."&& s.substr(0, 11) !=
"uncultured ") {
739m_Objs[
"[n] biosource[s] [has] taxname[s] that end[S] with \' sp.\' but [does] not start with \'uncultured\'"].Add(*
context.BiosourceObjRef(*biosrc));
752 boolstrand_plus =
false;
753 boolstrand_minus =
false;
754 for(
const auto& feat :
context.FeatTRNAs()) {
756strand_minus =
true;
761 if(strand_plus && strand_minus) {
765 for(
const auto& feat :
context.FeatTRNAs()) {
766m_Objs[strand_plus ?
"[n] tRNA[s] on plus strand":
"[n] tRNA[s] on minus strand"].Add(*
context.SeqFeatObjRef(*feat));
801 boolhas_clone =
false;
803 for(
const auto& subtype_it : biosource.
GetSubtype()) {
804 if(subtype_it->IsSetSubtype()) {
815 if(needs_clone && !has_clone) {
817 boolhas_gel_band_isolate =
false;
822has_gel_band_isolate =
true;
828 if(has_gel_band_isolate) {
829needs_clone =
false;
832 return(needs_clone && !has_clone);
840m_Objs[
"[n] biosource[s] [is] missing required clone value"].Add(*
context.BiosourceObjRef(*biosrc));
851 if(biosrc->IsSetOrg() && biosrc->GetOrg().IsSetOrgname() && biosrc->GetOrg().GetOrgname().IsSetMod()) {
852 for(
const auto&
om: biosrc->GetOrg().GetOrgname().GetMod()) {
854 const stringstrain =
om->GetSubname();
855 if(!strain.empty()) {
856m_Objs[strain][biosrc->GetOrg().IsSetTaxname() ? biosrc->GetOrg().GetTaxname() :
""].Add(*
context.BiosourceObjRef(*biosrc));
868 static const stringroot =
"[n] biosources have strain/taxname conflicts";
869 for(
auto& it: m_Objs.GetMap()) {
870 if(it.second->GetMap().size() > 1) {
871 for(
auto& mm: it.second->GetMap()) {
872 for(
auto& obj : mm.second->GetObjects()) {
873 string label=
"[n] biosources have strain [(]"+ it.first +
"[)] but do not have the same taxnames";
874rep[
"[n] biosources have strain/taxname conflicts"][
label].
Ext().
Add(*obj);
889 if(biosrc->IsSetOrg() && biosrc->GetOrg().IsSetOrgname() && biosrc->GetOrg().GetOrgname().IsSetMod()) {
890 for(
const auto&
om: biosrc->GetOrg().GetOrgname().GetMod()) {
892 const stringstrain =
om->GetSubname();
893 if(!strain.empty()) {
894m_Objs[strain][biosrc->GetOrg().IsSetTaxname() ? biosrc->GetOrg().GetTaxname() :
""].Add(*
context.BiosourceObjRef(*biosrc));
906 for(
auto& it: m_Objs.GetMap()) {
907 if(it.second->GetMap().size() > 1) {
908 for(
auto& mm: it.second->GetMap()) {
909 for(
auto& obj: mm.second->GetObjects()) {
910 string label=
"[n] biosources have specimen voucher [(]"+ it.first +
"[)] but do not have the same taxnames";
911rep[
"[n] biosources have specimen voucher/taxname conflicts"][
label].
Ext().
Add(*obj);
923 DISCREPANCY_CASE(CULTURE_TAXNAME_MISMATCH, BIOSRC,
eOncaller,
"Test BioSources with the same culture collection but different taxname")
926 if(biosrc->IsSetOrg() && biosrc->GetOrg().IsSetOrgname() && biosrc->GetOrg().GetOrgname().IsSetMod()) {
927 for(
const auto&
om: biosrc->GetOrg().GetOrgname().GetMod()) {
929 const stringstrain =
om->GetSubname();
930 if(!strain.empty()) {
931m_Objs[strain][biosrc->GetOrg().IsSetTaxname() ? biosrc->GetOrg().GetTaxname() :
""].Add(*
context.BiosourceObjRef(*biosrc));
943 for(
auto& it : m_Objs.GetMap()) {
944 if(it.second->GetMap().size() > 1) {
945 for(
auto& mm : it.second->GetMap()) {
946 for(
auto& obj : mm.second->GetObjects()) {
947 string label=
"[n] biosources have culture collection "+ it.first +
" but do not have the same taxnames";
948rep[
"[n] biosources have culture collection/taxname conflicts"][
label].
Ext().
Add(*obj);
963 if(biosrc->IsSetOrg() && biosrc->GetOrg().IsSetOrgname() && biosrc->GetOrg().GetOrgname().IsSetMod()) {
964 for(
const auto&
om: biosrc->GetOrg().GetOrgname().GetMod()) {
966 const stringstrain =
om->GetSubname();
967 if(!strain.empty()) {
968m_Objs[strain][biosrc->GetOrg().IsSetTaxname() ? biosrc->GetOrg().GetTaxname() :
""].Add(*
context.BiosourceObjRef(*biosrc));
981 for(
auto& it : m_Objs.GetMap()) {
982 if(it.second->GetMap().size() > 1) {
983 for(
auto& mm : it.second->GetMap()) {
984 for(
auto& obj : mm.second->GetObjects()) {
985 string label=
"[n] biosources have biomaterial "+ it.first +
" but do not have the same taxnames";
986rep[
"[n] biosources have biomaterial/taxname conflicts"][
label].
Ext().
Add(*obj);
1001 static constvector<string> suspectable_products = {
1002 "18S ribosomal RNA",
1003 "5.8S ribosomal RNA",
1004 "25S ribosomal RNA",
1005 "28S ribosomal RNA",
1006 "internal transcribed spacer 1",
1007 "internal transcribed spacer 2" 1009 static const string msg=
"[n] Bioseq[s] [has] suspect rRNA / ITS on organelle";
1018 if(feat.IsSetData() && feat.GetData().IsRna()) {
1021 const string& product =
rna.GetRnaProductName();
1024 if(!product.empty()) {
1025 for(
const string& pattern : suspectable_products) {
1027m_Objs[
msg].Add(*
context.BioseqObjRef());
1032 if(feat.IsSetComment()) {
1033 const string& comment = feat.GetComment();
1036 if(!comment.empty()) {
1037 for(
const string& pattern : suspectable_products) {
1039m_Objs[
msg].Add(*
context.BioseqObjRef());
1066 intfirst_val = (
first.*is_set_fn)() ? (
first.*get_fn)() : not_set,
1067second_val = (second.*is_set_fn)() ? (second.*get_fn)() : not_set;
1069 returnfirst_val == second_val;
1074 const R& first_val = (
first.*is_set_fn)() ? (
first.*get_fn)() : empty_val,
1075& second_val = (second.*is_set_fn)() ? (second.*get_fn)() : empty_val;
1077 returnfirst_val == second_val;
1083 if(
first.size() != second.size()) {
1087 for(CBioSource::TSubtype::const_iterator it_first =
first.cbegin(), it_second = second.cbegin();
1088it_first !=
first.cend();
1089++it_first, ++it_second) {
1109 if(
first.size() != second.size()) {
1113 for(COrg_ref::TDb::const_iterator it_first =
first.cbegin(), it_second = second.cbegin();
1114it_first !=
first.cend();
1115++it_first, ++it_second) {
1117 if(!(*it_first)->Equals(**it_second)) {
1127 boolfirst_name_set =
first.IsSetName(),
1130 if(first_name_set != second_name_set || (first_name_set &&
first.GetName().Which() != second.
GetName().
Which())) {
1131diffs.push_back(
"orgname choices differ");
1135diffs.push_back(
"genetic codes differ");
1140diffs.push_back(
"mitochondrial genetic codes differ");
1145diffs.push_back(
"attributes differ");
1149diffs.push_back(
"lineages differ");
1153diffs.push_back(
"divisions differ");
1156 boolfirst_mod_set =
first.IsSetMod(),
1157second_mod_set = second.
IsSetMod();
1159COrgName::TMod::const_iterator it_first, it_second;
1160 if(first_mod_set) {
1161it_first =
first.GetMod().cbegin();
1163 if(second_mod_set) {
1164it_second = second.
GetMod().cbegin();
1166 if(first_mod_set && second_mod_set) {
1167COrgName::TMod::const_iterator end_first =
first.GetMod().cend(),
1168end_second = second.
GetMod().cend();
1170 for(; it_first != end_first && it_second != end_second; ++it_first, ++it_second) {
1172 const string& qual = (*it_first)->IsSetSubtype() ?
COrgMod::ENUM_METHOD_NAME(ESubtype)()->FindName((*it_first)->GetSubtype(),
true) :
"Unknown source qualifier";
1175diffs.push_back(
"missing "+ qual +
" modifier");
1179diffs.push_back(qual +
" modifier attrib values differ");
1183diffs.push_back(
"different "+ qual +
" values");
1187 if(it_first == end_first) {
1188first_mod_set =
false;
1190 if(it_second == end_second) {
1191second_mod_set =
false;
1195 if(first_mod_set && !second_mod_set) {
1196 const string& qual = (*it_first)->IsSetSubtype() ?
ENUM_METHOD_NAME(
ESource_qual)()->FindName((*it_first)->GetSubtype(),
true) :
"Unknown source qualifier";
1197diffs.push_back(
"missing "+ qual +
" modifier");
1199 else if(!first_mod_set && second_mod_set) {
1200 const string& qual = (*it_second)->IsSetSubtype() ?
ENUM_METHOD_NAME(
ESource_qual)()->FindName((*it_second)->GetSubtype(),
true) :
"Unknown source qualifier";
1201diffs.push_back(
"missing "+ qual +
" modifier");
1208diffs.push_back(
"taxnames differ");
1212diffs.push_back(
"common names differ");
1216diffs.push_back(
"synonyms differ");
1219 boolfirst_db_set = first_org.
IsSetDb(),
1220second_db_set = second_org.
IsSetDb();
1222 if(first_db_set != second_db_set || (first_db_set && !
IsSameDb(first_org.
GetDb(), second_org.
GetDb()))) {
1223diffs.push_back(
"dbxrefs differ");
1229 if(first_orgname_set != second_orgname_set) {
1230diffs.push_back(
"one Orgname is missing");
1232 else if(first_orgname_set && second_orgname_set) {
1241diffs.push_back(
"origins differ");
1245diffs.push_back(
"focus differs");
1249diffs.push_back(
"locations differ");
1257diffs.push_back(
"subsource qualifiers differ");
1260 boolfirst_org_set = first_biosrc.
IsSetOrg(),
1261second_org_set = second_biosrc.
IsSetOrg();
1263 if(first_org_set != second_org_set) {
1264diffs.push_back(
"one OrgRef is missing");
1266 else if(first_org_set && second_org_set) {
1275 if(bioseq.
IsNa()) {
1280 auto& node = m_Objs[ss.str()];
1281node.Add(*
context.SeqdescObjRef(*biosrc));
1282node.Add(*
context.BioseqObjRef());
1290 auto&
M= m_Objs.GetMap();
1292 for(
auto a=
M.cbegin();
a!=
M.cend(); ++
a) {
1293stringstream ss_a(
a->first);
1297 for(++
b;
b!=
M.cend(); ++
b) {
1298stringstream ss_b(
b->first);
1303 if(!diffs.empty()) {
1304subtype =
"[n/2] inconsistent contig source[s][(] ("+
NStr::Join(diffs,
", ") +
")";
1308 if(!subtype.empty()) {
1312 if(!subtype.empty()) {
1314 size_tsubcat_index = 0;
1315 static size_tMAX_NUM_LEN = 10;
1316 for(
auto& it :
M) {
1318subcat_num =
string(MAX_NUM_LEN - subcat_num.size(),
'0') + subcat_num;
1319 stringsubcat =
"[*"+ subcat_num +
"*][n/2] contig[s] [has] identical sources that do not match another contig source";
1321rep[subtype][subcat].
Ext().
Add(it.second->GetObjects());
1333 if(biosrc->IsSetOrg()) {
1336m_Objs[ss.str()].Add(*
context.BiosourceObjRef(*biosrc));
1345 for(
const auto& db : org.
GetDb()) {
1358 if(first_set != second_set || (first_set &&
first.GetTaxname() != second.
GetTaxname())) {
1363 if(first_db_tag ==
nullptr|| second_db_tag ==
nullptr) {
1366 return!first_db_tag->
Equals(*second_db_tag);
1380 if(!m_Objs.empty()) {
1382vector<CRef<COrg_ref>> org_refs;
1383 for(
auto& it : m_Objs.GetMap()) {
1385stringstream ss(it.first);
1387org_refs.push_back(oref);
1391 const auto& replies = reply->GetReply();
1392 autorit = replies.cbegin();
1393 for(
auto& it : m_Objs.GetMap()) {
1395stringstream ss(it.first);
1397 if((*rit)->IsData() &&
OrgDiffers(*oref, (*rit)->GetData().GetOrg())) {
1398rep[
"[n] tax name[s] [does] not match taxonomy lookup"].
Add(it.second->GetObjects());
1413 if(biosrc->IsSetOrg()) {
1416m_Objs[ss.str()].Add(*
context.BiosourceObjRef(*biosrc));
1424 if(!m_Objs.empty()) {
1426vector<CRef<COrg_ref>> org_refs;
1427 for(
auto& it : m_Objs.GetMap()) {
1429stringstream ss(it.first);
1431org_refs.push_back(oref);
1435 const auto& replies = reply->GetReply();
1436 autorit = replies.cbegin();
1437 for(
auto& it : m_Objs.GetMap()) {
1438 if(!(*rit)->IsData() || (*rit)->IsError()) {
1439rep[
"[n] tax name[s] [is] missing in taxonomy lookup"].
Add(it.second->GetObjects());
1454 if(biosrc->IsSetSubtype()) {
1456 boolfound =
false;
1457 for(
const auto& subtype : biosrc->GetSubtype()) {
1458 if(subtype->IsSetSubtype()) {
1473 if(found && !skip) {
1474 if(biosrc->IsSetOrg()) {
1475 if(biosrc->GetOrg().IsSetTaxname()) {
1476 const string& s = biosrc->GetOrg().GetTaxname();
1482 if(biosrc->GetOrg().IsSetOrgname() && biosrc->GetOrg().GetOrgname().IsSetMod()) {
1483 for(
const auto& it : biosrc->GetOrg().GetOrgname().GetMod()) {
1492m_Objs[
"[n] biosource[s] [has] unnecessary environmental qualifier"].Add(*
context.BiosourceObjRef(*biosrc));
1505 if(biosrc->IsSetSubtype()) {
1506 for(
const auto& subtype : biosrc->GetSubtype()) {
1508 const string& s = subtype->GetName();
1509 if(s.length() && s[s.length() - 1] ==
':') {
1510m_Objs[
"[n] country source[s] end[S] with a colon."].Add(*
context.BiosourceObjRef(*biosrc,
true));
1524 boolfixed =
false;
1525 for(
const auto& subtype : src.
GetSubtype()) {
1529 while(s.length() && s[s.length()-1] ==
':') {
1530s.resize(s.length()-1);
1559 if(biosrc->IsSetSubtype()) {
1560 for(
const auto& subtype : biosrc->GetSubtype()) {
1562 const string& s = subtype->GetName();
1564 for(
size_t i= 0;
i< s.length();
i++) {
1565 if(s[
i] ==
':') {
1568m_Objs[
"[n] country source[s] [has] more than 1 colon."].Add(*
context.BiosourceObjRef(*biosrc,
true));
1585 boolfixed =
false;
1586 for(
const auto& subtype : src.
GetSubtype()) {
1591 for(
size_t i= 0;
i< s.length();
i++) {
1592 if(s[
i] ==
':') {
1626 if(biosrc->IsSetOrg() && biosrc->GetOrg().CanGetOrgname() && biosrc->GetOrg().GetOrgname().CanGetMod()) {
1627 for(
const auto& it : biosrc->GetOrg().GetOrgname().GetMod()) {
1629m_Objs[
"[n] organism[s] [has] \'human\' host qualifiers"].Add(*
context.BiosourceObjRef(*biosrc,
true));
1642 boolfixed =
false;
1673 if(biosrc->IsSetOrg() && biosrc->GetOrg().CanGetOrgname() && biosrc->GetOrg().GetOrgname().CanGetMod() && biosrc->GetOrg().CanGetTaxname() && biosrc->GetOrg().GetTaxname().length()) {
1675 for(
const auto& it : biosrc->GetOrg().GetOrgname().GetMod()) {
1677 if(
tax1.empty()) {
1678list<CTempString>
tmp;
1680list<CTempString>::const_iterator p =
tmp.cbegin();
1681 if(p !=
tmp.cend()) {
1684 if(p !=
tmp.cend()) {
1690list<CTempString>
tmp;
1692list<CTempString>::const_iterator p =
tmp.cbegin();
1693 if(p !=
tmp.cend()) {
1696 if(p !=
tmp.cend()) {
1700 if(aut1 !=
tax1|| aut2 != tax2) {
1701m_Objs[
"[n] biosource[s] [has] taxname/authority conflict"].Add(*
context.BiosourceObjRef(*biosrc));
1724 if(it->CanGetSubtype() && it->GetSubtype() == qual) {
1725 returnit->GetSubname();
1737 const string& taxname = biosrc->GetOrg().GetTaxname();
1742 if(taxname[
n] !=
' ') {
1746 if(
n< taxname.length()) {
1748 strings = taxname.substr(
n, q.length());
1750m_Objs[
"[n] trinomial source[s] lack[S] corresponding qualifier"].Add(*
context.BiosourceObjRef(*biosrc));
1767 boolhas_primer_note =
false;
1768 if(biosrc->CanGetSubtype()) {
1769 for(
const auto& it : biosrc->GetSubtype()) {
1771has_primer_note =
true;
1776 if(!has_primer_note && biosrc->IsSetOrg() && biosrc->GetOrg().CanGetOrgname() && biosrc->GetOrg().GetOrgname().CanGetMod()) {
1777 for(
const auto& it : biosrc->GetOrg().GetOrgname().GetMod()) {
1779has_primer_note =
true;
1784 if(has_primer_note) {
1785m_Objs[
"[n] biosource[s] [has] \'amplified with species-specific primers\' note but no environmental-sample qualifier."].Add(*
context.BiosourceObjRef(*biosrc,
true));
1794 boolchange =
false;
1801 const string orig= s->GetName();
1802 NStr::ReplaceInPlace(s->SetName(),
"[amplified with species-specific primers",
"amplified with species-specific primers");
1803 NStr::ReplaceInPlace(s->SetName(),
"amplified with species-specific primers]",
"amplified with species-specific primers");
1822 return CRef<CAutofixReport>(
new CAutofixReport(
"AMPLIFIED_PRIMERS_NO_ENVIRONMENTAL_SAMPLE: Set environmental_sample, fixed amplified primers note for [n] source[s]", 1));
1835 if(biosrc->CanGetPcr_primers() && biosrc->GetPcr_primers().CanGet()) {
1836 boolreport =
false;
1837 for(
const auto& pr : biosrc->GetPcr_primers().Get()) {
1838 if(pr->CanGetForward() != pr->CanGetReverse()) {
1842 if(pr->CanGetForward()) {
1845CPCRPrimerSet::Tdata::const_iterator fwd = fwdset.
Get().cbegin();
1846CPCRPrimerSet::Tdata::const_iterator rev = revset.
Get().cbegin();
1847 while(fwd != fwdset.
Get().cend() && rev != revset.
Get().cend()) {
1848 if(((*fwd)->CanGetName() && !(*fwd)->GetName().Get().empty()) != ((*rev)->CanGetName() && !(*rev)->GetName().Get().empty()) || ((*fwd)->CanGetSeq() && !(*fwd)->GetSeq().Get().empty()) != ((*rev)->CanGetSeq() && !(*rev)->GetSeq().Get().empty())) {
1861m_Objs[
"[n] biosource[s] [has] primer set[s] with missing values"].Add(*
context.BiosourceObjRef(*biosrc));
1872 size_tcount_a =
a.size();
1873 size_tcount_b =
b.size();
1874 if(count_a != count_b) {
1877 for(CPCRPrimerSet::Tdata::const_iterator it =
a.cbegin(); it !=
a.cend(); it++) {
1878CPCRPrimerSet::Tdata::const_iterator jt =
b.cbegin();
1879 for(; jt !=
b.cend(); jt++) {
1880 if((*it)->CanGetName() == (*jt)->CanGetName() && (*it)->CanGetSeq() == (*jt)->CanGetSeq()
1881&& (!(*it)->CanGetName() || (*it)->GetName().Get() == (*jt)->GetName().Get())
1882&& (!(*it)->CanGetSeq() || (*it)->GetSeq().Get() == (*jt)->GetSeq().Get())) {
1886 if(jt ==
b.cend()) {
1896 return a.CanGetForward() ==
b.CanGetForward() &&
a.CanGetReverse() ==
b.CanGetReverse()
1897&& (!
a.CanGetForward() ||
EqualPrimerSets(
a.GetForward().Get(),
b.GetForward().Get()))
1898&& (!
a.CanGetReverse() ||
EqualPrimerSets(
a.GetReverse().Get(),
b.GetReverse().Get()));
1905 if(biosrc->CanGetPcr_primers() && biosrc->GetPcr_primers().CanGet()) {
1908 for(CPCRReactionSet::Tdata::const_iterator it =
data.cbegin(); !
done&& it !=
data.cend(); it++) {
1909CPCRReactionSet::Tdata::const_iterator jt = it;
1910 for(jt++; !
done&& jt !=
data.cend(); jt++) {
1912m_Objs[
"[n] BioSource[s] [has] duplicate primer pairs."].Add(*
context.BiosourceObjRef(*biosrc));
1928 if(biosrc->CanGetSubtype()) {
1929 for(
const auto& it : biosrc->GetSubtype()) {
1931m_Objs[
"[n] biosource[s] [has] metagenomic qualifier"].Add(*
context.BiosourceObjRef(*biosrc));
1945 if(biosrc->IsSetOrg() && biosrc->GetOrg().CanGetOrgname() && biosrc->GetOrg().GetOrgname().CanGetMod() && biosrc->GetOrg().IsSetTaxname() && !biosrc->GetOrg().GetTaxname().empty()) {
1946 for(
const auto& it : biosrc->GetOrg().GetOrgname().GetMod()) {
1948m_Objs[
"[n] biosource[s] [has] metagenome_source qualifier"].Add(*
context.BiosourceObjRef(*biosrc));
1973 static const char*
kDupSrc=
"[n] source[s] [has] two or more qualifiers with the same value";
1977 "DUP_SRC_QUAL_DATA")
1981 stringcollected_by;
1982 stringidentified_by;
1983 if(biosrc->CanGetSubtype()) {
1984 for(
const auto& it : biosrc->GetSubtype()) {
1985 if(it->CanGetName()) {
1986 const string& s = it->GetName();
1987 if(it->CanGetSubtype()) {
2001 if(biosrc->IsSetOrg() && biosrc->GetOrg().CanGetOrgname() && biosrc->GetOrg().GetOrgname().CanGetMod()) {
2002 for(
const auto& it : biosrc->GetOrg().GetOrgname().GetMod()) {
2003 if(it->IsSetSubname()) {
2004 const string& s = it->GetSubname();
2005 if(it->CanGetSubtype()) {
2019 if(biosrc->IsSetOrg() && biosrc->GetOrg().CanGetTaxname()) {
2020 const string& s = biosrc->GetOrg().GetTaxname();
2022 Map[s].push_back(
"organism");
2025 if(biosrc->CanGetPcr_primers()) {
2026 for(
const auto& it : biosrc->GetPcr_primers().Get()) {
2027 if(it->CanGetForward()) {
2028 for(
const auto& pr : it->GetForward().Get()) {
2029 if(pr->CanGetName()) {
2030 Map[pr->GetName()].push_back(
"fwd-primer-name");
2032 if(pr->CanGetSeq()) {
2033 Map[pr->GetSeq()].push_back(
"fwd-primer-seq");
2037 if(it->CanGetReverse()) {
2038 for(
const auto& pr : it->GetReverse().Get()) {
2039 if(pr->CanGetName()) {
2040 Map[pr->GetName()].push_back(
"rev-primer-name");
2042 if(pr->CanGetSeq()) {
2043 Map[pr->GetSeq()].push_back(
"rev-primer-seq");
2050 for(
const auto& it :
Map) {
2051 if(it.second.size() > 1) {
2052 if(it.second.size() == 2 && it.first == collected_by && collected_by == identified_by) {
2055 strings =
"[n] biosource[s] [has] value\'";
2057s +=
"\' for these qualifiers: ";
2058 for(
size_t i= 0;
i< it.second.size();
i++) {
2062s += it.second[
i];
2080 if(
context.HasLineage(biosrc ? &biosrc->
GetSource() :
nullptr,
"Microsporidia")) {
2081 boolhas_unusual =
false;
2083 if(feat.IsSetComment() && feat.IsSetData() && feat.GetData().IsRna()) {
2087has_unusual =
true;
2094m_Objs[
"[n] Bioseq[s] [has] unusual rRNA / ITS"].Add(*
context.BioseqObjRef());
2102 #define SARS_TAX_ID 2697049 2107 if(biosrc->IsSetOrg() && biosrc->GetOrg().CanGetDb()) {
2109 for(
const auto& db : biosrc->GetOrg().GetDb()) {
2110 if(db->CanGetTag() && db->GetTag().IsId() && db->GetTag().GetId() ==
SARS_TAX_ID&& db->CanGetDb() && db->GetDb() ==
"taxon") {
2118 if(biosrc->IsSetOrg() && biosrc->GetOrg().IsSetOrgname() && biosrc->GetOrg().GetOrgname().IsSetMod()) {
2119 for(
const auto& m : biosrc->GetOrg().GetOrgname().GetMod()) {
2121isolate = m->GetSubname();
2126 if(!isolate.length()) {
2127isolate =
"no isolate";
2130 if(good && isolate.find(
"SARS-CoV-2") != 0) {
2135vector<string>
arr;
2137 if(
arr.size() == 5) {
2145 stringdate, date0, date1;
2146 if(biosrc->IsSetSubtype()) {
2147 for(
const auto& it : biosrc->GetSubtype()) {
2149date = it->GetName();
2154 if(date.length() >= 4) {
2155date0 = date.substr(0, 4);
2156date1 = date.substr(date.length() - 4);
2158good = year == date0 || year == date1;
2161m_Objs[
"[n] SARS-CoV-2 biosource[s] [has] wrong isolate format"][isolate].Add(*
context.BiosourceObjRef(*biosrc));
User-defined methods of the data storage class.
static const CDbtag * GetTaxonTag(const COrg_ref &org)
list< string > TInconsistecyDescriptionList
static bool IsSameDb(const COrg_ref::TDb &first, const COrg_ref::TDb &second)
static bool IsMissingRequiredClone(const CBioSource &biosource)
static bool SetCultureCollectionFromStrain(CBioSource &src)
static bool IsSameSubtype(const CBioSource::TSubtype &first, const CBioSource::TSubtype &second)
static void GetOrgrefDifferences(const COrg_ref &first_org, const COrg_ref &second_org, TInconsistecyDescriptionList &diffs)
static bool MatchExceptSpaceColon(const string &a, const string &b)
const string kAmplifiedWithSpeciesSpecificPrimers
const string kMissingViralQualsTop
static bool SetEnvSampleFixAmplifiedPrimers(CBioSource &src)
static bool FindDuplicatePrimers(const CPCRReaction &a, const CPCRReaction &b)
static void GetBiosourceDifferences(const CBioSource &first_biosrc, const CBioSource &second_biosrc, TInconsistecyDescriptionList &diffs)
static bool ChangeCountryColonToComma(CBioSource &src)
bool HasStrainForATCCCultureCollection(const COrgName::TMod &mods, const string &culture_collection)
static bool EqualPrimerSets(const CPCRPrimerSet::Tdata &a, const CPCRPrimerSet::Tdata &b)
bool HasCultureCollectionForATCCStrain(const COrgName::TMod &mods, const string &strain)
static bool FixHumanHost(CBioSource &src)
static bool OrgDiffers(const COrg_ref &first, const COrg_ref &second)
static CRef< CTaxon3_reply > GetOrgRefs(vector< CRef< COrg_ref >> &orgs)
static const size_t srcqual_keywords_sz
static const char * kDupSrc
static string GetOrgModName(const COrgMod &qual)
static void GetOrgnameDifferences(const COrgName &first, const COrgName &second, TInconsistecyDescriptionList &diffs)
static string GetSubtypeName(const CSubSource &qual)
static string GetSrcQual(const CBioSource &bs, int qual)
bool HasAmplifiedWithSpeciesSpecificPrimerNote(const CBioSource &src)
static const pair< int, string > srcqual_keywords[]
static bool RemoveCountryColon(CBioSource &src)
bool HasSubtype(CSubSource::TSubtype subtype) const
bool(T::* TIsSetFn)() const
int(T::* TGetIntFn)() const
static bool IsEqualVal(const T &first, const T &second, TIsSetFn is_set_fn, TGetRFn get_fn, const R &empty_val)
const R &(T::* TGetRFn)() const
static bool IsEqualInt(const T &first, const T &second, TIsSetFn is_set_fn, TGetIntFn get_fn, int not_set)
static bool HasLineage(const CBioSource &biosrc, const string &def_lineage, const string &type)
@OrgMod.hpp User-defined methods of the data storage class.
static string GetSubtypeName(TSubtype stype, EVocabulary vocabulary=eVocabulary_raw)
bool IsSetOrgMod(void) const
@RNA_ref.hpp User-defined methods of the data storage class.
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
namespace ncbi::objects::
static bool HasCultureNotes(const string &value)
static string GetSubtypeName(CSubSource::TSubtype stype, EVocabulary vocabulary=eVocabulary_raw)
static CRef< CDate > DateFromCollectionDate(const string &str) THROWS((CException))
virtual CRef< CTaxon3_reply > SendOrgRefList(const vector< CRef< COrg_ref > > &list, COrg_ref::fOrgref_parts result_parts=COrg_ref::eOrgref_default, fT3reply_parts t3result_parts=eT3reply_default)
static vector< string > arr
#define DISCREPANCY_AUTOFIX(name)
#define DISCREPANCY_CASE1(name, type, group, descr,...)
#define DISCREPANCY_CASE(name, type, group, descr)
#define DISCREPANCY_SUMMARIZE(name)
int GetSubtype(CFieldNamePanel *field_name_panel, string &ncRNA_class)
static DLIST_TYPE *DLIST_NAME() first(DLIST_LIST_TYPE *list)
CRange< Position > Map(const CRange< Position > &target, const CRange< Position > &range)
constexpr size_t ArraySize(const Element(&)[Size])
#define MSerial_AsnBinary
#define ENUM_METHOD_NAME(EnumName)
virtual bool Equals(const CSerialObject &object, ESerialRecursionMode how=eRecursive) const
Check if both objects contain the same values.
#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 list< string > & SplitByPattern(const CTempString str, const CTempString delim, list< string > &arr, TSplitFlags flags=0, vector< SIZE_TYPE > *token_pos=NULL)
Variation of Split() with fSplit_ByPattern flag applied by default.
static string SizetToString(size_t value, TNumToStringFlags flags=0, int base=10)
Convert size_t to 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 int StringToInt(const CTempString str, TStringToNumFlags flags=0, int base=10)
Convert string to int.
static list< string > & Split(const CTempString str, const CTempString delim, list< string > &arr, TSplitFlags flags=0, vector< SIZE_TYPE > *token_pos=NULL)
Split a string using specified delimiters.
static SIZE_TYPE FindNoCase(const CTempString str, const CTempString pattern, SIZE_TYPE start, SIZE_TYPE end, EOccurrence which=eFirst)
Find the pattern in the specified range of a string using a case insensitive search.
static bool IsBlank(const CTempString str, SIZE_TYPE pos=0)
Check if a string is blank (has no text).
static void TruncateSpacesInPlace(string &str, ETrunc where=eTrunc_Both)
Truncate whitespace in a string (in-place)
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 string Join(const TContainer &arr, const CTempString &delim)
Join strings using the specified delimiter.
static bool StartsWith(const CTempString str, const CTempString start, ECase use_case=eCase)
Check if a string starts with a specified prefix value.
static unsigned int StringToUInt(const CTempString str, TStringToNumFlags flags=0, int base=10)
Convert string to unsigned int.
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.
static string & ReplaceInPlace(string &src, const string &search, const string &replace, SIZE_TYPE start_pos=0, SIZE_TYPE max_replace=0, SIZE_TYPE *num_replace=0)
Replace occurrences of a substring within a string.
@ fSplit_Tokenize
All delimiters are merged and trimmed, to get non-empty tokens only.
@ eNocase
Case insensitive compare.
static const char label[]
const TSubtype & GetSubtype(void) const
Get the Subtype member data.
TGenome GetGenome(void) const
Get the Genome member data.
TOrigin GetOrigin(void) const
Get the Origin member data.
const Tdata & Get(void) const
Get the member data.
bool IsSetOrg(void) const
Check if a value has been assigned to Org data member.
list< CRef< CSubSource > > TSubtype
bool IsSetSubtype(void) const
Check if a value has been assigned to Subtype data member.
const TOrg & GetOrg(void) const
Get the Org member data.
bool IsSetOrigin(void) const
Check if a value has been assigned to Origin data member.
const TAttrib & GetAttrib(void) const
Get the Attrib member data.
TSubtype GetSubtype(void) const
Get the Subtype member data.
bool IsSetGenome(void) const
Check if a value has been assigned to Genome data member.
bool IsSetSubtype(void) const
Check if a value has been assigned to Subtype data member.
void SetOrg(TOrg &value)
Assign a value to Org data member.
void SetName(const TName &value)
Assign a value to Name data member.
const TName & GetName(void) const
Get the Name member data.
bool IsSetAttrib(void) const
attribution/source of this name Check if a value has been assigned to Attrib data member.
bool IsSetIs_focus(void) const
to distinguish biological focus Check if a value has been assigned to Is_focus data member.
list< CRef< CPCRReaction > > Tdata
bool IsSetName(void) const
Check if a value has been assigned to Name data member.
TSubtype & SetSubtype(void)
Assign a value to Subtype data member.
list< CRef< CPCRPrimer > > Tdata
@ eSubtype_collection_date
DD-MMM-YYYY format.
@ eSubtype_collected_by
name of person who collected the sample
@ eSubtype_isolation_source
@ eSubtype_environmental_sample
@ eSubtype_identified_by
name of person who identified the sample
bool IsSetYear(void) const
full year (including 1900) Check if a value has been assigned to Year data member.
bool IsStd(void) const
Check if variant Std is selected.
TYear GetYear(void) const
Get the Year member data.
const TStd & GetStd(void) const
Get the variant data.
ESource_qual
Access to ESource_qual's attributes (values, names) as defined in spec.
const TMod & GetMod(void) const
Get the Mod member data.
bool CanGetMod(void) const
Check if it is safe to call GetMod method.
bool IsSetDb(void) const
ids in taxonomic or culture dbases Check if a value has been assigned to Db data member.
const TLineage & GetLineage(void) const
Get the Lineage member data.
TSubtype GetSubtype(void) const
Get the Subtype member data.
const TDiv & GetDiv(void) const
Get the Div member data.
const TAttrib & GetAttrib(void) const
Get the Attrib member data.
TMgcode GetMgcode(void) const
Get the Mgcode member data.
E_Choice Which(void) const
Which variant is currently selected.
TGcode GetGcode(void) const
Get the Gcode member data.
bool IsSetSubtype(void) const
Check if a value has been assigned to Subtype data member.
const TSubname & GetSubname(void) const
Get the Subname member data.
bool IsSetCommon(void) const
common name Check if a value has been assigned to Common data member.
bool IsSetLineage(void) const
lineage with semicolon separators Check if a value has been assigned to Lineage data member.
vector< CRef< CDbtag > > TDb
const TName & GetName(void) const
Get the Name member data.
const TTaxname & GetTaxname(void) const
Get the Taxname member data.
bool IsSetMgcode(void) const
mitochondrial genetic code Check if a value has been assigned to Mgcode data member.
const TCommon & GetCommon(void) const
Get the Common member data.
const TDb & GetDb(void) const
Get the Db member data.
const TSyn & GetSyn(void) const
Get the Syn member data.
bool IsSetDiv(void) const
GenBank division code Check if a value has been assigned to Div data member.
bool IsSetMod(void) const
Check if a value has been assigned to Mod data member.
list< CRef< COrgMod > > TMod
bool IsSetAttrib(void) const
attribution of name Check if a value has been assigned to Attrib data member.
bool CanGetOrgname(void) const
Check if it is safe to call GetOrgname method.
bool IsSetOrgname(void) const
Check if a value has been assigned to Orgname data member.
bool IsSetSubname(void) const
Check if a value has been assigned to Subname data member.
bool IsSetTaxname(void) const
preferred formal name Check if a value has been assigned to Taxname data member.
bool IsSetAttrib(void) const
attribution/source of name Check if a value has been assigned to Attrib data member.
bool IsSetGcode(void) const
genetic code (see CdRegion) Check if a value has been assigned to Gcode data member.
bool IsSetSyn(void) const
synonyms for taxname or common Check if a value has been assigned to Syn data member.
bool IsSetName(void) const
Check if a value has been assigned to Name data member.
const TAttrib & GetAttrib(void) const
Get the Attrib member data.
const TOrgname & GetOrgname(void) const
Get the Orgname member data.
@ eSubtype_gb_acronym
used by taxonomy database
@ eSubtype_gb_synonym
used by taxonomy database
@ eSubtype_other
ASN5: old-name (254) will be added to next spec.
@ eSubtype_nat_host
natural host of this specimen
@ eSubtype_metagenome_source
@ eSubtype_specimen_voucher
@ eSubtype_gb_anamorph
used by taxonomy database
@ eSubtype_culture_collection
const TSource & GetSource(void) const
Get the variant data.
unsigned int
A callback function used to compare two keys in a database.
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 orig
unique_ptr< CLocalTaxon > tax1
CBioSource * GetBioSourceFromContext(CDiscrepancyObject *obj, CDiscrepancyContext &context)
const CharType(& source)[N]
static int match(PCRE2_SPTR start_eptr, PCRE2_SPTR start_ecode, uint16_t top_bracket, PCRE2_SIZE frame_size, pcre2_match_data *match_data, match_block *mb)
static SLJIT_INLINE sljit_ins st(sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b)
static SLJIT_INLINE sljit_ins msg(sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b)
CRef< objects::CObjectManager > om
static CS_CONTEXT * context
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4