Towards simuPOP 1.0

simuPOP is preparing for a 1.0 release. No major feature is planned but if you feel that something is desparately missing, please feel free to suggest the feature in the simuPOP mailing list.

To provide a clean and well documented interface, great efforts have been devoted to

  • Polish user's guide to describe all features, including those advanced features that were poorly documented.
  • Go through classes and member functions and add support for virtual subpopulations if the addition improves simuPOP's usability.
  • Finish the pedigree class. Move the logic of samplers out of sampler.cpp. Add pedigreeSample and subclass all pedigree related samplers to this class.These classes only need to define a probePedigree function to find a valid pedigree from a proband.
  • Examine functions in simuUtil.py. Most functions will be moved to the simuPOP online cookbook.
  • Implement a demography class that return a demographic function by adding events to a demographic model.

TODO:

  • Add a debugging feature to output all mutation events.
  • Improve opName() to output more detailed information in dryrun mode.
  • Customized initializeIfNeeded for each operator.
  • Implement isCompatible for each operator.

DEBUG:

  • Check the initialization process of each operator and use proper flags for correct initialization. For example, an operator may need to be re-initialized if population size change, another one may work as long as GenoStruIdx() is the same.
  • Test the use of [] and AllAvail in simuPOP.

After simuPOP 1.0,

  • A bundled installer that includes R, rpy, wxPython etc.
  • Efficiency improvement and possible use of openMP.
  • Use better in-memory storage of a large number of variables. (e.g. use carray or numpy array to store allele frequency.). Use better on-disk storage of a large number of variables.
  • Better ways to profile simuPOP?
  • Complete VSP support for all operators.
  • Investigator the potential of a compact mode (corresponding to each module, making a total of 12 modules) that stores genotype in a more compact mode. For example, monozygous loci would not be saved. This need to separated from the standard modules because these modules will be slow.
  • A few simulation techniques for the simulation of a large number of markers for genome-wide association studies and population genomic simulations.
  • Investigate the potential of python image module. See if it is easy to install and support
  • and, the simuPOP designer!

The simuPOP designer

A prototype of a simuPOP designer that allows users to create an evolutionary scenario interactively. The top right panel represents an evolutionary scenario including a demographic model (green trapezoid) and various operators. The left panel lists all simuPOP objects and their properties. Selection of an object (recombinator in this example) would highlight it and allow users to modify its properties. The right bottom panel displays various outputs.

Because the full power of simuPOP can only be utilized through scripts, it is a not a good idea to remove simuPOP’s scripting interface and replace it with a comprehensive GUI. However, for a large number of potential users the scripting interface of simuPOP is the biggest obstacle for the use of this program. Even for computer-savvy users, writing a complex evolutionary scenario could be time-consuming. The next big thing for the development of simuPOP will be a simuPOP designer that allows users to create an evolutionary scenario interactively, using a friendly graphical user interface.

The core of this designer will be a collection of objects that represents an evolutionary scenario, which includes parameters, demographic models, populations, simulators and operators. A GUI will be provided to create and modify this scenario. This GUI works more or less like a GUI builder (Boa of wxPython or Qt Designer) where an evolutionary scenario could be created interactively by adding various components from a toolbox. All components are listed and are displayed visually. Selection of a component would highlight it so that users could view and modify its properties.

Evolutionary scenarios created by this designer will be saved and loaded in an XML format. A simuPOP script will be generated for each scenario although different versions of simuPOP may produce different scripts to make use of new simuPOP features. This script could be executed directly within this designer, with visual feedback for applied operators and population changes. It could also be exported to be executed separately, and be modified to implement more complex logics or develop its own user interface. This simuPOP designer is likely to be implemented in wxPython although I will investigate the possibility of using pyQt4 because Qt provides more functions (such as XML support) and has recently been released under a GPL license.

A prototype has been created to demonstrate the ideas. Because the development of this tool will be a long and complex process, any help from the user community will be greatly appreciated. Please feel free to send your ideas to me or to the Mailing List.