Releases: kr-colab/discoal
v0.1.7 - Memory Optimization Release
v0.1.7 - Memory Optimization Release
This release brings significant memory and performance optimizations to discoal while maintaining 100% backward compatibility. This serves as a transitional release before the upcoming tskit integration.
Highlights
- 80-99% memory reduction for most simulation scenarios
- Up to 50x performance improvement for high mutation rates
- Sample size limit increased from 254 to 65,535
Major Improvements
Memory Optimizations
- Dynamic allocation replaces fixed-size arrays (baseline memory: 400MB → 10MB)
- Ancestry tracking via interval trees instead of per-site arrays
- Memory-mapped files for sweep trajectories (2GB → 1.4MB)
- Reference counting enables memory sharing between nodes
- Active material tracking with segment-based structure
Performance Enhancements
- Optimized mutation handling with hash tables and binary search
- Pre-computed mutation presence matrix for output generation
- AVL tree indexing for O(log n) ancestry lookups
- Up to 50x speedup for extreme mutation rates (θ=10,000)
- 33-47x faster for extreme recombination scenarios
# Same command-line interface as v0.1.6
./discoal 50 1000 10000 -t 10 -r 10Installation
git clone https://github.com/kr-colab/discoal.git
cd discoal
make discoalWhat's Next?
The next major release (v0.2.0) will introduce full tskit integration for tree sequence recording, bringing discoal into the modern tree sequence ecosystem.
v0.1.6 - Legacy Release
Legacy Version - Final release before tskit integration
This release represents the last version of discoal before the major tskit integration changes. It is being preserved for compatibility with existing workflows and as a reference point.
Features
- Standard coalescent simulation with recombination
- Selective sweep models (stochastic, deterministic, neutral)
- Demographic changes (population splits, admixture, size changes)
- Gene conversion support
- Multiple population models with migration
- Ancient sampling
- Recurrent hitchhiking modes
- Tree output mode (-T flag)
Installation
git clone https://github.com/kr-colab/discoal.git
cd discoal
git checkout v0.1.6
make discoalWhat's Next?
The next major release will include full tskit integration for tree sequence recording, bringing:
- Efficient tree sequence output format
- Memory optimizations (80-99% reduction)
- Performance improvements (up to 50x speedup for high mutation scenarios)
- Compatibility with the tskit ecosystem
Documentation
See discoaldoc.pdf for full documentation, or run ./discoal for usage information.
maintenance release
a few minor bug fixes in this release
ancient sample bug fix
noticed that sweeps and ancient samples weren't playing together as expected.
bug fix release
This release has a good bit of cleanup do to the help of @molpopgen. In addition @35ajstern found a bug in the newick tree output in cases with recombination that now is fixed. thanks for all the great help folks!
v0.1.2
v0.1.2 fixes a bug reported by Yoko Satta in which no recombination simulations very rarely violate the four gamete test. This was a result of a floating point precision problem with the RNG which effectively caused collisions between sites chosen to be mutations. This should now be fixed.
discoal v0.1.1
This is the first release of discoal using the "releases" feature of GitHub. Kevin Thornton suggested that I use this feature to track changes and I agree it's an excellent idea. v0.1.1 fixes the way I had been dealing with the origination of alleles used for conditional trajectories, both neutral and beneficial. In particular I had not been accounting for changes in the mutation rate of these alleles that we condition upon (see Slatkin (2001) Simulating genealogies of selected alleles in a population of variable size). Aaron Stern noted this potential problem and suggested a fix might be to use rejection sampling of trajectories. This is now implemented in v0.1.1. All said the update has very minor effects on summaries of variation from the vast majority of demographic models, so past work done with v0.1 is likely unaffected by my previous implementation.