98 "At ID '" <<
error.GetID() <<
"' "
99 "in category '" <<
static_cast<int>(
error.GetCategory()) <<
"' "
100 "at line " <<
error.GetLineNum() <<
": "
101 <<
error.GetMsg() <<
"'");
127 pReaderMessage->
Write(cerr);
145 EDiagSev eDiagSev,
const string & msg);
147 ostream & ostr,
const ILineError & line_error_p);
152 void Init()
override;
239 const Uint8 bytesDone,
248 FORMAT(
"Progress: " << bytesDone <<
" bytes done."));
275 const Uint8 bytesDone,
284 FORMAT(msg <<
" (" << bytesDone <<
" bytes)"));
307 arg_desc->SetUsageContext(
"",
"C++ multi format file reader");
313 arg_desc->SetCurrentGroup(
"INPUT / OUTPUT");
315 arg_desc->AddDefaultKey(
321 arg_desc->AddAlias(
"i",
"input");
323 arg_desc->AddDefaultKey(
328 arg_desc->AddAlias(
"o",
"output");
330 arg_desc->AddDefaultKey(
336 arg_desc->AddAlias(
"p",
"indir");
338 arg_desc->AddDefaultKey(
344 arg_desc->AddAlias(
"r",
"outdir");
346 arg_desc->AddDefaultKey(
352 arg_desc->SetConstraint(
356 "microarray",
"bed15",
357 "wig",
"wiggle",
"bedgraph",
358 "gtf",
"gff3",
"gff2",
"augustus",
361 "newick",
"tree",
"tre",
372 arg_desc->AddDefaultKey(
"out-format",
"FORMAT",
373 "This sets how the output of this program will be formatted. "
374 "Note that for some formats some or all values might have no effect.",
376 arg_desc->SetConstraint(
385 arg_desc->AddDefaultKey(
388 "Additional flags passed to the reader, as a single flag integer or comma separated flag names",
392 arg_desc->AddDefaultKey(
395 "Name for annotation",
398 arg_desc->AddDefaultKey(
401 "Title for annotation",
409 arg_desc->SetCurrentGroup(
"ID MAPPING");
411 arg_desc->AddDefaultKey(
414 "IdMapper config filename",
417 arg_desc->AddDefaultKey(
428 arg_desc->SetCurrentGroup(
"ERROR POLICY");
432 "write record counts to stderr",
437 "where possible, print errors, warnings, etc. as XML",
442 "check for errors only",
447 "suppress error display",
452 "accept all input format errors",
457 "accept no input format errors",
460 arg_desc->AddDefaultKey(
463 "Maximum permissible error count",
467 arg_desc->AddDefaultKey(
470 "Maximum permissible error level",
474 arg_desc->SetConstraint(
477 "info",
"warning",
"error" ) );
479 arg_desc->AddFlag(
"show-progress",
480 "This will show progress messages on stderr, if the underlying "
481 "reader supports that.");
487 arg_desc->SetCurrentGroup(
"BED AND GFF READER SPECIFIC");
491 "turn all ids into local ids",
495 "numeric-ids-as-local",
496 "turn integer ids into local ids",
501 "use BED three feature format",
506 "use BED directed feature model",
511 "clean up output for genbank submission",
515 "genbank-no-locus-tags",
516 "clean up output for genbank submission, no locus-ag needed",
521 "clean up output but without genbank specific extensions",
526 "in -genbank mode, generate any missing mRNA features",
531 "generate parent-child xrefs involving genes",
534 arg_desc->AddDefaultKey(
537 "Prefix or starting tag for auto generated locus tags",
541 arg_desc->AddOptionalKey(
544 "BED autosql definition file",
551 arg_desc->SetCurrentGroup(
"WIGGLE READER SPECIFIC");
555 "join abutting intervals",
560 "generate byte compressed data",
565 "generate real value data",
570 "generate graph object",
575 "iteratively return raw track data",
582 arg_desc->SetCurrentGroup(
"GFF READER SPECIFIC");
586 "use new gff3 reader implementation",
590 "use old gff3 reader implementation",
597 arg_desc->SetCurrentGroup(
"GTF READER SPECIFIC");
601 "generate gene->mrna and gene->cds xrefs",
608 arg_desc->SetCurrentGroup(
"ALIGNMENT READER SPECIFIC");
610 arg_desc->AddDefaultKey(
613 "Alignment gap character",
617 arg_desc->AddDefaultKey(
620 "Alignment missing indicator",
624 arg_desc->AddDefaultKey(
627 "Alignment alphabet",
630 arg_desc->SetConstraint(
636 arg_desc->AddDefaultKey(
639 "Alignment sequence ID validation scheme",
645 "treat all IDs as local IDs",
650 "ignore char settings in NEXUS format block",
656 arg_desc->SetCurrentGroup(
"FASTA READER SPECIFIC");
660 "Parse FASTA modifiers on deflines.");
664 "Make a delta sequence if gaps found.");
666 arg_desc->AddDefaultKey(
669 "Maximum permissible ID length",
672 arg_desc->SetCurrentGroup(
"");
685 string argInFile = args[
"input"].AsString();
686 string argOutFile = args[
"output"].AsString();
687 string argInDir = args[
"indir"].AsString();
688 string argOutDir = args[
"outdir"].AsString();
690 if ((argInFile !=
"-") && !argInDir.empty()) {
691 cerr <<
"multireader: command line args -input and -indir are incompatible."
695 if ((argOutFile !=
"-") && !argOutDir.empty()) {
696 cerr <<
"multireader: command line args -output and -outdir are incompatible."
700 if (argInDir.empty() && !argOutDir.empty()) {
701 cerr <<
"multireader: command line arg -outdir requires -indir."
705 if (argOutDir.empty() && !argInDir.empty()) {
706 cerr <<
"multireader: command line arg -indir requires -outdir."
710 if (args[
"genbank"].AsBoolean() && args[
"genbank-no-locus-tags"].AsBoolean()) {
711 cerr <<
"multireader: flags -genbank and -genbank-no-locus-tags are mutually "
716 if (!args[
"locus-tag"].AsString().
empty() && args[
"genbank-no-locus-tags"].AsBoolean()) {
717 cerr <<
"multireader: flags -locus-tag and -genbank-no-locus-tags are mutually "
722 if (argInFile ==
"-" && args[
"format"].AsString() ==
"guess") {
723 cerr <<
"multireader: must specify input format (\"-format ...\") if input comes from "
732 if (!argInDir.empty()) {
735 string inFile, outFile;
738 bool retIn = fileSource.
Next(inFile);
740 if (!fileDestination.
Next(inFile, outFile)) {
741 cerr <<
"multireader: unable to create output file "
742 << outFile <<
"." << endl;
750 retIn = fileSource.
Next(inFile);
775 xSetFlags(args, args[
"input"].AsString());
843 eDiag_Fatal,
"Reading aborted due to fatal error.");
862 catch(
const std::exception & std_ex) {
867 "Reading aborted due to fatal error: " << std_ex.what()));
893 typedef list<CRef<CSeq_annot> > ANNOTS;
896 unique_ptr<CReaderBase> pReader(
904 pReader->SetProgressReportInterval(10);
908 pReader->ReadSeqAnnots(annots, istr,
m_pErrors.get());
921 typedef list<CRef<CSeq_annot> > ANNOTS;
974 if (args[
"autosql"]) {
975 if (!reader.
SetAutoSql(args[
"autosql"].AsString())) {
1019 if (args[
"format"].AsString() ==
"gff2") {
1045 if (args[
"format"].AsString() ==
"gff2") {
1057 const auto& data = it->GetData();
1058 if (data.IsFtable()) {
1059 const auto&
features = it->GetData().GetFtable();
1117 if (args[
"format"].AsString() ==
"gff2") {
1120 if (args[
"format"].AsString() ==
"gff3") {
1142 while (!istr.eof()) {
1160 const int iErrCode = reader.
ReadStream(istr);
1161 if( iErrCode != 0 ) {
1163 "AGP reader failed with code " +
1184 while(!pLineReader->
AtEOF()) {
1207 if( ! pSeqAnnot || ! pSeqAnnot->
IsFtable() ||
1227 auto maxIdLength = args[
"max-id-length"].AsInteger();
1228 if (maxIdLength != 0) {
1244 if( args[
"parse-mods"] ) {
1249 if (args[
"aln-alphabet"].AsString() ==
"nuc") {
1254 (args[
"all-ids-as-local"].AsBoolean() ?
1263 catch (std::exception&) {
1274 string format = args[
"format"].AsString();
1287 format ==
"microarray") {
1358 const string& filename )
1386 if ( args[
"join-same"] ) {
1390 if (!args[
"as-real"]) {
1393 if ( args[
"as-graph"] ) {
1397 if ( args[
"raw"] ) {
1405 if ( args[
"all-ids-as-local"] ) {
1408 if ( args[
"numeric-ids-as-local"] ) {
1411 if ( args[
"raw"] ) {
1414 if ( args[
"3ff"] ) {
1417 if ( args[
"dfm"] ) {
1425 if ( args[
"all-ids-as-local"] ) {
1428 if ( args[
"numeric-ids-as-local"] ) {
1431 if ( args[
"child-links"] ) {
1434 if (args[
"genbank-no-locus-tags"]) {
1437 if (args[
"genbank"]) {
1439 if (args[
"locus-tag"]) {
1448 if ( args[
"gene-xrefs"] ) {
1451 if (args[
"genbank-no-locus-tags"]) {
1455 if ( args[
"genbank"] ) {
1458 if (args[
"locus-tag"]) {
1465 auto flagsStr = args[
"flags"].AsString();
1467 if( args[
"parse-mods"] ) {
1470 if( args[
"parse-gaps"] ) {
1478 list<string> stringFlags;
1486 auto flagsStr = args[
"flags"].AsString();
1491 list<string> stringFlags;
1512 static unsigned int startingLocusTagNumber = 1;
1513 static unsigned int startingFeatureId = 1;
1515 if (!args[
"genbank"].AsBoolean() && !args[
"genbank-no-locus-tags"].AsBoolean()) {
1516 if (args[
"cleanup"]) {
1532 startingLocusTagNumber = tail;
1538 "Invalid locus tag: Only one \"_\", and suffix must be numeric", 0);
1543 prefix = args[
"locus-tag"].AsString();
1546 edit::CFeatTableEdit fte(
1547 annot, 0,
prefix, startingLocusTagNumber, startingFeatureId,
m_pErrors.get());
1548 fte.InferPartials();
1549 fte.GenerateMissingParentFeatures(args[
"euk"].AsBoolean(), pLocationMerger);
1550 if (args[
"genbank"].AsBoolean() && !fte.AnnotHasAllLocusTags()) {
1552 fte.GenerateLocusTags();
1557 eDiag_Fatal,
"Need prefix to generate missing locus tags but none was provided");
1562 fte.GenerateProteinAndTranscriptIds();
1564 fte.ProcessCodonRecognized();
1565 fte.EliminateBadQualifiers();
1566 fte.SubmitFixProducts();
1568 startingLocusTagNumber = fte.PendingLocusTagNumber();
1569 startingFeatureId = fte.PendingFeatureId();
1578 EDiagSev eDiagSev,
const string & msg)
1585 CLineErrorForMsg(
EDiagSev eDiagSev,
const string & msg)
1599 ostream & ostr,
const ILineError & line_error)
1607 line_error.
Dump(ostr);
1625 const string out_format = args[
"out-format"].AsString();
1626 unique_ptr<MSerial_Format> pOutFormat;
1627 if( out_format ==
"asn_text" ) {
1629 }
else if( out_format ==
"asn_binary" ) {
1631 }
else if( out_format ==
"xml" ) {
1633 }
else if( out_format ==
"json" ) {
1638 ostr << *pOutFormat << object;
1648 string strBuild = args[
"genome"].AsString();
1649 string strMapFile = args[
"mapfile"].AsString();
1651 if (strBuild.empty() && strMapFile.empty()) {
1654 if (!strMapFile.empty()) {
1677 if ( args[
"noerrors"] ) {
1682 if ( args[
"strict"] ) {
1684 }
else if ( args[
"lenient"] ) {
1687 int iMaxErrorCount = args[
"max-error-count"].AsInteger();
1689 string strMaxErrorLevel = args[
"max-error-level"].AsString();
1690 if ( strMaxErrorLevel ==
"info" ) {
1693 else if ( strMaxErrorLevel ==
"error" ) {
1697 if ( iMaxErrorCount == -1 ) {
1703 iMaxErrorCount, iMaxErrorLevel, *
this));
1727 int main(
int argc,
const char* argv[])
User-defined methods of the data storage class.
User-defined methods of the data storage class.
static void fatal(const char *msg,...)
virtual int ReadStream(CNcbiIstream &is, EFinalize eFinalize=eFinalize_Yes)
Read an AGP file from the given input stream.
This class is used to turn an AGP file into a vector of Seq-entry's.
vector< CRef< objects::CSeq_entry > > TSeqEntryRefVec
This is the way the results will be returned Each Seq-entry contains just one Bioseq,...
TSeqEntryRefVec & GetResult(void)
This gets the results found, but don't call before finalizing.
class CAlnReader supports importing a large variety of text-based alignment formats into standard dat...
void Read(bool guess, bool generate_local_ids=false, objects::ILineErrorListener *pErrorListener=nullptr)
EReadFlags
Read the file This are the main functions.
void SetAlphabet(const string &value)
CRef< objects::CSeq_entry > GetSeqEntry(TFastaFlags fasta_flags=objects::CFastaReader::fAddMods, objects::ILineErrorListener *pErrorListener=nullptr)
CReaderBase implementation that reads BED data files, either a single object or all objects found.
virtual bool ReadTrackData(ILineReader &, CRawBedTrack &, ILineErrorListener *=nullptr)
virtual bool SetAutoSql(const string &)
CRef< CSeq_annot > ReadSeqAnnot(ILineReader &lr, ILineErrorListener *pErrors=nullptr) override
Read a single object from given line reader containing BED data.
Base class for reading FASTA sequences.
CRef< CSeq_annot > ReadSeqAnnot(ILineReader &lr, ILineErrorListener *pErrors) override
Read an object from a given line reader, render it as a single Seq-annot, if possible.
static void AddStringFlags(const list< string > &stringFlags, TFlags &baseFlags)
void ReadSeqAnnots(TAnnotList &, CNcbiIstream &, ILineErrorListener *=nullptr) override
Read all objects from given insput stream, returning them as a vector of Seq-annots.
shared_ptr< CGff3LocationMerger > GetLocationMerger()
IdMapper implementation using hardcoded values.
IdMapper implementation using an external configuration file.
size_t Count() const override
void StoreError(const ILineError &err)
void StoreMessage(const IObjtoolsMessage &message)
bool Next(const std::string &, string &)
void xProcessGff2(const CArgs &, CNcbiIstream &, CNcbiOstream &)
void xProcessWiggle(const CArgs &, CNcbiIstream &, CNcbiOstream &)
void xDumpErrors(CNcbiOstream &)
unique_ptr< CMessageListenerBase > m_pErrors
void xSetMessageListener(const CArgs &)
void xSetMapper(const CArgs &)
void xWriteObject(const CArgs &, CSerialObject &, CNcbiOstream &)
void xProcessAgp(const CArgs &, CNcbiIstream &, CNcbiOstream &)
bool xProcessBed(const CArgs &, CNcbiIstream &, CNcbiOstream &)
void WriteMessageImmediately(ostream &ostr, const ILineError &line_error_p)
void xProcessAlignment(const CArgs &, CNcbiIstream &, CNcbiOstream &)
void xProcessRmo(const CArgs &, CNcbiIstream &, CNcbiOstream &)
void xProcessDefault(const CArgs &, CNcbiIstream &, CNcbiOstream &)
void xProcessFasta(const CArgs &, CNcbiIstream &, CNcbiOstream &)
void xProcessBedRaw(const CArgs &, CNcbiIstream &, CNcbiOstream &)
void xProcessGtf(const CArgs &, CNcbiIstream &, CNcbiOstream &)
void xProcessGff3(const CArgs &, CNcbiIstream &, CNcbiOstream &)
unique_ptr< CObjtoolsListener > m_pEditErrors
void xProcessUCSCRegion(const CArgs &, CNcbiIstream &, CNcbiOstream &)
void xPostProcessAnnot(const CArgs &, CSeq_annot &, const CGff3LocationMerger *=nullptr)
CFormatGuess::EFormat m_uFormat
int Run() override
Run the application.
void xSetFormat(const CArgs &, CNcbiIstream &)
void Init() override
Initialize the application.
void xSetFlags(const CArgs &, const string &)
bool ShowingProgress() const
unique_ptr< CIdMapper > m_pMapper
bool xProcessSingleFile(const CArgs &, CNcbiIstream &, CNcbiOstream &)
void xProcessNewick(const CArgs &, CNcbiIstream &, CNcbiOstream &)
void xProcessWiggleRaw(const CArgs &, CNcbiIstream &, CNcbiOstream &)
void xProcessGvf(const CArgs &, CNcbiIstream &, CNcbiOstream &)
void xProcess5ColFeatTable(const CArgs &, CNcbiIstream &, CNcbiOstream &)
static AutoPtr< ILineError > sCreateSimpleMessage(EDiagSev eDiagSev, const string &msg)
bool PutMessage(const IObjtoolsMessage &message)
CMultiReaderApp & m_multi_reader_app
CMyMessageListenerCustomLevel(int level, CMultiReaderApp &multi_reader_app)
void PutProgress(const string &msg, const Uint8 bytesDone, const Uint8 dummy)
This is used for processing progress messages.
CMyMessageListenerCustom(int iMaxCount, int iMaxLevel, CMultiReaderApp &multi_reader_app)
bool PutMessage(const IObjtoolsMessage &message)
void PutProgress(const string &msg, const Uint8 bytesDone, const Uint8 dummy)
This is used for processing progress messages.
~CMyMessageListenerCustom()
bool PutError(const ILineError &err)
Store error in the container, and return true if error was stored fine, and return false if the calle...
CMultiReaderApp & m_multi_reader_app
CNcbiOstrstreamToString class helps convert CNcbiOstrstream to a string Sample usage:
void Dump(CNcbiOstream &ostr) const
void Dump(CNcbiOstream &ostr) const
static CRef< CSeq_id > AsSeqId(const string &rawId, long flags=0, bool localInts=true)
Convert a raw ID string to a Seq-id, based in given customization flags.
@ fNumericIdsAsLocal
numeric identifiers are local IDs
@ fAllIdsAsLocal
all identifiers are local IDs
list< CRef< CSeq_annot > > TAnnotList
void SetProgressReportInterval(unsigned int intv)
virtual void ReadSeqAnnots(TAnnots &annots, CNcbiIstream &istr, ILineErrorListener *pErrors=nullptr)
Read all objects from given insput stream, returning them as a vector of Seq-annots.
static CReaderBase * GetReader(CFormatGuess::EFormat format, TReaderFlags flags=0, CReaderListener *=nullptr)
Allocate a CReaderBase derived reader object based on the given file format.
virtual void Write(CNcbiOstream &out) const override
virtual EDiagSev Severity() const
Implements a concrete class for reading RepeatMasker output from tabular form and rendering it as ASN...
CRef< CSeq_annot > ReadSeqAnnot(ILineReader &lr, ILineErrorListener *pMessageListener=0)
Read an object from a given line reader, render it as a single Seq-annot, if possible.
bool IsFtable(void) const
Base class for all serializable objects.
Simple implementation of ILineReader for i(o)streams.
CRef< CSerialObject > ReadObject(ILineReader &lr, ILineErrorListener *pErrors=nullptr) override
Read an object from a given line reader, render it as the most appropriate Genbank object.
virtual bool ReadTrackData(ILineReader &, CRawWiggleTrack &, ILineErrorListener *=nullptr)
Interface for testing cancellation request in a long lasting operation.
virtual void DumpAsXML(CNcbiOstream &out) const
virtual void Dump(CNcbiOstream &out) const
virtual EDiagSev Severity(void) const
@ eProblem_GeneralParsingError
vector< unsigned int > TVecOfLines
virtual EProblem Problem(void) const =0
static void cleanup(void)
CRef< objects::CBioTreeContainer > MakeDistanceSensitiveBioTreeContainer(const TPhyTreeNode *tree)
Conversion from TPhyTreeNode to CBioTreeContainer, potentially without dist feature key.
Operators to edit gaps in sequences.
virtual const CArgs & GetArgs(void) const
Get parsed command line arguments.
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.
virtual void SetupArgDescriptions(CArgDescriptions *arg_desc)
Setup the command line argument descriptions.
const string & GetProgramDisplayName(void) const
Get the application's "display" name.
#define NON_CONST_ITERATE(Type, Var, Cont)
Non constant version of ITERATE macro.
void SetVersion(const CVersionInfo &version)
Set the version number for the program.
@ 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)
@ eDirectory
Name of file directory.
@ fBinary
Open file in binary mode.
EDiagSev
Severity level for the posted diagnostics.
@ eDiag_Info
Informational message.
@ eDiag_Error
Error message.
@ eDiag_Warning
Warning message.
@ eDiag_Fatal
Fatal error – guarantees exit(or abort)
virtual void ReportExtra(ostream &out) const
Report "non-standard" attributes.
#define NCBI_USER_THROW_FMT(message)
Throw a "user exception" with message processed as output to ostream.
const string & GetMsg(void) const
Get message string.
#define NCBI_THROW2(exception_class, err_code, message, extra)
Throw exception with extra parameter.
#define FORMAT(message)
Format message using iostreams library.
static string MakePath(const string &dir=kEmptyStr, const string &base=kEmptyStr, const string &ext=kEmptyStr)
Assemble a path from basic components.
static CRef< ILineReader > New(const string &filename)
Return a new ILineReader object corresponding to the given filename, taking "-" (but not "....
long TFlags
binary OR of EFlags
virtual CRef< CSeq_entry > ReadSeqEntry(ILineReader &lr, ILineErrorListener *pErrors)
Read an object from a given line reader, render it as a single Seq-entry, if possible.
static void AddStringFlags(const list< string > &stringFlags, TFlags &baseFlags)
virtual bool AtEOF(void) const =0
Indicates (negatively) whether there is any more input.
void SetMaxIDLength(Uint4 max_len)
If this is set, an exception will be thrown if a Sequence ID exceeds the given length.
@ fAddMods
Parse defline mods and add to SeqEntry.
@ fNoSplit
Don't split out ambiguous sequence regions.
@ fParseGaps
Make a delta sequence if gaps found.
@ fDisableParseRange
No ranges in seq-ids. Ranges part of seq-id instead.
void Reset(void)
Reset reference object.
uint64_t Uint8
8-byte (64-bit) unsigned integer
IO_PREFIX::ofstream CNcbiOfstream
Portable alias for ofstream.
bool IsOssEmpty(CNcbiOstrstream &oss)
IO_PREFIX::ostream CNcbiOstream
Portable alias for ostream.
IO_PREFIX::istream CNcbiIstream
Portable alias for istream.
IO_PREFIX::ifstream CNcbiIfstream
Portable alias for ifstream.
static int StringToNonNegativeInt(const CTempString str, TStringToNumFlags flags=0)
Convert string to non-negative integer value.
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 StartsWith(const CTempString str, const CTempString start, ECase use_case=eCase)
Check if a string starts with a specified prefix value.
static bool SplitInTwo(const CTempString str, const CTempString delim, string &str1, string &str2, TSplitFlags flags=0)
Split a string into two pieces using the specified delimiters.
static enable_if< is_arithmetic< TNumeric >::value||is_convertible< TNumeric, Int8 >::value, string >::type NumericToString(TNumeric value, TNumToStringFlags flags=0, int base=10)
Convert numeric value to string.
static string TruncateSpaces(const string &str, ETrunc where=eTrunc_Both)
Truncate spaces in a string.
@ fConvErr_NoThrow
Do not throw an exception on error.
const TFtable & GetFtable(void) const
Get the variant data.
bool IsFtable(void) const
Check if variant Ftable is selected.
const TData & GetData(void) const
Get the Data member data.
Lightweight interface for getting lines of data with minimal memory copying.
string s_AlnErrorToString(const CAlnError &error)
CMultiReaderMessageListener newStyleMessageListener
int main(int argc, const char *argv[])
constexpr bool empty(list< Ts... >) noexcept
Defines the CNcbiApplication and CAppException classes for creating NCBI applications.
Defines command line argument related classes.
The NCBI C++/STL use hints.
static const char * prefix[]
TPhyTreeNode * ReadNewickTree(CNcbiIstream &is)
Newick format input.
static const char *const features[]