Commit 0d0f30a0 authored by mvalle's avatar mvalle
Browse files

Updated doxygen to 1.8.3.1

Added switches to compute a range of branches
Added branch selection (single branch or range of branches) to MPI.


git-svn-id: https://svn.vital-it.ch/svn/hp2c/trunk/Codeml_Variants/Fastcodeml@5809 95c5a404-1f88-0410-a6b0-c3f062b6f34a
parent 38c02be3
......@@ -115,6 +115,8 @@ void CmdLine::parseCmdLine(int aCnt, char **aVal)
OPT_HELP,
OPT_SEED,
OPT_BRANCH,
OPT_BRANCH_START,
OPT_BRANCH_END,
OPT_IGNORE_FREQ,
OPT_EXPORT,
OPT_NOT_REDUCE,
......@@ -150,9 +152,13 @@ void CmdLine::parseCmdLine(int aCnt, char **aVal)
{ OPT_HELP, "--help", SO_NONE, "" },
{ OPT_SEED, "-s", SO_REQ_SEP, "Random number generator seed (0 < seed < 1000000000)" },
{ OPT_SEED, "--seed", SO_REQ_SEP, "" },
{ OPT_BRANCH, "-b", SO_REQ_SEP, "Do only this branch as foreground branch" },
{ OPT_BRANCH, "-b", SO_REQ_SEP, "Do only this branch as foreground branch (count from 0)" },
{ OPT_BRANCH, "--branch", SO_REQ_SEP, "" },
{ OPT_IGNORE_FREQ, "-i", SO_NONE, "Ignore computed codon frequency and set all to 1/61" },
{ OPT_BRANCH_START, "-bs", SO_REQ_SEP, "Start computing from this branch as foreground one (count from 0) (default: first one)" },
{ OPT_BRANCH_START, "--branch-start", SO_REQ_SEP, "" },
{ OPT_BRANCH_END, "-be", SO_REQ_SEP, "End computing at this branch as foreground one (count from 0) (default: last one)" },
{ OPT_BRANCH_END, "--branch-end", SO_REQ_SEP, "" },
{ OPT_IGNORE_FREQ, "-i", SO_NONE, "Ignore computed codon frequency and set all of them to 1/61" },
{ OPT_IGNORE_FREQ, "--ignore-freq", SO_NONE, "" },
{ OPT_EXPORT, "-e", SO_REQ_SEP, "Export forest in GML format (if %03d or @03d is present, one is created for each fg branch)" },
{ OPT_EXPORT, "--export", SO_REQ_SEP, "" },
......@@ -250,7 +256,19 @@ void CmdLine::parseCmdLine(int aCnt, char **aVal)
case OPT_BRANCH:
tmpi = atoi(args.OptionArg());
if(tmpi < 0) throw FastCodeMLFatal("Invalid branch value");
mBranch = static_cast<unsigned int>(tmpi);
mBranchStart = mBranchEnd = static_cast<unsigned int>(tmpi);
break;
case OPT_BRANCH_START:
tmpi = atoi(args.OptionArg());
if(tmpi < 0) throw FastCodeMLFatal("Invalid start branch value");
mBranchStart = static_cast<unsigned int>(tmpi);
break;
case OPT_BRANCH_END:
tmpi = atoi(args.OptionArg());
if(tmpi < 0) throw FastCodeMLFatal("Invalid end branch value");
mBranchEnd = static_cast<unsigned int>(tmpi);
break;
case OPT_IGNORE_FREQ:
......@@ -365,5 +383,7 @@ void CmdLine::parseCmdLine(int aCnt, char **aVal)
if(mComputeHypothesis < 2) mInitH0fromH1 = false;
if(mComputeHypothesis == 0 && mExportComputedTimes < 2) mExportComputedTimes = 0;
if(mComputeHypothesis == 1 && mExportComputedTimes < 2) mExportComputedTimes = 1;
if(mBranchStart == UINT_MAX && mBranchEnd < UINT_MAX) mBranchStart = 0;
if(mBranchStart > mBranchEnd) throw FastCodeMLFatal("Start branch after end branch. Quitting.");
}
......@@ -28,7 +28,8 @@ public:
mResultsFile(NULL),
mVerboseLevel(VERBOSE_ONLY_RESULTS),
mSeed(0),
mBranch(UINT_MAX),
mBranchStart(UINT_MAX),
mBranchEnd(UINT_MAX),
mExportComputedTimes(UINT_MAX),
mComputeHypothesis(UINT_MAX),
mOptimizationAlgo(0),
......@@ -71,7 +72,8 @@ public:
const char* mResultsFile; ///< File to which the results should be written
unsigned int mVerboseLevel; ///< Verbosity level. 0: no messages; 1: basic messages; 2: messages useful for debugging; 3: really annoying
unsigned int mSeed; ///< Random number generator seed (0 means not set from command line)
unsigned int mBranch; ///< Do only this branch. The numbering starts at 0 (UINT_MAX means run all branches)
unsigned int mBranchStart; ///< Compute from this branch. The numbering starts at 0 (UINT_MAX means run all branches)
unsigned int mBranchEnd; ///< Compute to this branch. The numbering starts at 0 (UINT_MAX means run all branches). It is >= mBranchStart
unsigned int mExportComputedTimes; ///< If 0 or 1 the times exported are the computed ones in H0 or H1, otherwise (UINT_MAX) the one read from file
unsigned int mComputeHypothesis; ///< If set to 0 compute only H0, if set to 1 compute only H1, otherwise compute both
unsigned int mOptimizationAlgo; ///< Select the optimization algorithm to use
......
# Doxyfile 1.8.2
# Doxyfile 1.8.3.1
# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project.
......@@ -279,9 +279,14 @@ CPP_CLI_SUPPORT = NO
SIP_SUPPORT = NO
# For Microsoft's IDL there are propget and propput attributes to indicate getter and setter methods for a property. Setting this option to YES (the default) will make doxygen replace the get and set methods by a property in the documentation. This will only work if the methods are indeed getting or setting a simple type. If this is not the case, or you want to show the methods anyway, you should set this option to NO.
# For Microsoft's IDL there are propget and propput attributes to indicate
# getter and setter methods for a property. Setting this option to YES (the
# default) will make doxygen replace the get and set methods by a property in
# the documentation. This will only work if the methods are indeed getting or
# setting a simple type. If this is not the case, or you want to show the
# methods anyway, you should set this option to NO.
IDL_PROPERTY_SUPPORT = YES
IDL_PROPERTY_SUPPORT = NO
# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
# tag is set to YES, then doxygen will reuse the documentation of the first
......@@ -539,7 +544,8 @@ GENERATE_BUGLIST = YES
GENERATE_DEPRECATEDLIST= YES
# The ENABLED_SECTIONS tag can be used to enable conditional
# documentation sections, marked by \if sectionname ... \endif.
# documentation sections, marked by \if section-label ... \endif
# and \cond section-label ... \endcond blocks.
ENABLED_SECTIONS =
......@@ -597,7 +603,8 @@ LAYOUT_FILE =
# requires the bibtex tool to be installed. See also
# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
# feature you need bibtex and perl available in the search path.
# feature you need bibtex and perl available in the search path. Do not use
# file names with spaces, bibtex cannot handle them.
CITE_BIB_FILES =
......@@ -679,7 +686,7 @@ INPUT_ENCODING = UTF-8
# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
# *.f90 *.f *.for *.vhd *.vhdl
FILE_PATTERNS = *.h *.cpp
FILE_PATTERNS = *.cpp *.h
# The RECURSIVE tag can be used to turn specify whether or not subdirectories
# should be searched for input files as well. Possible values are YES and NO.
......@@ -779,6 +786,13 @@ FILTER_SOURCE_FILES = NO
FILTER_SOURCE_PATTERNS =
# If the USE_MD_FILE_AS_MAINPAGE tag refers to the name of a markdown file that
# is part of the input, its contents will be placed on the main page (index.html).
# This can be useful if you have a project on for instance GitHub and want reuse
# the introduction page also for the doxygen output.
USE_MDFILE_AS_MAINPAGE =
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
......@@ -1188,6 +1202,13 @@ FORMULA_TRANSPARENT = YES
USE_MATHJAX = NO
# When MathJax is enabled you can set the default output format to be used for
# thA MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and
# SVG. The default value is HTML-CSS, which is slower, but has the best
# compatibility.
MATHJAX_FORMAT = HTML-CSS
# When MathJax is enabled you need to specify the location relative to the
# HTML output directory using the MATHJAX_RELPATH option. The destination
# directory should contain the MathJax.js script. For instance, if the mathjax
......@@ -1216,15 +1237,55 @@ MATHJAX_EXTENSIONS =
SEARCHENGINE = YES
# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
# implemented using a PHP enabled web server instead of at the web client
# using Javascript. Doxygen will generate the search PHP script and index
# file to put on the web server. The advantage of the server
# based approach is that it scales better to large projects and allows
# full text search. The disadvantages are that it is more difficult to setup
# and does not have live searching capabilities.
# implemented using a web server instead of a web client using Javascript.
# There are two flavours of web server based search depending on the
# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for
# searching and an index file used by the script. When EXTERNAL_SEARCH is
# enabled the indexing and searching needs to be provided by external tools.
# See the manual for details.
SERVER_BASED_SEARCH = NO
# When EXTERNAL_SEARCH is enabled doxygen will no longer generate the PHP
# script for searching. Instead the search results are written to an XML file
# which needs to be processed by an external indexer. Doxygen will invoke an
# external search engine pointed to by the SEARCHENGINE_URL option to obtain
# the search results. Doxygen ships with an example indexer (doxyindexer) and
# search engine (doxysearch.cgi) which are based on the open source search engine
# library Xapian. See the manual for configuration details.
EXTERNAL_SEARCH = NO
# The SEARCHENGINE_URL should point to a search engine hosted by a web server
# which will returned the search results when EXTERNAL_SEARCH is enabled.
# Doxygen ships with an example search engine (doxysearch) which is based on
# the open source search engine library Xapian. See the manual for configuration
# details.
SEARCHENGINE_URL =
# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
# search data is written to a file for indexing by an external tool. With the
# SEARCHDATA_FILE tag the name of this file can be specified.
SEARCHDATA_FILE = searchdata.xml
# When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the
# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
# projects and redirect the results back to the right project.
EXTERNAL_SEARCH_ID =
# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
# projects other than the one defined by this configuration file, but that are
# all added to the same external search index. Each project needs to have a
# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id
# of to a relative location where the documentation can be found.
# The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ...
EXTRA_SEARCH_MAPPINGS =
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
......
......@@ -3,7 +3,6 @@
#define FASTCODEMLEXCEPTIONS_H
#include <stdexcept>
#include <string>
#include <sstream>
/// Fatal error in FastCodeML.
......
......@@ -261,6 +261,77 @@ void Forest::postLoad(void)
}
#endif
bool Forest::getBranchRange(const CmdLine& aCmdLine, size_t& aBranchStart, size_t& aBranchEnd) const
{
const size_t num_branches = getNumInternalBranches();
const size_t marked_branch = getMarkedInternalBranch();
// Check if the request make sense
if(num_branches == 0)
{
throw FastCodeMLFatal("No internal branches present. Quitting.");
}
// By default do all branches
bool do_all = true;
// Adjust the number of branches to compute
if(aCmdLine.mBranchFromFile)
{
// Branch from file, verify if valid
if(marked_branch >= num_branches)
{
if(aCmdLine.mVerboseLevel >= VERBOSE_INFO_OUTPUT) std::cout << std::endl << "Invalid branch marked in tree file. Ignoring" << std::endl;
aBranchStart = 0;
aBranchEnd = num_branches-1;
}
else
{
aBranchStart = marked_branch;
aBranchEnd = marked_branch;
do_all = false;
}
}
else if(aCmdLine.mBranchStart < UINT_MAX && aCmdLine.mBranchStart >= num_branches)
{
// Invalid start value, ignoring, do all branches
if(aCmdLine.mVerboseLevel >= VERBOSE_INFO_OUTPUT) std::cout << std::endl << "Invalid branch requested. Ignoring" << std::endl;
aBranchStart = 0;
aBranchEnd = num_branches-1;
}
else if(aCmdLine.mBranchStart < UINT_MAX && aCmdLine.mBranchEnd == UINT_MAX)
{
// Only start branch set. Do from it to the end.
aBranchStart = static_cast<size_t>(aCmdLine.mBranchStart);
aBranchEnd = num_branches-1;
if(aBranchStart > 0) do_all = false;
}
else if(aCmdLine.mBranchStart < UINT_MAX && aCmdLine.mBranchEnd < UINT_MAX)
{
// Both start and end branch (already tested start <= end)
aBranchStart = static_cast<size_t>(aCmdLine.mBranchStart);
if(aCmdLine.mBranchEnd >= num_branches)
{
if(aCmdLine.mVerboseLevel >= VERBOSE_INFO_OUTPUT) std::cout << std::endl << "Invalid end branch requested. Ignoring" << std::endl;
aBranchEnd = num_branches-1;
if(aBranchStart > 0) do_all = false;
}
else
{
aBranchEnd = static_cast<size_t>(aCmdLine.mBranchEnd);
if(aBranchStart > 0 && aBranchEnd < num_branches-1) do_all = false;
}
}
else
{
// No limit set, do all branches
aBranchStart = 0;
aBranchEnd = num_branches-1;
}
return do_all;
}
void Forest::reduceSubtrees(void)
{
// Setup dependency vectors
......
......@@ -21,6 +21,7 @@
#include "DAGScheduler.h"
#endif
#include "TreeAndSetsDependencies.h"
#include "CmdLine.h"
// Global scaling factor (uncomment the define only if the scaling factor is different from one)
//#define USE_GLOBAL_SCALING
......@@ -87,6 +88,18 @@ public:
///
friend std::ostream& operator<< (std::ostream& aOut, const Forest& aForest);
/// Get the first and last branches to be marked as foreground.
///
/// @param[in] aCmdLine The parameters from the command line of the main program
/// @param[out] aBranchStart The first branch to be marked as foreground
/// @param[out] aBranchEnd The last branch to be marked as foreground
///
/// @return True if all branches are selected
///
/// @exception FastCodeMLFatal Invalid range from command line
///
bool getBranchRange(const CmdLine& aCmdLine, size_t& aBranchStart, size_t& aBranchEnd) const;
/// Reduce common subtrees on the whole forest.
///
void reduceSubtrees(void);
......
......@@ -140,6 +140,13 @@ struct HighLevelCoordinator::WorkTable
/// @param[in] aOut The stream on which the print should be done.
///
void printVariables(size_t aBranch, unsigned int aHyp, std::ostream& aOut=std::cout) const;
/// Mark as job to be skipped branches outside the given range
///
/// @param[in] aBranchStart The first branch to be processed
/// @param[in] aBranchEnd The last branch to be processed
///
void skipOutsideRange(size_t aBranchStart, size_t aBranchEnd);
};
......@@ -271,6 +278,19 @@ void HighLevelCoordinator::WorkTable::checkAllJobsDone(void) const
if(any_error) throw FastCodeMLFatal();
}
void HighLevelCoordinator::WorkTable::skipOutsideRange(size_t aBranchStart, size_t aBranchEnd)
{
for(size_t branch=0; branch < mNumInternalBranches; ++branch)
{
// Don't touch jobs in the range
if(branch >= aBranchStart && branch <= aBranchEnd) continue;
mJobStatus[branch*JOBS_PER_BRANCH+JOB_H0] = JOB_SKIP;
mJobStatus[branch*JOBS_PER_BRANCH+JOB_H1] = JOB_SKIP;
mJobStatus[branch*JOBS_PER_BRANCH+JOB_BEB] = JOB_SKIP;
}
}
void HighLevelCoordinator::WorkTable::printVariables(size_t aBranch, unsigned int aHyp, std::ostream& aOut) const
{
aOut << "Optimized variables for H" << aHyp << " for fg branch " << aBranch << std::endl;
......@@ -401,14 +421,14 @@ bool HighLevelCoordinator::startWork(Forest& aForest, const CmdLine& aCmdLine)
// Start the jobs
if(mRank == MASTER_JOB)
{
// If users set the fg branch tell them it is ignored
if((aCmdLine.mBranchFromFile || aCmdLine.mBranch != UINT_MAX) && mVerbose >= VERBOSE_INFO_OUTPUT)
std::cout << "Cannot specify fg branch if run under MPI. Ignoring." << std::endl;
// If the user asks for one hypothesis only
if(aCmdLine.mComputeHypothesis < 2 && mVerbose >= VERBOSE_INFO_OUTPUT)
std::cout << "Cannot compute only one hypothesis under MPI. Ignoring." << std::endl;
// Compute the range of branches to mark as foreground
size_t branch_start, branch_end;
bool do_all = aForest.getBranchRange(aCmdLine, branch_start, branch_end);
// Initialize structures
mVerbose = aCmdLine.mVerboseLevel;
mNumInternalBranches = aForest.getNumInternalBranches();
......@@ -421,6 +441,9 @@ bool HighLevelCoordinator::startWork(Forest& aForest, const CmdLine& aCmdLine)
delete mWorkTable;
mWorkTable = new WorkTable(mNumInternalBranches);
// If the range don't cover all the branches, mark the jobs to skip
if(!do_all) mWorkTable->skipOutsideRange(branch_start, branch_end);
// Prepare the results file output
WriteResults output_results(aCmdLine.mResultsFile);
......@@ -611,6 +634,9 @@ void HighLevelCoordinator::doMaster(WriteResults& aOutputResults)
std::cout << std::endl;
for(size_t branch=0; branch < mNumInternalBranches; ++branch)
{
// Skip branches that were not computed
if(mWorkTable->mJobStatus[branch*JOBS_PER_BRANCH+JOB_H1] == JOB_SKIP) continue;
std::cout << "Branch: " << std::fixed << std::setw(3) << branch;
if(mWorkTable->mResults[branch].mLnl[0] == DBL_MAX)
{
......@@ -633,32 +659,35 @@ void HighLevelCoordinator::doMaster(WriteResults& aOutputResults)
std::cout << std::endl;
}
// Check if at least one site is under positive selection
bool has_positive_selection_sites = false;
// Check if there are sites under positive selection
std::vector<size_t> branch_with_pos_selection;
for(size_t branch=0; branch < mNumInternalBranches; ++branch)
{
// Skip branches that were not computed
if(mWorkTable->mJobStatus[branch*JOBS_PER_BRANCH+JOB_H1] == JOB_SKIP) continue;
if(!mWorkTable->mResults[branch].mPositiveSelSites.empty())
{
has_positive_selection_sites = true;
break;
branch_with_pos_selection.push_back(branch);
}
}
// If there are print the site and corresponding probability
if(has_positive_selection_sites)
if(!branch_with_pos_selection.empty())
{
std::cout << std::endl << "Positive selection sites" << std::endl;
for(size_t branch=0; branch < mNumInternalBranches; ++branch)
std::vector<size_t>::const_iterator ib(branch_with_pos_selection.begin());
std::vector<size_t>::const_iterator end(branch_with_pos_selection.end());
for(; ib != end; ++ib)
{
WorkTable::ResultSet& branch_results = mWorkTable->mResults[branch];
if(branch_results.mPositiveSelSites.empty()) continue;
WorkTable::ResultSet& branch_results = mWorkTable->mResults[*ib];
// To order the sites
std::multimap<size_t, size_t> ordered_map;
std::vector<double> probs;
size_t current_idx = 0;
std::cout << "Branch: " << std::fixed << std::setw(3) << branch << std::endl;
std::cout << "Branch: " << std::fixed << std::setw(3) << *ib << std::endl;
for(size_t pss=0; pss < branch_results.mPositiveSelSites.size(); ++pss)
{
// Get probability
......
......@@ -95,7 +95,11 @@ int main(int aRgc, char **aRgv)
std::cout << "Verbose level: " << cmd.mVerboseLevel << " (" << decodeVerboseLevel(cmd.mVerboseLevel) << ')' << std::endl;
if(cmd.mSeed) std::cout << "Seed: " << cmd.mSeed << std::endl;
if(cmd.mBranchFromFile) std::cout << "Branch: From tree file" << std::endl;
else if(cmd.mBranch != UINT_MAX) std::cout << "Branch: " << cmd.mBranch << std::endl;
else if(cmd.mBranchStart != UINT_MAX && cmd.mBranchStart == cmd.mBranchEnd)
std::cout << "Branch: " << cmd.mBranchStart << std::endl;
else if(cmd.mBranchStart != UINT_MAX && cmd.mBranchEnd == UINT_MAX)
std::cout << "Branches: " << cmd.mBranchStart << "-end" << std::endl;
else std::cout << "Branches: " << cmd.mBranchStart << '-' << cmd.mBranchEnd << std::endl;
if(cmd.mIgnoreFreq) std::cout << "Codon freq.: Ignore" << std::endl;
if(cmd.mDoNotReduceForest) std::cout << "Reduce forest: Do not reduce" << std::endl;
else std::cout << "Reduce forest: Aggressive" << std::endl;
......@@ -275,44 +279,9 @@ int main(int aRgc, char **aRgv)
// Initialize the output results file (if the argument is null, no file is created)
WriteResults output_results(cmd.mResultsFile);
// Compute the range of branches to compute
// Compute the range of branches to mark as foreground
size_t branch_start, branch_end;
const size_t num_branches = forest.getNumInternalBranches();
const size_t marked_branch = forest.getMarkedInternalBranch();
// Check if the request make sense
if(num_branches == 0)
{
throw FastCodeMLFatal("No internal branches present. Quitting.");
}
if(cmd.mBranchFromFile && marked_branch >= num_branches)
{
if(cmd.mVerboseLevel >= VERBOSE_INFO_OUTPUT) std::cout << std::endl << "Invalid branch marked in tree file. Ignoring" << std::endl;
}
else if(cmd.mBranch >= num_branches && cmd.mBranch < UINT_MAX)
{
if(cmd.mVerboseLevel >= VERBOSE_INFO_OUTPUT) std::cout << std::endl << "Invalid branch requested. Ignoring" << std::endl;
}
// Compute which branch to process (or switch to the entire range of branches)
if(cmd.mBranchFromFile && marked_branch < num_branches)
{
// Branch from file and valid
branch_start = marked_branch;
branch_end = marked_branch+1;
}
else if(cmd.mBranch < num_branches)
{
// Branch explicitely requested on the command line and valid
branch_start = static_cast<size_t>(cmd.mBranch);
branch_end = branch_start+1;
}
else
{
// Do all internal branches
branch_start = 0;
branch_end = num_branches;
}
forest.getBranchRange(cmd, branch_start, branch_end);
// Start timing parallel part
if(cmd.mVerboseLevel >= VERBOSE_INFO_OUTPUT) timer.start();
......@@ -325,7 +294,7 @@ int main(int aRgc, char **aRgv)
BayesTest beb(forest, cmd.mVerboseLevel, cmd.mDoNotReduceForest);
// For all requested internal branches
for(size_t fg_branch=branch_start; fg_branch < branch_end; ++fg_branch)
for(size_t fg_branch=branch_start; fg_branch <= branch_end; ++fg_branch)
{
if(cmd.mVerboseLevel >= VERBOSE_ONLY_RESULTS) std::cout << std::endl << "Doing branch " << fg_branch << std::endl;
......@@ -515,15 +484,15 @@ int main(int aRgc, char **aRgv)
///
/// The null pointer should be written as NULL, not 0 to make clear its purpose.
///
/// @page cmd_page Command Line Switches
///
/// Here is a quick list of the valid command line switches for FastCodeML.
///
///@verbatim
/*
/**
@page cmd_page Command Line Switches
Here is a quick list of the valid command line switches for FastCodeML.
@verbatim
Usage:
FastCodeML [options] tree_file gene_file
FastCodeML [options] tree_file alignment_file
-d --debug -v --verbose (required argument)
Verbosity level (0: none; 1: results only; 2: normal info; 3: MPI trace; 4: more debug) (default: 1)
......@@ -538,10 +507,16 @@ Usage:
Random number generator seed (0 < seed < 1000000000)
-b --branch (required argument)
Do only this branch as foreground branch
Do only this branch as foreground branch (count from 0)
-bs --branch-start (required argument)
Start computing from this branch as foreground one (count from 0) (default: first one)
-be --branch-end (required argument)
End computing at this branch as foreground one (count from 0) (default: last one)
-i --ignore-freq (no argument)
Ignore computed codon frequency and set all to 1/61
Ignore computed codon frequency and set all of them to 1/61
-e --export (required argument)
Export forest in GML format (if %03d or @03d is present, one is created for each fg branch)
......@@ -549,7 +524,7 @@ Usage:
-nr --no-reduce (no argument)
Do not reduce forest by merging common subtrees
-l --lengths-from-file (no argument)
-l --lengths-from-file --times-from-file (no argument)
Initial branch lengths from tree file
-o --initial-step (no argument)
......@@ -602,6 +577,7 @@ Usage:
@endverbatim
*/
/// @page vampir_page Using Vampir for profiling
/// On Linux we use VampirTrace to collect profile data and Vampir to display the results (http://www.vampir.eu/).
///
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment