;
114 classCMissingInputException : exception
122 throwCMissingInputException();
149 string GetText()
const override{
returnm_txt; }
161 const string& sMessage,
162 const Uint8iNumDone,
163 const Uint8iNumTotal)
173 auto edit=
dynamic_cast<constedit::CRemoteUpdaterMessage*
>(&message);
174 if(
edit&& (
edit->m_error != edit::EPubmedError::citation_not_found)) {
185 string str= ss.str();
205 "aln-file",
"InFile",
"Alignment input file",
214 "aln-gapchar",
"STRING",
"Alignment missing indicator",
219 "aln-missing",
"STRING",
"Alignment missing indicator",
224 "aln-alphabet",
"STRING",
"Alignment alphabet",
239HideStdArgs(fHideDryRun);
246arg_desc->AddOptionalKey(
247 "indir",
"Directory",
"Path to input files",
250arg_desc->AddOptionalKey(
251 "outdir",
"Directory",
"Path to results",
254arg_desc->AddFlag(
"E",
"Recurse");
256arg_desc->AddDefaultKey(
259arg_desc->AddOptionalKey(
260 "i",
"InFile",
"Single Input File",
263x_SetAlnArgs(*arg_desc);
265arg_desc->AddOptionalKey(
266 "o",
"OutFile",
"Single Output File",
269arg_desc->AddDefaultKey(
272arg_desc->AddFlag(
"binary",
"Output binary ASN.1");
274arg_desc->AddOptionalKey(
"t",
"InFile",
"Template File",
277arg_desc->AddDefaultKey(
278 "a",
"String",
"File Type\n" 281 " d FASTA Delta, di FASTA Delta with Implicit Gaps\n" 283may be implemented
inthe future; RW-1253
284 " l FASTA+Gap Alignment (l Batch, l1 Pop, l2 Phy, l3 Mut, l4 Eco,\n" 285 " l9 Small-genome)\n" 287 " z FASTA with Gap Lines" 289may be implemented
inthe future; RW-1253
295arg_desc->AddFlag(
"J",
"Delayed Genomic Product Set ");
297arg_desc->AddOptionalKey(
299arg_desc->AddOptionalKey(
303arg_desc->AddOptionalKey(
304 "j",
"String",
"Source Qualifiers.\nThese qualifier values override any conflicting values read from a file (See -src-file)",
306arg_desc->AddOptionalKey(
"src-file",
"InFile",
"Single source qualifiers file. The qualifiers in this file override any conflicting qualifiers automically read from a .src file, which, in turn, take precedence over source qualifiers specified in a fasta defline",
CArgDescriptions::eInputFile);
307arg_desc->AddFlag(
"accum-mods",
"Accumulate non-conflicting modifier values from different sources. For example, with this option, a 'note' modifier specified on the command line no longer overwrites a 'note' modifier read from a .src file. Both notes will appear in the output ASN.1. If modifier values conflict, the rules of precedence specified above apply");
308arg_desc->AddOptionalKey(
310arg_desc->AddOptionalKey(
312arg_desc->AddOptionalKey(
314arg_desc->AddOptionalKey(
317arg_desc->AddOptionalKey(
318 "V",
"String",
"Verification (combine any of the following letters)\n\ 319 v Validate with Normal Stringency\n\ 320 b Generate GenBank Flatfile\n\ 323arg_desc->AddFlag(
"q",
"Seq ID from File Name");
325arg_desc->AddFlag(
"U",
"Remove Unnecessary Gene Xref");
326arg_desc->AddFlag(
"T",
"Remote Taxonomy Lookup");
327arg_desc->AddFlag(
"P",
"Remote Publication Lookup");
328arg_desc->AddFlag(
"W",
"Log Progress");
329arg_desc->AddFlag(
"K",
"Save Bioseq-set");
331arg_desc->AddOptionalKey(
"H",
"String",
"Hold Until Publish\n\ 332 y Hold for One Year\n\ 335arg_desc->AddFlag(
"Z",
"Output discrepancy report");
336arg_desc->AddFlag(
"split-dr",
"Create unique discrepancy report for each output file");
338arg_desc->AddOptionalKey(
"c",
"String",
"Cleanup (combine any of the following letters)\n\ 339 b Basic cleanup (default)\n\ 340 e Extended cleanup\n\ 341 f Fix product names\n\ 342 s Add exception to short introns\n\ 343 w WGS cleanup (only needed when using a GFF3 file)\n\ 344 d Correct Collection Dates (assume month first)\n\ 345 D Correct Collection Dates(assume day first)\n\ 346 x Extend ends of features by one or two nucleotides to abut gaps or sequence ends\n\ 354arg_desc->AddOptionalKey(
"M",
"String",
"Master Genome Flags\n\ 358arg_desc->AddOptionalKey(
"l",
"String",
"Add type of evidence used to assert linkage across assembly gaps. May be used multiple times. Must be one of the following:\n\ 371arg_desc->AddOptionalKey(
"linkage-evidence-file",
"InFile",
"File listing linkage evidence for gaps of different lengths",
CArgDescriptions::eInputFile);
373arg_desc->AddOptionalKey(
"gap-type",
"String",
"Set gap type for runs of Ns. Must be one of the following:\n\ 382 unknown (obsolete)\n\ 392arg_desc->AddOptionalKey(
"ft-url",
"String",
"FileTrack URL for the XML file retrieval",
CArgDescriptions::eString);
393arg_desc->AddOptionalKey(
"ft-url-mod",
"String",
"FileTrack URL for the XML file base modifications",
CArgDescriptions::eString);
396arg_desc->AddOptionalKey(
"gaps-unknown",
"Integer",
"exact number of Ns recognised as a gap with unknown length",
CArgDescriptions::eInteger);
402arg_desc->AddFlag(
"postprocess-pubs",
"Postprocess pubs: convert authors to standard");
403arg_desc->AddOptionalKey(
"locus-tag-prefix",
"String",
"Add prefix to locus tags in annotation files",
CArgDescriptions::eString);
404arg_desc->AddFlag(
"no-locus-tags-needed",
"Submission data does not require locus tags");
405arg_desc->AddFlag(
"euk",
"Assume eukaryote, and create missing mRNA features");
406arg_desc->AddOptionalKey(
"suspect-rules",
"String",
"Path to a file containing suspect rules set. Overrides environment variable PRODUCT_RULES_LIST",
CArgDescriptions::eString);
407arg_desc->AddFlag(
"allow-acc",
"Allow accession recognition in sequence IDs. Default is local");
408arg_desc->AddFlag(
"augustus-fix",
"(Deprecated) Special handling of unusual problems in Augustus annotations",
410arg_desc->AddFlag(
"intronless",
"Intronless alignments");
411arg_desc->AddFlag(
"refine-prt-alignments",
"Refine ProSplign aligments when processing .prt input");
412arg_desc->AddOptionalKey(
"prt-alignment-filter-query",
"String",
417arg_desc->SetDependency(
"logxml",
420arg_desc->AddFlag(
"split-logs",
"Create unique log file for each output file");
421arg_desc->AddFlag(
"verbose",
"Be verbose on reporting");
422arg_desc->AddFlag(
"huge",
"Execute in huge-file mode");
423arg_desc->AddFlag(
"disable-huge",
"Explicitly disable huge-files mode");
424arg_desc->SetDependency(
"disable-huge",
428arg_desc->AddOptionalKey(
"usemt",
"String",
"Try to use as many threads as:\n\ 434arg_desc->AddFlag(
"fetchall",
"Search data in all available databases");
437arg_desc->SetUsageContext(
"",
"Converts files of various formats to ASN.1");
440SetupArgDescriptions(arg_desc.release());
453 const auto& args =
GetArgs();
454 stringnumThreadsConfig;
455 if(args[
"usemt"]) {
456numThreadsConfig = args[
"usemt"].AsString();
458numThreadsConfig = GetConfig().GetString(
"table2asn",
"UseThreads",
"one");
460 staticconstexpr array<string_view, 3> numThreadsValues{
"one",
"two",
"many"};
461 autonumThreads = distance(begin(numThreadsValues),
462find(begin(numThreadsValues), end(numThreadsValues), numThreadsConfig));
464 if(1 <= numThreads && numThreads <= 3) {
465cerr <<
"Will be using "<< numThreadsConfig <<
" threads"<< endl;
478 CTime expires= GetFullVersion().GetBuildInfo().GetBuildTime();
482 NcbiCerr<<
"This copy of "<< GetProgramDisplayName()
483<<
" is more than 1 year old. Please download the current version if it is newer."<< endl;
487m_context.m_disable_huge_files = args[
"disable-huge"];
488 if(! m_context.m_disable_huge_files) {
489m_context.m_can_use_huge_files = args[
"huge"] || GetConfig().GetBool(
"table2asn",
"UseHugeFiles",
false);
490 if(m_context.m_can_use_huge_files) {
491std::cerr <<
"Will be using huge files scenario"<< std::endl;
495m_context.m_split_log_files = args[
"split-logs"].AsBoolean();
496 if(m_context.m_split_log_files && args[
"logfile"]) {
498 "-logfile cannot be used with -split-logs");
500m_context.m_verbose = args[
"verbose"].AsBoolean();
503 CNcbiOstream* error_log = args[
"logfile"] ? &(args[
"logfile"].AsOutputFile()) : &
NcbiCerr;
504app_logger->SetProgressOstream(error_log);
506m_logger.Reset(app_logger);
507m_context.m_logger = m_logger;
508m_logger->m_enable_log = args[
"W"].AsBoolean();
509m_context.m_remote_updater.reset(
newedit::CRemoteUpdater(m_logger));
510m_context.m_remote_updater->SetPubmedInterceptor(
s_PubCleanup);
513m_context.m_SetIDFromFile = args[
"q"].AsBoolean();
514m_context.m_allow_accession = args[
"allow-acc"].AsBoolean();
515m_context.m_delay_genprodset = args[
"J"].AsBoolean();
516m_context.m_accumulate_mods = args[
"accum-mods"].AsBoolean();
517m_context.m_binary_asn1_output = args[
"binary"].AsBoolean();
520 if(args[
"c"].AsString().find_first_not_of(
"-befwsdDx") != string::npos) {
522 "Unrecognized cleanup type "+ args[
"c"].AsString());
525m_context.m_cleanup = args[
"c"].AsString();
527m_context.m_cleanup =
"b";
530m_context.m_master_genome_flag = args[
"M"].AsString();
531m_context.m_delay_genprodset =
true;
532m_context.m_HandleAsSet =
true;
533m_context.m_cleanup +=
"fU";
534m_context.m_validate =
"v";
535 if(m_context.m_master_genome_flag.find(
'n') != string::npos) {
537}
else if(m_context.m_master_genome_flag.find(
't') != string::npos) {
546 if(args[
"fcs-file"]) {
550m_fcs_reader->LoadFile(*reader);
551m_context.m_fcs_trim = args[
"fcs-trim"];
553 if(args[
"min-threshold"])
554m_context.m_minimal_sequence_length = args[
"min-threshold"].AsInteger();
562m_context.m_Comment = args[
"y"].AsString();
563 else if(args[
"Y"]) {
565 while(! reader->
AtEOF()) {
568m_context.m_Comment +=
" ";
573 if(args[
"U"] && args[
"U"].AsBoolean())
574m_context.m_cleanup +=
'U';
577m_context.m_disc_lineage = args[
"m"].AsString();
580m_context.m_asn1_suffix = args[
"out-suffix"].AsString();
582m_context.m_save_bioseq_set = args[
"K"].AsBoolean();
583m_context.prtAlnOptions.intronless = args[
"intronless"].AsBoolean();
584m_context.prtAlnOptions.refineAlignment = args[
"refine-prt-alignments"].AsBoolean();
585 if(args[
"prt-alignment-filter-query"]) {
586m_context.prtAlnOptions.filterQueryString = args[
"prt-alignment-filter-query"].AsString();
592 if(args[
"ft-url"])
593m_context.m_ft_url = args[
"ft-url"].AsString();
594 if(args[
"ft-url-mod"])
595m_context.m_ft_url_mod = args[
"ft-url-mod"].AsString();
597m_context.m_accession.
Reset(
new CSeq_id(args[
"A"].AsString()));
599m_context.mCommandLineMods = args[
"j"].AsString();
602m_context.m_single_structure_cmt = args[
"w"].AsString();
604m_context.m_RemotePubLookup = args[
"P"].AsBoolean();
605 if(! m_context.m_RemotePubLookup)
606m_context.m_postprocess_pubs = args[
"postprocess-pubs"].AsBoolean();
608m_context.m_RemoteTaxonomyLookup = args[
"T"].AsBoolean();
609 if(m_context.m_RemoteTaxonomyLookup) {
610m_context.m_cleanup +=
'T';
614 const string& a_arg = args[
"a"].AsString();
615 if(a_arg ==
"s"|| a_arg ==
"z") {
616m_context.m_HandleAsSet =
true;
617}
else if(a_arg ==
"s1") {
618m_context.m_HandleAsSet =
true;
620}
else if(a_arg ==
"s2") {
621m_context.m_HandleAsSet =
true;
623}
else if(a_arg ==
"s3") {
624m_context.m_HandleAsSet =
true;
626}
else if(a_arg ==
"s4") {
627m_context.m_HandleAsSet =
true;
629}
else if(a_arg ==
"s9") {
630m_context.m_HandleAsSet =
true;
632}
else if(a_arg ==
"di") {
633m_context.m_di_fasta =
true;
634}
else if(a_arg ==
"d") {
635m_context.m_d_fasta =
true;
638 if(args[
"gaps-min"]) {
639 intgaps_min = args[
"gaps-min"].AsInteger();
642 "Invalid value: gaps-min cannot be negative.");
644m_context.m_gapNmin =
static_cast<TSeqPos>(gaps_min);
646 if(args[
"gaps-unknown"]) {
647 intgaps_unknown = args[
"gaps-unknown"].AsInteger();
648 if(gaps_unknown < 0) {
650 "Invalid value: gaps-unknown cannot be negative.");
652m_context.m_gap_Unknown_length =
static_cast<TSeqPos>(gaps_unknown);
654 if(m_context.m_gap_Unknown_length > 0 && m_context.m_gapNmin == 0) {
655m_context.m_gapNmin = m_context.m_gap_Unknown_length;
658 if(args[
"linkage-evidence-file"]) {
663args[
"linkage-evidence-file"].AsString(),
664m_context.m_GapsizeToEvidence,
671 for(
auto& arg_it : args[
"l"].GetStringList()) {
673 auto value= linkage_evidence_to_value->FindValue(arg_it);
674m_context.m_DefaultEvidence.insert(
value);
678 "Unrecognized linkage evidence "+ arg_it);
683 if(args[
"gap-type"]) {
686 auto value= gaptype_to_value->FindValue(args[
"gap-type"].AsString());
687m_context.m_gap_type =
value;
690 "Unrecognized gap type "+ args[
"gap-type"].AsString());
695 stringsdate = args[
"H"].AsString();
696 if(sdate ==
"Y"|| sdate ==
"y") {
697m_context.m_HoldUntilPublish.SetCurrent();
698m_context.m_HoldUntilPublish.SetYear(m_context.m_HoldUntilPublish.Year() + 1);
701 if(sdate[0] ==
'\''&& sdate.length() > 0 && sdate[sdate.length() - 1] ==
'\'') {
703sdate.erase(sdate.length() - 1, 1);
705m_context.m_HoldUntilPublish =
CTime(sdate,
"M/D/Y");
708m_context.m_HoldUntilPublish.SetCurrent();
709m_context.m_HoldUntilPublish.SetYear(m_context.m_HoldUntilPublish.Year() + years);
715m_context.m_ProjectVersionNumber = args[
"N"].AsString();
718m_context.m_genome_center_id = args[
"C"].AsString();
719 if(! m_context.m_ProjectVersionNumber.empty())
720m_context.m_genome_center_id += m_context.m_ProjectVersionNumber;
724m_context.m_validate += args[
"V"].AsString();
726 while((p = m_context.m_validate.find(
"b")) != string::npos) {
727m_context.m_validate.erase(p, 1);
728m_context.m_make_flatfile =
true;
730 while((p = m_context.m_validate.find(
"t")) != string::npos) {
732m_context.m_validate.erase(p, 1);
737m_context.m_run_discrepancy =
true;
738 if(args[
"split-dr"])
739m_context.m_split_discrepancy =
true;
742 if(args[
"locus-tag-prefix"] || args[
"no-locus-tags-needed"]) {
743 if(args[
"locus-tag-prefix"] && args[
"no-locus-tags-needed"]) {
746 "-no-locus-tags-needed and -locus-tag-prefix are mutually exclusive");
748 if(args[
"no-locus-tags-needed"]) {
749m_context.m_locus_tag_prefix =
"";
750m_context.m_locus_tags_needed =
false;
752m_context.m_locus_tag_prefix = args[
"locus-tag-prefix"].AsString();
753m_context.m_locus_tags_needed =
true;
757 if(m_context.m_HandleAsSet) {
763 if(args[
"outdir"])
767m_context.m_output_filename = args[
"o"].AsString();
768m_context.m_output = &args[
"o"].AsOutputFile();
770 if(args[
"outdir"]) {
771 CDiroutputdir(m_context.m_ResultsDirectory);
773 if(! outputdir.
Exists())
778m_context.m_eukaryote = args[
"euk"].AsBoolean();
780 if(m_context.m_cleanup.find(
'f') != string::npos)
781m_context.m_use_hypothetic_protein =
true;
783 if(args[
"suspect-rules"])
784m_context.m_suspect_rules->SetRulesFilename(args[
"suspect-rules"].AsString());
788m_context.m_t =
true;
789m_reader->LoadTemplate(args[
"t"].AsString());
797m_reader->LoadDescriptors(args[
"D"].AsString(), m_global_files.m_descriptors);
803 if(m_logger->Count() == 0)
806 stringannot_file = args[
"f"].AsString();
807 if(!
CFile(annot_file).Exists()) {
809 "The specified annotation file \""+ annot_file +
"\" does not exist.",
812m_context.m_single_annot_file = args[
"f"].AsString();
814 if(args[
"src-file"]) {
815 stringsrc_file = args[
"src-file"].AsString();
816 if(!
CFile(src_file).Exists()) {
818 "The specified source qualifier file \""+ src_file +
"\" does not exist.",
821m_context.m_single_source_qual_file = args[
"src-file"].AsString();
826m_context.m_current_file = args[
"i"].AsString();
827 CFileargAsFile(m_context.m_current_file);
828 if(! argAsFile.
Exists()) {
830 "The specified input file \""+ m_context.m_current_file +
"\" does not exist.",
833 if(argAsFile.
GetLength() > TBL2ASN_MAX_ALLOWED_FASTA_SIZE && m_context.m_disable_huge_files) {
836 "The specified input file \""+
837m_context.m_current_file +
838 "\" is too long. The maximum permissible file size for a FASTA sequence is "+
840 " bytes. Consider allowing huge mode (remove \"-disable-huge\" from the command line).",
844ProcessOneFile(
false);
845}
else if(args[
"indir"]) {
847 stringindir = args[
"indir"].AsString();
848 CDirdirectory(indir);
849 if(! directory.
Exists()) {
851 "The specified input directory \""+ indir +
"\" does not exist.",
854 string basename= m_context.m_output_filename.empty() ?
856m_context.m_output_filename;
861masks.
Add(
"*"+ args[
"x"].AsString());
863ProcessOneDirectory(directory, masks, args[
"E"].AsBoolean());
864}
else if(args[
"aln-file"]) {
865m_context.m_current_file = args[
"aln-file"].AsString();
866 if(!
CFile(m_context.m_current_file).
Exists()) {
868 "The specified alignment file \""+ m_context.m_current_file +
"\" does not exist.",
871 const boolisAlignment =
true;
872ProcessOneFile(isAlignment);
876 if(m_context.m_verbose &&
877m_global_files.mp_src_qual_map &&
878! m_global_files.mp_src_qual_map->Empty()) {
879m_global_files.mp_src_qual_map->ReportUnusedIds();
882 if(m_validator->ValTotalErrors() > 0) {
884ostr.exceptions(ios::failbit | ios::badbit);
885ostr.open(m_context.GenerateOutputFilename(
eFiles::stats, m_context.m_base_name));
886m_validator->ValReportErrorStats(ostr);
888m_validator->ReportDiscrepancies(m_context.GenerateOutputFilename(
eFiles::dr, m_context.m_base_name));
889}
catch(
constCMissingInputException&) {
902 if(bad_res_exc->GetBadResiduePositions().m_BadIndexMap.size() == 1) {
905lines.reserve(bad_res_exc->GetBadResiduePositions().m_BadIndexMap.size());
906 for(
autorec: bad_res_exc->GetBadResiduePositions().m_BadIndexMap) {
907lines.push_back(rec.first);
911unique_ptr<CLineError>
le(
913bad_res_exc->GetBadResiduePositions().m_SeqId->AsFastaString(),
914line,
"",
"",
"",
msg, lines));
915m_logger->PutError(*
le);
919 if(!args[
"r"] && !(args.
Exist(
"vdb") && args[
"vdb"]) &&
msg.find(
"Cannot resolve") != string::npos) {
920 msg+=
" - try running with -r to enable remote retrieval of sequences";
928 if(m_logger->Count() == 0) {
929 #ifdef THIS_IS_TRUNK_BUILD 930m_context.m_remote_updater->ReportStats(std::cerr);
934 if(args[
"logxml"]) {
935 CNcbiOstream& log_xml = args[
"logxml"].AsOutputFile();
936log_xml <<
"<logmessages>"<< endl;
937m_logger->DumpAsXML(log_xml);
938log_xml <<
"</logmessages>"<< endl;
966 autoscope =
Ref(
new CScope(*m_context.m_ObjMgr));
967scope->AddDefaults();
972m_reader->GetSeqEntry(entry, submit, obj);
974 boolavoid_submit_block =
false;
978 if(m_context.m_SetIDFromFile) {
979m_context.SetSeqId(*entry);
982m_context.ApplyAccession(*entry);
985std::function<std::ostream&()>
f= [
this]() -> std::ostream& {
returnm_context.GetOstream(
eFiles::fixedproducts); };
986m_context.m_suspect_rules->SetupOutput(
f);
988m_context.ApplyFileTracks(*entry);
990 const boolreadModsFromTitle =
993xProcessSecretFiles1Phase(readModsFromTitle, *entry);
995 if(m_context.m_RemoteTaxonomyLookup) {
996m_context.m_remote_updater->UpdateOrgFromTaxon(*entry);
1001m_secret_files->m_feature_table_reader->m_replacement_protein = m_secret_files->m_replacement_proteins;
1003m_secret_files->m_feature_table_reader->MergeCDSFeatures(*entry, token);
1006m_secret_files->m_feature_table_reader->MoveProteinSpecificFeats(*entry);
1008m_context.CorrectCollectionDates(*entry);
1010 if(m_secret_files->m_possible_proteins.NotEmpty())
1011m_secret_files->m_feature_table_reader->AddProteins(*m_secret_files->m_possible_proteins, *entry);
1013 if(m_context.m_HandleAsSet) {
1014m_secret_files->m_feature_table_reader->ConvertNucSetToSet(entry);
1020m_context.ApplyCreateUpdateDates(*entry);
1023m_context.ApplyComments(*entry);
1024ProcessSecretFiles2Phase(*entry);
1028 if(avoid_submit_block)
1029 result= m_context.CreateSeqEntryFromTemplate(entry);
1031 result= m_context.CreateSubmitFromTemplate(entry, submit);
1033m_secret_files->m_feature_table_reader->MakeGapsFromFeatures(*entry);
1035 if(m_context.m_delay_genprodset) {
1044 if(m_context.m_RemotePubLookup) {
1045m_context.m_remote_updater->UpdatePubReferences(*obj);
1047 if(m_context.m_postprocess_pubs) {
1048edit::CRemoteUpdater::PostProcessPubs(*entry);
1051 if(m_context.m_cleanup.find(
'-') == string::npos) {
1052m_validator->Cleanup(submit, seh, m_context.m_cleanup);
1058m_secret_files->m_feature_table_reader->ChangeDeltaProteinToRawProtein(*entry);
1061m_validator->UpdateECNumbers(*entry);
1063 if(! m_context.m_validate.empty()) {
1064m_validator->ValCollect(submit, entry, m_context.m_validate);
1067m_validator->CollectDiscrepancies(submit, seh);
1069 if(m_context.m_make_flatfile) {
1070MakeFlatFile(seh, submit, m_context.GetOstream(
eFiles::gbf));
1077m_context.ApplyComments(*entry);
1079 if(m_global_files.m_descriptors)
1080m_reader->ApplyDescriptors(*entry, *m_global_files.m_descriptors);
1082 if(m_secret_files->m_descriptors)
1083m_reader->ApplyDescriptors(*entry, *m_secret_files->m_descriptors);
1085 if(need_update_date) {
1086m_context.ApplyUpdateDate(*entry);
1090 if(m_context.m_RemotePubLookup) {
1091m_context.m_remote_updater->UpdatePubReferences(*submit);
1102 "File "+ m_context.m_current_file +
" contains multiple sequences",
1103*(m_context.m_logger));
1114 if(submit.
Empty())
1115ffgenerator.
Generate(seh, ostream);
1123m_context.SetOutputFilename(e, m_context.GenerateOutputFilename(e));
1126 if(m_context.m_split_discrepancy) {
1129m_context.OpenDiagnosticOutputs();
1134 if(m_context.m_output) {
1135m_context.SetOutputFile(
eFiles::asn, *m_context.m_output);
1139m_context.OpenDataOutputs();
1144m_context.CloseDiagnosticOutputs();
1149m_context.CloseDataOutputs();
1154 if(
context.m_disable_huge_files) {
1157 return(
context.m_can_use_huge_files ||
1165 if(m_context.m_split_log_files)
1166m_context.m_logger->ClearAll();
1169 if(! IsDryRun() && m_context.m_split_log_files) {
1170log_name = m_context.GenerateOutputFilename(
eFiles::log);
1172m_logger->SetProgressOstream(error_log);
1177 if(manageDiagnosticStreams) {
1178SetupAndOpenDiagnosticStreams();
1180 if(manageDataStreams) {
1181SetupAndOpenDataStreams();
1185std::function<std::ostream&()>
f= [
this]() -> std::ostream& {
returnm_context.GetOstream(
eFiles::fixedproducts); };
1186m_context.m_suspect_rules->SetupOutput(
f);
1188m_context.m_huge_files_mode =
false;
1190LoadAdditionalFiles();
1193ProcessAlignmentFile(
output);
1195m_validator->Clear();
1197edit::CHugeFile hugeFile;
1201 automessage = e.GetMsg();
1202 if(message ==
"File format not supported") {
1211 if(! m_context.m_use_threads) {
1212m_context.m_use_threads = xGetNumThreads();
1215ProcessHugeFile(hugeFile,
output);
1217 const stringobjectType =
1218hugeFile.m_content ?
1219hugeFile.m_content->GetName() :
1229 if(! m_context.m_validate.empty())
1230m_validator->ValReportErrors();
1232 if(m_context.m_split_discrepancy)
1233m_validator->ReportDiscrepancies();
1235ReportUnusedSourceQuals();
1239 if(! log_name.
GetPath().empty()) {
1240m_logger->SetProgressOstream(&
NcbiCout);
1242 if(manageDiagnosticStreams) {
1243CloseDiagnosticStreams();
1245 if(manageDataStreams) {
1249 if(! log_name.
GetPath().empty()) {
1250m_logger->SetProgressOstream(&
NcbiCout);
1253m_context.DeleteOutputs();
1254 if(m_context.m_output) {
1255 GetArgs()[
"o"].CloseFile();
1256 _ASSERT(! m_context.m_output_filename.empty());
1266 const string& contentType,
1267unique_ptr<CNcbiIstream>& pIstr,
1272m_reader->FetchEntry(
format,
1277xProcessOneFile(
format, pInputObject, annots,
output);
1297 if(! annotMap.empty()) {
1298 for(
autoentry : annotMap) {
1299 autoit = m_secret_files->m_AnnotMap.find(entry.first);
1300 if(it == m_secret_files->m_AnnotMap.end()) {
1301m_secret_files->m_AnnotMap.emplace(entry.first, entry.second);
1303it->second.splice(it->second.end(), entry.second);
1313 if(! IsDryRun() &&
result.NotEmpty()) {
1314 constCSerialObject* to_write =
result;
1315 if(m_context.m_save_bioseq_set) {
1316 if(
result->GetThisTypeInfo()->IsType(CSeq_entry::GetTypeInfo())) {
1319to_write = &se->
GetSet();
1323m_reader->WriteObject(*to_write, *
output);
1325input_obj = m_reader->ReadNextEntry();
1331 const string& filename = m_context.m_current_file;
1332unique_ptr<CNcbiIstream> pIstream(
new CNcbiIfstream(filename));
1336m_context.MergeWithTemplate(*pEntry);
1341ProcessOneEntry(inputFormat, pEntry, pResult);
1343 if(IsDryRun() || ! pResult) {
1347 if(m_context.m_save_bioseq_set &&
1352 if(pTempEntry->
IsSet()) {
1353m_reader->WriteObject(pTempEntry->
GetSet(), *
output);
1357m_reader->WriteObject(*pResult, *
output);
1364vector<unique_ptr<CDir::CDirEntry>> vec(
entries->size());
1365 autovec_it = vec.begin();
1367vec_it->reset(it.release());
1371 autocompareNames = [](
const auto&
l,
const auto&
r) {
return l->GetPath() <
r->GetPath(); };
1372 sort(vec.begin(), vec.end(), compareNames);
1374 boolcommonOutputStream =
GetArgs()[
"o"];
1375 if(commonOutputStream) {
1376SetupAndOpenDataStreams();
1378SetupAndOpenDiagnosticStreams();
1380 for(
const auto& it : vec) {
1382 if(! it->IsDir()) {
1383 autopathName = it->GetPath();
1384 if(
mask.Match(pathName)) {
1385m_context.m_current_file = pathName;
1386ProcessOneFile(
false, ! commonOutputStream, ! commonOutputStream);
1388}
else if(recurse) {
1389ProcessOneDirectory(*it,
mask, recurse);
1392 if(commonOutputStream) {
1395CloseDiagnosticStreams();
1423 automodMergePolicy =
1424m_context.m_accumulate_mods ?
1429m_global_files.mp_src_qual_map.get(),
1430m_secret_files->mp_src_qual_map.get(),
1431m_context.mCommandLineMods,
1433m_context.m_verbose,
1438 if(! m_context.m_huge_files_mode) {
1439 if(m_global_files.m_descriptors)
1440m_reader->ApplyDescriptors(
result, *m_global_files.m_descriptors);
1441 if(m_secret_files->m_descriptors)
1442m_reader->ApplyDescriptors(
result, *m_secret_files->m_descriptors);
1445 if(m_global_files.m_indexed_annots || m_secret_files->m_indexed_annots)
1453ProcessCMTFiles(
result);
1459 if(!
file.Exists() ||
file.GetLength() == 0)
1461m_reader->LoadDescriptors(pathname, m_secret_files->m_descriptors);
1466 if(m_global_files.m_struct_comments)
1467m_global_files.m_struct_comments->ProcessComments(
result);
1468 if(m_secret_files && m_secret_files->m_struct_comments)
1469m_secret_files->m_struct_comments->ProcessComments(
result);
1475 if(!
file.Exists() ||
file.GetLength() == 0)
1480m_secret_files->m_replacement_proteins = m_secret_files->m_feature_table_reader->ReadProtein(*reader);
1486 if(!
file.Exists() ||
file.GetLength() == 0)
1493 if(!
file.Exists() ||
file.GetLength() == 0)
1498m_secret_files->m_possible_proteins = m_secret_files->m_feature_table_reader->ReadProtein(*reader);
1506 if(!
file.Exists())
1509 if(
file.IsIdentical(m_context.m_current_file)) {
1512 "Ignorning annotation "+ pathname +
" because it was already used as input source",
1517 if(
file.GetLength() == 0) {
1530 if(entry.
IsSeq()) {
1531m_reader->AddAnnots(m_global_files.m_indexed_annots.get(), entry.
SetSeq());
1532 if(m_secret_files) {
1533m_reader->AddAnnots(m_secret_files->m_indexed_annots.get(), entry.
SetSeq());
1547 if(pSubEntry && pSubEntry->IsSeq() && pSubEntry->GetSeq().IsNa()) {
1548AddAnnots(*pSubEntry);
1556AddAnnots(*pSubEntry);
1565 if(
file.Exists() &&
file.GetLength()) {
1578 stringname = dir + base;
1584 const auto& namedSrcFile = m_context.m_single_source_qual_file;
1585 if(!
NStr::IsBlank(namedSrcFile) && ! m_global_files.mp_src_qual_map) {
1587m_global_files.mp_src_qual_map->MapFile(namedSrcFile, m_context.m_allow_accession);
1590 const stringdefaultSrcFile = name +
".src";
1591 if(
CFile(defaultSrcFile).Exists()) {
1593m_secret_files->mp_src_qual_map->MapFile(defaultSrcFile, m_context.m_allow_accession);
1596LoadPEPFile(name +
".pep");
1597LoadRNAFile(name +
".rna");
1598LoadPRTFile(name +
".prt");
1599LoadDSCFile(name +
".dsc");
1601LoadCMTFile(m_context.m_single_structure_cmt, m_global_files.m_struct_comments);
1602LoadCMTFile(name +
".cmt", m_secret_files->m_struct_comments);
1606 if(! m_context.m_single_annot_file.empty() && ! m_global_files.m_indexed_annots)
1608LoadAnnotMap(m_context.m_single_annot_file, m_global_files);
1610 for(
autosuffix : {
".tbl",
".gff",
".gff3",
".gff2",
".gtf"}) {
1611 if(LoadAnnotMap(name + suffix, *m_secret_files))
1614 #ifdef THIS_IS_TRUNK_BUILD 1615 for(
autosuffix : {
".gbf"}) {
1616LoadAnnotMap(name + suffix, *m_secret_files);
1625 if(m_context.m_verbose && m_secret_files && m_secret_files->mp_src_qual_map)
1626m_secret_files->mp_src_qual_map->ReportUnusedIds();
1638list<string> split_args;
1639vector<const char*> new_argv;
1641 if(argc==2 && argv && argv[1] && strchr(argv[1],
' ')) {
1644 autoit = split_args.begin();
1645 while(it != split_args.end()) {
1647 if(
next!= split_args.end() &&
1648((it->front() ==
'"'&& it->back() !=
'"') ||
1649(it->front() ==
'\''&& it->back() !=
'\'')))
1651it->append(
" "); it->append(*
next);
1655 for(
auto& rec : split_args) {
1656 if(rec.front() ==
'\''&& rec.back()==
'\'')
1657rec = rec.substr(1, rec.length()-2);
1659argc = 1 + split_args.size();
1660new_argv.reserve(argc);
1661new_argv.push_back(argv[0]);
1662 for(
const string& s : split_args) {
1663new_argv.push_back(s.c_str());
1664std::cerr << s.c_str() <<
" ";
1669argv = new_argv.data();
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.
static const CDataLoadersUtil::TLoaders default_loaders
void g_LogGeneralParsingError(EDiagSev sev, const string &idString, const string &msg, objects::ILineErrorListener &listener)
ncbi::TMaskedQueryRegions mask
const SBadResiduePositions & GetBadResiduePositions(void) const THROWS_NONE
static bool CleanArticle(CCit_art &, bool fix_initials, bool strip_serial)
static bool ConvertPubFeatsToPubDescs(CSeq_entry_Handle seh)
Convert full-length publication features to publication descriptors.
@ eClean_NoNcbiUserObjects
static void SetupObjectManager(const CArgs &args, objects::CObjectManager &obj_mgr, TLoaders loaders=fDefault)
Set up the standard object manager data loaders according to the arguments provided above.
static void AddArgumentDescriptions(CArgDescriptions &arg_desc, TLoaders loaders=fDefault)
Add a standard set of arguments used to configure the object manager.
void Generate(const CSeq_entry_Handle &entry, CFlatItemOStream &item_os, const multiout &={})
EFormat
The formats are checked in the same order as declared here.
@ eBinaryASN
Binary ASN.1.
@ eGff3
GFF3, CGff3Reader.
@ eFasta
FASTA format sequence record, CFastaReader.
@ eAlignment
Text alignment.
static EFormat Format(const string &path, EOnError onerror=eDefault)
Guess file format.
static CLineError * Create(EProblem eProblem, EDiagSev eSeverity, const std::string &strSeqId, unsigned int uLine, const std::string &strFeatureName=string(""), const std::string &strQualifierName=string(""), const std::string &strQualifierValue=string(""), const std::string &strErrorMessage=string(""), const TVecOfLines &vecOfOtherLines=TVecOfLines())
Use this because the constructor is protected.
void PutProgress(const string &sMessage, const Uint8 iNumDone, const Uint8 iNumTotal) override
This is used for processing progress messages.
bool PutMessage(const IObjtoolsMessage &message) override
list< CRef< objects::CSeq_annot > > TAnnots
static const set< TTypeInfo > kSupportedTypes
SeqMap related exceptions.
namespace ncbi::objects::
static void UpdateTaxonFromTable(objects::CBioseq &bioseq)
bool PutMessage(const IObjtoolsMessage &message) override
void Post(const SDiagMessage &mess) override
Post message to handler.
void PutProgress(const string &sMessage, const Uint8 iNumDone=0, const Uint8 iNumTotal=0) override
void LoadCMTFile(const string &pathname, unique_ptr< CTable2AsnStructuredCommentsReader > &comments)
void LoadDSCFile(const string &pathname)
void ProcessAlignmentFile(CNcbiOstream *output)
void Init() override
Initialize the application.
void ProcessOneEntry(CFormatGuess::EFormat inputFormat, CRef< CSerialObject > obj, CRef< CSerialObject > &result)
void SetupAndOpenDataStreams()
void AddAnnots(CSeq_entry &entry)
void ProcessSecretFiles2Phase(CSeq_entry &result) const
void SetupAndOpenDiagnosticStreams()
int Run() override
Run the application.
void MakeFlatFile(CSeq_entry_Handle seh, CRef< CSeq_submit > submit, std::ostream &ostream)
void xProcessSecretFiles1Phase(bool readModsFromTitle, CSeq_entry &result)
void xProcessOneFile(CFormatGuess::EFormat format, CRef< CSerialObject > pInputObject, TAnnots &annots, CNcbiOstream *output)
void Setup(const CArgs &args)
void ProcessOneFile(bool isAlignment, bool manageDiagnosticStreams=true, bool manageDataStream=true)
void x_SetAlnArgs(CArgDescriptions &arg_desc)
void ReportUnusedSourceQuals()
void ProcessCMTFiles(CSeq_entry &result) const
bool ProcessOneDirectory(const CDir &directory, const CMask &mask, bool recurse)
bool LoadAnnotMap(const string &pathname, TAdditionalFiles &files)
void LoadPEPFile(const string &pathname)
void LoadAdditionalFiles()
void CloseDiagnosticStreams()
void LoadPRTFile(const string &pathname)
CMultiReader::TAnnots TAnnots
size_t xGetNumThreads() const
void LoadRNAFile(const string &pathname)
void ProcessTopEntry(CFormatGuess::EFormat inputFormat, bool need_update_date, CRef< CSeq_submit > &submit, CRef< CSeq_entry > &entry)
bool PutMessage(const IObjtoolsMessage &message) override
@ eProblem_GeneralParsingError
vector< unsigned int > TVecOfLines
const_iterator begin() const
Include a standard set of the NCBI C++ Toolkit most basic headers.
std::ofstream out("events_result.xml")
main entry point for tests
static void cleanup(void)
static DLIST_TYPE *DLIST_NAME() next(DLIST_LIST_TYPE *list, DLIST_TYPE *item)
static SQLCHAR output[256]
static const char * str(char *buf, int n)
unsigned int TSeqPos
Type for sequence locations and lengths.
int AppMain(int argc, const char *const *argv, const char *const *envp=0, EAppDiagStream diag=eDS_Default, const char *conf=NcbiEmptyCStr, const string &name=NcbiEmptyString)
Main function (entry point) for the NCBI application.
void Reset(void)
Remove all arguments.
void SetConstraint(const string &name, const CArgAllow *constraint, EConstraintNegate negate=eConstraint)
Set additional user defined constraint on argument value.
void SetDependency(const string &arg1, EDependency dep, const string &arg2)
Define a dependency.
bool Exist(const string &name) const
Check existence of argument description.
void AddOptionalKey(const string &name, const string &synopsis, const string &comment, EType type, TFlags flags=0)
Add description for optional key without default value.
void AddDefaultKey(const string &name, const string &synopsis, const string &comment, EType type, const string &default_value, TFlags flags=0, const string &env_var=kEmptyStr, const char *display_value=nullptr)
Add description for optional key with default value.
@ fAllowMultiple
Repeated key arguments are legal (use with AddKey)
@ fHidden
Hide it in Usage.
@ fUsageIfNoArgs
Force printing USAGE (and then exit) if no command line args are present.
@ eExcludes
One argument excludes another.
@ eInputFile
Name of file (must exist and be readable)
@ eString
An arbitrary string.
@ eOutputFile
Name of file (must be writable)
@ eInteger
Convertible into an integer number (int or Int8)
void Write(string &str, TDiagWriteFlags flags=fNone) const
Binary OR of "EDiagWriteFlags".
EDiagSev m_Severity
Severity level.
TDiagPostFlags m_Flags
Bitwise OR of "EDiagPostFlag".
static const char * SeverityName(EDiagSev sev)
Get a common symbolic name for the severity levels.
void SetDiagHandler(CDiagHandler *handler, bool can_delete=true)
Set the diagnostic handler using the specified diagnostic handler class.
EDiagSev
Severity level for the posted diagnostics.
void SetDiagStream(CNcbiOstream *os, bool quick_flush=true, FDiagCleanup cleanup=0, void *cleanup_data=0, const string &stream_name="")
Set diagnostic stream.
@ eDPF_IsNote
Print "Note[X]" severity name.
@ fNoEndl
No end of line.
@ eDS_Default
Try standard log file (app.name + ".log") in /log/, use stderr on failure.
@ eDiag_Info
Informational message.
@ eDiag_Error
Error message.
@ eDiag_Warning
Warning message.
@ eDiag_Fatal
Fatal error â guarantees exit(or abort)
@ eDiag_Critical
Critical error message.
#define NCBI_THROW(exception_class, err_code, message)
Generic macro to throw an exception, given the exception class, error code and message string.
const string & GetMsg(void) const
Get message string.
const CException * GetPredecessor(void) const
Get "previous" exception from the backlog.
static string CreateAbsolutePath(const string &path, ERelativeToWhat rtw=eRelativeToCwd)
Get an absolute path from some, possibly relative, path.
string GetBase(void) const
Get the base entry name without extension.
Int8 GetLength(void) const
Get size of file.
virtual bool Remove(TRemoveFlags flags=eRecursive) const
Remove a directory entry.
static string AddTrailingPathSeparator(const string &path)
Add trailing path separator, if needed.
virtual bool Exists(void) const
Check if directory "dirname" exists.
bool Create(TCreateFlags flags=fCreate_Default) const
Create the directory using "dirname" passed in the constructor.
TEntries * GetEntriesPtr(const string &mask=kEmptyStr, TGetEntriesFlags flags=0) const
Get directory entries based on the specified "mask".
const string & GetPath(void) const
Get entry path.
virtual bool Exists(void) const
Check existence of file.
static void SplitPath(const string &path, string *dir=0, string *base=0, string *ext=0)
Split a path string into its basic components.
@ eRelativeToCwd
Relative to the current working directory.
@ fIgnoreRecursive
Suppress "self recursive" elements (the directories "." and "..").
@ fCreateObjects
Create appropriate subclasses of CDirEntry (CFile,CDir,...), not just CDirEntry objects.
@ fIgnoreMissing
Ignore missed entries.
#define ENUM_METHOD_NAME(EnumName)
virtual const CTypeInfo * GetThisTypeInfo(void) const =0
CTempString GetCurrentLine(void) const
static CRef< ILineReader > New(const string &filename)
Return a new ILineReader object corresponding to the given filename, taking "-" (but not "....
virtual bool AtEOF(void) const =0
Indicates (negatively) whether there is any more input.
static CRef< CObjectManager > GetInstance(void)
Return the existing object manager or create one.
CScope & GetScope(void) const
Get scope this handle belongs to.
CRef< C > Ref(C *object)
Helper functions to get CRef<> and CConstRef<> objects.
TObjectType * GetPointer(void) THROWS_NONE
Get pointer,.
bool NotEmpty(void) const THROWS_NONE
Check if CRef is not empty â pointing to an object and has a non-null value.
bool Empty(void) const THROWS_NONE
Check if CRef is empty â not pointing to any object, which means having a null value.
uint64_t Uint8
8-byte (64-bit) unsigned integer
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
IO_PREFIX::ofstream CNcbiOfstream
Portable alias for ofstream.
IO_PREFIX::ostream CNcbiOstream
Portable alias for ostream.
IO_PREFIX::ifstream CNcbiIfstream
Portable alias for ifstream.
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 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 string XmlEncode(const CTempString str, TXmlEncode flags=eXmlEnc_Contents)
Encode a string for XML.
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.
@ fWithCommas
Use commas as thousands separator.
@ eCurrent
Use current time. See also CCurrentTime.
virtual bool IsType(TTypeInfo type) const
void CONNECT_Init(const IRWRegistry *reg=0, CRWLock *lock=0, TConnectInitFlags flag=eConnectInit_OwnNothing, FSSLSetup ssl=0)
Init [X]CONNECT library with the specified "reg" and "lock" (ownership for either or both can be deta...
void Add(const string &mask)
Add an inclusion mask.
bool IsArticle(void) const
Check if variant Article is selected.
TArticle & SetArticle(void)
Select the variant.
bool IsSetClass(void) const
Check if a value has been assigned to Class data member.
TSet & SetSet(void)
Select the variant.
TClass GetClass(void) const
Get the Class member data.
const TSet & GetSet(void) const
Get the variant data.
bool IsSeq(void) const
Check if variant Seq is selected.
bool IsSetSeq_set(void) const
Check if a value has been assigned to Seq_set data member.
bool IsSet(void) const
Check if variant Set is selected.
TSeq & SetSeq(void)
Select the variant.
TSeq_set & SetSeq_set(void)
Assign a value to Seq_set data member.
@ eClass_pop_set
population study
@ eClass_phy_set
phylogenetic study
@ eClass_mut_set
set of mutations
@ eClass_eco_set
ecological sample study
@ eClass_nuc_prot
nuc acid and coded proteins
@ eClass_small_genome_set
viral segments or mitochondrial minicircles
The blob sat and sat key Both must be positive integers</td > n< td > Non empty string The interpretation of the blob id depends on a processor Cassandra n processor expects the following format
if(yy_accept[yy_current_state])
Lightweight interface for getting lines of data with minimal memory copying.
constexpr auto sort(_Init &&init)
const struct ncbi::grid::netcache::search::fields::EXPIRES expires
Magic spell ;-) needed for some weird compilers... very empiric.
void VisitAllFeatures(objects::CSeq_entry_EditHandle &entry_h, _M m)
void VisitAllBioseqs(objects::CSeq_entry &entry, _M &&m)
const GenericPointer< typename T::ValueType > T2 value
#define NCBI_SC_VERSION_PROXY
#define NCBI_TEAMCITY_BUILD_NUMBER_PROXY
Classes to match a string against a set of masks.
Defines the CNcbiApplication and CAppException classes for creating NCBI applications.
#define GetArgs
Avoid preprocessor name clash with the NCBI C Toolkit.
Defines command line argument related classes.
Defines unified interface to application:
NCBI C++ stream class wrappers for triggering between "new" and "old" C++ stream libraries.
bool le(T x_, T y_, T round_)
std::istream & in(std::istream &in_, double &x_)
double r(size_t dimension_, const Int4 *score_, const double *prob_, double theta_)
void SortSeqDescr(CSeq_entry &entry)
static SLJIT_INLINE sljit_ins l(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)
void g_ApplyMods(CMemorySrcFileMap *pNamedSrcFileMap, CMemorySrcFileMap *pDefaultSrcFileMap, const string &commandLineStr, bool readModsFromTitle, bool isVerbose, CModHandler::EHandleExisting mergePolicy, ILineErrorListener *pEC, CSeq_entry &entry)
TBadIndexMap m_BadIndexMap
unique_ptr< IIndexedFeatureReader > m_indexed_annots
static void s_PubCleanup(CRef< CPub > &pub)
static bool s_UseHugeFileMode(const CTable2AsnContext &context, CFormatGuess::EFormat format)
#define table2asn_app_main
void g_LogDiagMessage(ILineErrorListener *logger, EDiagSev sev, const string &msg)
static void s_FailOnBadInput(const string &specifics, IObjtoolsListener &listener)
void g_LoadLinkageEvidence(const string &linkageEvidenceFilename, CGapsEditor::TCountToEvidenceMap &gapsizeToEvidence, ILineErrorListener *pEC)
static CS_CONTEXT * context
static wxAcceleratorEntry entries[3]
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