We have just released SLiM 2.4. This is a major release with a bunch of new stuff. First of all, for all users, it is important to note:
- This version fixes build issues on Linux with the 2.3 release; sorry about that. It won't happen again, I hope, as we are now using TravisCI to validate our builds on Linux.
- It also fixes a potentially serious bug in the Eidos function setDifference() that could lead to undefined behavior (crashes, memory corruption, etc.) for models that use that function. If your model does not use that function in its script, this is guaranteed to be of no importance to you; the bug was very clearly localized to that function. If your model does use that function, however, we recommend that you upgrade to version 2.4 immediately, and that you consider all output from SLiM 2.3 and earlier, from your models that used the setDifference() function, to be suspect. We apologize for this.
- Please note that this version may result in changed model behavior and model output even given the same random number seed. This is not a bug; it is due to improvements in the SLiM engine. If you need exact backward compatibility of behavior and output, you should not upgrade. (This is usually true of major updates to SLiM, but I've decided to start pointing it out in the release notes so nobody is surprised.)
OK, with those points out of the way, here are the major new features and changes:
- we've done extensive internal optimizations that should lead to better performance of many models (and for even better performance, see the new "mutation runs" feature, section 16.4 in the SLiM manual)
- SLiMgui can now do runtime profiling of models, letting you see which parts of your script are causing performance problems
- a system() function has been added to Eidos, allowing your script to run arbitrary Unix commands
- using system(), you can now do custom plotting in R with live plot updating in SLiMgui; see the new recipe 13.11
- we added a raft of new methods, functions, and properties: sumOfMutationsOfType() for fast QTL effect addition, writeTempFile() for creating randomly named temporary files, catn() and paste0() for simpler output generation
- incidental selfing in hermaphroditic models (where the same individual happens to be chosen as the first and second parent in a biparental mating event) can now be disabled with a preventIncidentalSelfing option to initializeSLiMOptions()
- some new display options for the chromosome view and population view have been added to SLiMgui; access them through the context menu on those views by control-clicking or right-clicking on the views.
- MutationType, GenomicElementType, and InteractionType now support the getValue()/setValue() paradigm that already existed on some other SLiM classes, allowing them to be tagged with arbitrary new auxiliary properties
- a new mutationStackGroup property has been added to SLiM to allow more complex mutation-stacking strategies in models that want very tight control over the way new mutations are added to the chromosome
We've also got some new recipes:
- 9.5: Changing selection coefficients with setSelectionCoeff() for temporal variation in selection
- 13.11: live plotting in SLiMgui with R using system()
- 13.12: Modeling nucleotides in SLiM
There are many smaller feature additions and other minor changes; a more complete change list may be found in chapter 23 of the SLiM manual, and even more detail is in the VERSIONS file in the source code on GitHub.
If you have any questions, comments, etc., please use the slim-discuss group for that. Thanks, and happy modeling!