Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@

## <a name="intro"></a> Introduction

DIPPER (**DI**stance-based **P**hylogenetic **P**lac**ER**) is a tool for ultrafast and ultralarge phylogenetic reconstruction on GPUs, designed to maintain high accuracy with a minimal memory footprint. DIPPER introduces several innovations, including a divide-and-conquer strategy, a new placement algorithm, and an on-the-fly distance calculator that dynamically enables selective distance computation. DIPPER supports tree reconstruction with zero violations even from non-additive distance matrices and a faster heuristic mode with significantly fewer violations than baseline tools.
DIPPER (**DI**stance-based **P**hylogenetic **P**lac**ER**) is a tool for ultrafast and ultralarge phylogenetic reconstruction on GPUs, designed to maintain high accuracy with a minimal memory footprint. DIPPER introduces several innovations, including a divide-and-conquer strategy, a new placement algorithm, and an on-the-fly distance calculator that dynamically enables selective distance computation. In addition, DIPPER addresses the common issue of evolutionary distance underestimation observed in earlier methods—significantly reducing it in its default mode and offering a strict mode that completely eliminates the underestimation.


## <a name="install"></a> Installation
NOTE: DIPPER is currently supported on systems with <b>NVIDIA GPUs only</b>. Support for additional platforms, including AMD GPUs and CPU-only options for x86-64 and ARM64 architecture, will be added soon. Stay tuned!
Expand Down
8 changes: 3 additions & 5 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,14 @@

## <b>Introduction</b>
### <b>Overview</b><a name="overview"></a>
DIPPER (**DI**stance-based **P**hylogenetic **P**lac**ER**) is an ultrafast tool designed to reconstruct ultralarge phylogenies.

DIPPER (**DI**stance-based **P**hylogenetic **P**lac**ER**) is a tool for ultrafast and ultralarge phylogenetic reconstruction on GPUs, designed to maintain high accuracy with a minimal memory footprint. DIPPER introduces several innovations, including a divide-and-conquer strategy, a new placement algorithm, and an on-the-fly distance calculator that dynamically enables selective distance computation. In addition, DIPPER addresses the common issue of evolutionary distance underestimation observed in earlier methods—significantly reducing it in its default mode and offering a strict mode that completely eliminates the underestimation.

<div align="center">
<div><b>Figure 1: Overview of DIPPER algorithm</b></div>
<img src="images/overview.png" width="1000"/>
</div>

### <b>Key Features</b>

#### TBA

<a name="install"></a>
## <b>Installation Methods</b>
Expand Down Expand Up @@ -115,7 +113,7 @@ cd bin
| `-I`, `--input-file` | Input file path <b>(required)</b>:<br>PHYLIP for distance matrix, FASTA for MSA or raw sequences |
| `-O`, `--output-file` | Output file path <b>(required)</b> |
| `-m`, `--algorithm` | Algorithm selection:<br>`0` - auto <b>(default)</b><br>`1` - force placement<br>`2` - force NJ<br>`3` - divide-and-conquer |
| `-p`, `--placement-mode` | Placement mode:<br>`0` - exact<br>`1` - k-closest <b>(default)</b> |
| `-K`, `--K-closest` | Placement mode:<br>`-1` - exact<br>`10` - <b>default</b> |
| `-k`, `--kmer-size` | K-mer size (Valid range: 2–15, <b>default: 15</b>) |
| `-s`, `--sketch-size` | Sketch size (<b>default: 1000</b>) |
| `-d`, `--distance-type` | Distance type:<br>`1` - uncorrected<br>`2` - JC <b>(default)</b> <br>`3` - Tajima-Nei<br>`4` - K2P<br>`5` - Tamura<br>`6` - Jinnei |
Expand Down
16 changes: 8 additions & 8 deletions src/tree_generation.cu
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,10 @@ void parseArguments(int argc, char** argv)
" 2 - force conventional NJ\n"
" 3 - force divide-and-conquer")

("placement-mode,p", po::value<std::string>(),
("--K-closest,K", po::value<std::string>(),
"Placement mode:\n"
" 0 - exact mode\n"
" 1 - k-closest mode (default)")
" -1 - exact mode\n"
" 10 - default")

("kmer-size,k", po::value<std::string>(),
"K-mer size:\n"
Expand Down Expand Up @@ -219,8 +219,8 @@ int main(int argc, char** argv) {
try {algo = vm["algorithm"].as<std::string>();}
catch(std::exception &e){}

std::string placemode = "1";
try {placemode = vm["placement-mode"].as<std::string>();}
std::string placemode = "10";
try {placemode = vm["K-closest"].as<std::string>();}
catch(std::exception &e){}

bool add = false;
Expand Down Expand Up @@ -376,7 +376,7 @@ int main(int argc, char** argv) {
MashPlacement::msaDeviceArrays.allocateDeviceArrays(fourBitCompressedSeqs, seqLengths, numSequences, params);
if(algo=="1"||algo=="0"&&numSequences>=placement_thr&&numSequences<dc_thr){
std::cerr<<"Using ";
if(placemode=="0"){
if(placemode=="-1"){
std::cerr<<" exact placement mode\n";
MashPlacement::placementDeviceArrays.allocateDeviceArrays(numSequences);
auto createArrayEnd = std::chrono::high_resolution_clock::now();
Expand Down Expand Up @@ -513,7 +513,7 @@ int main(int argc, char** argv) {
auto createSketchEnd = std::chrono::high_resolution_clock::now();
std::chrono::nanoseconds createSketchTime = createSketchEnd - createSketchStart;
std::cerr << "Sketch Created in: " << createSketchTime.count()/1000000 << " ms\n";
if(placemode=="0"){
if(placemode=="-1"){
std::cerr<<"Using exact placement mode\n";
MashPlacement::placementDeviceArrays.allocateDeviceArrays(numSequences);
auto createTreeStart = std::chrono::high_resolution_clock::now();
Expand Down Expand Up @@ -611,7 +611,7 @@ int main(int argc, char** argv) {
fgets(temp, 20, filePtr);
MashPlacement::matrixReader.allocateDeviceArrays(numSequences, filePtr);
if(algo=="1"||algo=="0"&&numSequences>=placement_thr&&numSequences<dc_thr){
if(placemode=="0"){
if(placemode=="-1"){
std::cerr<<"Using exact placement mode\n";
MashPlacement::placementDeviceArrays.allocateDeviceArrays(numSequences);
MashPlacement::placementDeviceArrays.findPlacementTree(params, MashPlacement::mashDeviceArrays, MashPlacement::matrixReader, MashPlacement::msaDeviceArrays);
Expand Down