38 eTestNames::COUNT_NUCLEOTIDES,
39 eTestNames::VERY_LONG_NO_ANNOTATION,
40 eTestNames::LONG_NO_ANNOTATION,
41 eTestNames::NO_ANNOTATION,
45 eTestNames::SOURCE_QUALS,
46 eTestNames::DUP_SRC_QUAL,
47 eTestNames::MAP_CHROMOSOME_CONFLICT,
48 eTestNames::BIOMATERIAL_TAXNAME_MISMATCH,
49 eTestNames::SPECVOUCHER_TAXNAME_MISMATCH,
50 eTestNames::STRAIN_CULTURE_COLLECTION_MISMATCH,
51 eTestNames::TRINOMIAL_SHOULD_HAVE_QUALIFIER,
52 eTestNames::REQUIRED_STRAIN,
53 eTestNames::BACTERIA_SHOULD_NOT_HAVE_ISOLATE,
54 eTestNames::METAGENOMIC,
55 eTestNames::METAGENOME_SOURCE,
56 eTestNames::MAG_SHOULD_NOT_HAVE_STRAIN,
57 eTestNames::MAG_MISSING_ISOLATE,
59 eTestNames::TITLE_ENDS_WITH_SEQUENCE,
62 eTestNames::PERCENT_N,
63 eTestNames::TEN_PERCENTN,
64 eTestNames::TERMINAL_NS,
65 eTestNames::ZERO_BASECOUNT,
66 eTestNames::LOW_QUALITY_REGION,
67 eTestNames::UNUSUAL_NT,
71 eTestNames::GENOMIC_MRNA,
73 eTestNames::CHECK_AUTH_CAPS,
74 eTestNames::CHECK_AUTH_NAME,
75 eTestNames::TITLE_AUTHOR_CONFLICT,
76 eTestNames::CITSUBAFFIL_CONFLICT,
77 eTestNames::SUBMITBLOCK_CONFLICT,
78 eTestNames::UNPUB_PUB_WITHOUT_TITLE,
79 eTestNames::USA_STATE,
81 eTestNames::FEATURE_COUNT,
82 eTestNames::PROTEIN_NAMES,
83 eTestNames::SUSPECT_PRODUCT_NAMES,
84 eTestNames::SUSPECT_PHRASES,
85 eTestNames::INCONSISTENT_PROTEIN_ID,
86 eTestNames::MISSING_PROTEIN_ID,
87 eTestNames::MRNA_SHOULD_HAVE_PROTEIN_TRANSCRIPT_IDS,
88 eTestNames::BAD_LOCUS_TAG_FORMAT,
89 eTestNames::INCONSISTENT_LOCUS_TAG_PREFIX,
90 eTestNames::DUPLICATE_LOCUS_TAGS,
91 eTestNames::MISSING_LOCUS_TAGS,
92 eTestNames::NON_GENE_LOCUS_TAG,
93 eTestNames::MISSING_GENES,
94 eTestNames::EXTRA_GENES,
95 eTestNames::BAD_BACTERIAL_GENE_NAME,
96 eTestNames::BAD_GENE_NAME,
97 eTestNames::BAD_GENE_STRAND,
98 eTestNames::DUP_GENES_OPPOSITE_STRANDS,
99 eTestNames::GENE_PARTIAL_CONFLICT,
100 eTestNames::GENE_PRODUCT_CONFLICT,
101 eTestNames::SHOW_HYPOTHETICAL_CDS_HAVING_GENE_NAME,
102 eTestNames::EC_NUMBER_ON_UNKNOWN_PROTEIN,
103 eTestNames::MISC_FEATURE_WITH_PRODUCT_QUAL,
104 eTestNames::PARTIAL_CDS_COMPLETE_SEQUENCE,
105 eTestNames::CONTAINED_CDS,
106 eTestNames::RNA_CDS_OVERLAP,
107 eTestNames::CDS_TRNA_OVERLAP,
108 eTestNames::OVERLAPPING_RRNAS,
109 eTestNames::FIND_OVERLAPPED_GENES,
110 eTestNames::ORDERED_LOCATION,
111 eTestNames::PARTIAL_PROBLEMS,
112 eTestNames::FEATURE_LOCATION_CONFLICT,
113 eTestNames::PSEUDO_MISMATCH,
114 eTestNames::EUKARYOTE_SHOULD_HAVE_MRNA,
115 eTestNames::MULTIPLE_CDS_ON_MRNA,
116 eTestNames::CDS_WITHOUT_MRNA,
117 eTestNames::BACTERIA_SHOULD_NOT_HAVE_MRNA,
118 eTestNames::BACTERIAL_PARTIAL_NONEXTENDABLE_EXCEPTION,
119 eTestNames::BACTERIAL_PARTIAL_NONEXTENDABLE_PROBLEMS,
120 eTestNames::BACTERIAL_JOINED_FEATURES_NO_EXCEPTION,
121 eTestNames::JOINED_FEATURES,
122 eTestNames::RIBOSOMAL_SLIPPAGE,
123 eTestNames::BAD_BGPIPE_QUALS,
124 eTestNames::CDS_HAS_NEW_EXCEPTION,
125 eTestNames::SHOW_TRANSL_EXCEPT,
126 eTestNames::RNA_NO_PRODUCT,
127 eTestNames::RRNA_NAME_CONFLICTS,
128 eTestNames::SUSPECT_RRNA_PRODUCTS,
129 eTestNames::SHORT_RRNA,
130 eTestNames::FIND_BADLEN_TRNAS,
131 eTestNames::UNUSUAL_MISC_RNA,
132 eTestNames::SHORT_LNCRNA,
133 eTestNames::SHORT_INTRON,
134 eTestNames::EXON_INTRON_CONFLICT,
135 eTestNames::EXON_ON_MRNA,
136 eTestNames::SHORT_PROT_SEQUENCES,
138 eTestNames::INCONSISTENT_DBLINK,
139 eTestNames::INCONSISTENT_MOLINFO_TECH,
140 eTestNames::INCONSISTENT_MOLTYPES,
141 eTestNames::INCONSISTENT_STRUCTURED_COMMENTS,
142 eTestNames::QUALITY_SCORES,
143 eTestNames::SEGSETS_PRESENT,
155 for (
const auto& it : subs) {
156 if (it->IsSummary() && it->IsFatal()) {
166 return s[0] ==
'_' ? s.substr(1) : s;
174 for (
const auto& it : list) {
175 if (it->IsExtended() && !ext) {
182 auto IsDupDefline = (title == string_view(
"DUP_DEFLINE"));
183 out << title <<
": " << it->GetMsg() <<
'\n';
185 if (!subs.empty() && (ext || !subs[0]->IsExtended())) {
190 for (
const auto& obj : det) {
192 out << obj->GetPath() <<
":";
194 if (obj->IsFixed()) {
199 obj->GetBioseqLabel() :
211 for (
const auto& it : list) {
212 auto title = it->GetTitle();
213 auto msg = it->GetMsg();
214 bool includeInSummary = (level == 0 )
215 || (title == string_view(
"SOURCE_QUALS") && level == 1);
216 if (includeInSummary) {
222 else if (it->IsSummary()) {
240 for (
const auto& it : list) {
241 if (it->IsFatal() && it->GetTitle() != string_view(
"SOURCE_QUALS")
242 && it->GetTitle() != string_view(
"SUSPECT_PRODUCT_NAMES")) {
248 else if (it->IsSummary()) {
251 out << it->GetMsg() <<
'\n';
265 for (
const auto& it : m_List) {
268 for (
const auto& tt :
tmp) {
275 for (
const auto& it :
tests) {
277 for (
const auto& it2 : list) {
283 for (
const auto& it : m_List) {
285 for (
const auto& tt :
tmp) {
291 for (
const auto& tt :
tmp) {
296 if (!m_Label.empty()) {
304 for (
const auto& tt :
out) {
306 if (!details.empty() || tt->GetCount() > 0) {
309 for (
auto& ob : details) {
312 if (tt->CanAutofix()) {
313 di->m_Autofix =
true;
318 else if (tt->IsFatal()) {
330 for (
const auto& it :
tests) {
332 for (
const auto& it : list) {
346 out <<
"Discrepancy Report Results (due to the large size of the file some checks may not have run)\n\n";
349 out <<
"Discrepancy Report Results (SMART set of checks)\n\n";
352 out <<
"Discrepancy Report Results (submitter set of checks)\n\n";
355 out <<
"Discrepancy Report Results\n\n";
366 std::cerr << m_Group0.size() <<
":" << m_Group1.size() <<
"\n";
378 out <<
"\nDetailed Report\n\n";
385 static const size_t XML_INDENT = 2;
394 for (
const auto& it : list) {
395 if (it->IsExtended() && !ext) {
400 out <<
" severity=\"" <<
SevLevel[it->GetSeverity()] <<
"\"";
401 if (it->GetCount() > 0) {
404 if (!it->GetUnit().empty()) {
407 if (it->CanAutofix()) {
408 out <<
" autofix=\"true\"";
414 if (!subs.empty() && (ext || !subs[0]->IsExtended())) {
418 for (
const auto& obj : it->GetDetails()) {
420 out <<
"<object type=";
421 switch (obj->GetType()) {
423 out <<
"\"feature\"";
426 out <<
"\"descriptor\"";
429 out <<
"\"sequence\"";
435 out <<
"\"submit_block\"";
447 const string sFeatureType = obj->GetFeatureType();
448 if (!sFeatureType.empty()) {
451 const string sProductName = obj->GetProductName();
452 if (!sProductName.empty()) {
453 out << (sFeatureType ==
"Gene" ?
" symbol=\"" :
" product=\"") <<
NStr::XmlEncode(sProductName) <<
"\"";
455 const string sLocation = obj->GetLocation();
456 if (!sLocation.empty()) {
459 const string sLocusTag = obj->GetLocusTag();
460 if (!sLocusTag.empty()) {
463 const string text = obj->GetText();
469 out <<
"</details>\n";
475 vector<std::pair<TDiscrepancyCoreMap::key_type, TDiscrepancyCoreMap::mapped_type>> vec;
476 vec.reserve(
tests.size());
481 sort(vec.begin(), vec.end(), [&order](
auto& l,
auto r)
483 auto it_l = std::find(order.begin(), order.end(), l.first);
484 auto it_r = std::find(order.begin(), order.end(), r.first);
487 return r.first < l.first;
491 list<CRef<CDiscrepancyCore>>
result;
493 for (
const auto&
test : vec) {
502 out <<
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
503 out <<
"<discrepancy_report>\n";
506 for (
const auto&
test : sorted) {
512 for (
const auto& it : rep) {
521 <<
"\" severity=\"" <<
SevLevel[max_sev]
522 <<
"\" cardinality=\"" << rep.size() <<
"\">\n";
527 out <<
"</discrepancy_report>\n";
static void fatal(const char *msg,...)
void OutputXML(CNcbiOstream &out, unsigned short flags) override
void OutputText(CNcbiOstream &out, unsigned short flags, char group=0) override
TDiscrepancyCoreMap m_Tests
virtual vector< CRef< CReportItem > > GetSubitems() const =0
virtual bool IsFatal() const =0
static void Add(TReportObjectList &list, TReportObjectSet &hash, CReportObj &obj, bool unique=true)
static constexpr size_t capacity()
vector< CRef< CReportItem > > TReportItemList
vector< CRef< CReportObj > > TReportObjectList
std::ofstream out("events_result.xml")
main entry point for tests
#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 Int8ToString(Int8 value, TNumToStringFlags flags=0, int base=10)
Convert Int8 to string.
static string XmlEncode(const CTempString str, TXmlEncode flags=eXmlEnc_Contents)
Encode a string for XML.
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 void text(MDB_val *v)
constexpr auto sort(_Init &&init)
constexpr bool empty(list< Ts... >) noexcept
double r(size_t dimension_, const Int4 *score_, const double *prob_, double theta_)
int test(int srctype, const void *srcdata, int srclen, int dsttype, int dstlen)
static DbTestEntry * tests
static list< CRef< CDiscrepancyCore > > x_ReorderList(const std::vector< eTestNames > &order, const TDiscrepancyCoreMap &tests)
static void RecursiveXML(ostream &out, const TReportItemList &list, unsigned short flags, size_t indent)
static void RecursiveText(ostream &out, const TReportItemList &list, unsigned short flags)
static bool ShowFatal(const CReportItem &item)
static bool RecursiveFatalSummary(ostream &out, const TReportItemList &list, size_t level=0)
static constexpr std::initializer_list< eTestNames > g_ReportOrder0
static TReportItemList x_CollectGroup(const std::initializer_list< eTestNames > &m_List, TDiscrepancyCoreMap &tests, bool all)
static constexpr std::initializer_list< eTestNames > g_ReportOrder1
static string SevLevel[CReportItem::eSeverity_error+1]
static void RecursiveSummary(ostream &out, const TReportItemList &list, unsigned short flags, size_t level=0)
static string_view s_RemoveInitialUnderscore(string_view s)
static void Indent(ostream &out, size_t indent)