Package dadi

For examples of dadi's usage, see the examples directory in the source distribution.

Documentation of all methods can be found in doc/api/index.html of the source distribution.

Expand source code
"""
For examples of dadi's usage, see the examples directory in the source
distribution.

Documentation of all methods can be found in doc/api/index.html of the source
distribution.
"""
import logging
logging.basicConfig()

from . import Demographics1D, Demographics2D, Inference, Integration
from . import Misc, Numerics, PhiManip, Spectrum_mod, tridiag, Godambe

# We do it this way so it's easier to reload.
Spectrum = Spectrum_mod.Spectrum

# Protect import of Plotting in case matplotlib not installed.
try:
    from . import Plotting
except ImportError:
    pass

# When doing arithmetic with Spectrum objects (which are masked arrays), we
# often have masked values which generate annoying arithmetic warnings. Here
# we tell numpy to ignore such warnings. This puts greater onus on the user to
# check results, but for our use case I think it's the better default.
import numpy
numpy.seterr(all='ignore')

def cuda_enabled(toggle=None):
    """
    Enable or disable cuda execution
    """
    if toggle is None:
        return Integration.cuda_enabled
    elif toggle == True:
        try:
            from . import cuda
            Integration.cuda_enabled = True
            return True
        except:
            print("Failed to import dadi.cuda")
            return False
    elif toggle == False:
        Integration.cuda_enabled = False
        return False
    else:
        raise ValueError("toggle must be True, False, or None")

__pdoc__ = {'cuda':False}

def pts_to_RAM(pts, P):
    """
    Approximate RAM usage for a given grid points and number of populations 

    pts: Grid points setting
    P: Number of populations
    """
    return 8*4*pts**P / 1024**3

def RAM_to_pts(RAM, P):
    """
    Approximate maximum grid points given the number of populations and available RAM

    pts: Grid points setting
    P: Number of populations
    """
    return int((RAM*1024**3/(8*4))**(1./P))

def citation():
    """
    Print citation information for dadi codebase.
    """
    print("""
If you find dadi useful in your research, please cite:
RN Gutenkunst, RD Hernandez, SH Williamson, CD Bustamante "Inferring the joint demographic history of multiple populations from multidimensional SNP data" PLoS Genetics 5:e1000695 (2009)

If you find the Godambe Information Matrix methods useful, please cite:
AJ Coffman, P Hsieh, S Gravel, RN Gutenkunst "Computationally efficient composite likelihood statistics for demographic inference" Molecular Biology and Evolution 33:591 (2016)

If you find the DFE inference methods useful, please cite:
BY Kim, CD Huber, KE Lohmueller "Inference of the Distribution of Selection Coefficients for New Nonsynonymous Mutations Using Large Samples" Genetics 206:345 (2017)

If you find the triallelic methods useful, please cite:
AP Ragsdale, AJ Coffman, P Hsieh, TJ Struck, RN Gutenkunst "Triallelic population genomics for inferring correlated fitness effects of same site nonsynonymous mutations" Genetics 203:513 (2016)

If you find the two-locus methods useful, please cite:
AP Ragsdale, RN Gutenkunst "Inferring demographic history using two-locus statistics" Genetics 206:1037 (2017)
""")

Sub-modules

dadi.DFE

Fitting Distributions of Fitness Effects to population genomic data, both single-population and joint.

dadi.Demes
dadi.Demographics1D

Single population demographic models.

dadi.Demographics2D

Two population demographic models.

dadi.Godambe

Parameter uncertainties and likelihood ratio tests using Godambe information.

dadi.Inference

Comparison and optimization of model spectra to data.

dadi.Integration

Functions for integrating population frequency spectra.

dadi.Misc

Miscellaneous utility functions. Including ms simulation.

dadi.NLopt_mod
dadi.Numerics

Numerically useful functions, including extrapolation and default grid.

dadi.PhiManip

Manipulating population frequency spectra phi. e.g. population splittings and admixture

dadi.Plotting

Routines for Plotting comparisons between model and data …

dadi.Spectrum_mod

Contains Spectrum object, which represents frequency spectra.

dadi.Triallele

Modeling triallelic data.

dadi.TwoLocus

Fitting models to data summarized by pairs of loci, incorporating both allele frequencies and linkage disequilibrium

dadi.integration_c

This module 'integration_c' is auto-generated with f2py (version:1.21.2).

Functions

phi = implicit_1Dx(phi,xx,nu,gamma,h,beta,dt,use_delj_trick) …

dadi.tridiag

This module 'tridiag' is auto-generated with f2py (version:1.21.2).

Functions

u = tridiag(a,b,c,r) u = tridiag_fl(a,b,c,r) .

Functions

def RAM_to_pts(RAM, P)

Approximate maximum grid points given the number of populations and available RAM

pts: Grid points setting P: Number of populations

Expand source code
def RAM_to_pts(RAM, P):
    """
    Approximate maximum grid points given the number of populations and available RAM

    pts: Grid points setting
    P: Number of populations
    """
    return int((RAM*1024**3/(8*4))**(1./P))
def citation()

Print citation information for dadi codebase.

Expand source code
def citation():
    """
    Print citation information for dadi codebase.
    """
    print("""
If you find dadi useful in your research, please cite:
RN Gutenkunst, RD Hernandez, SH Williamson, CD Bustamante "Inferring the joint demographic history of multiple populations from multidimensional SNP data" PLoS Genetics 5:e1000695 (2009)

If you find the Godambe Information Matrix methods useful, please cite:
AJ Coffman, P Hsieh, S Gravel, RN Gutenkunst "Computationally efficient composite likelihood statistics for demographic inference" Molecular Biology and Evolution 33:591 (2016)

If you find the DFE inference methods useful, please cite:
BY Kim, CD Huber, KE Lohmueller "Inference of the Distribution of Selection Coefficients for New Nonsynonymous Mutations Using Large Samples" Genetics 206:345 (2017)

If you find the triallelic methods useful, please cite:
AP Ragsdale, AJ Coffman, P Hsieh, TJ Struck, RN Gutenkunst "Triallelic population genomics for inferring correlated fitness effects of same site nonsynonymous mutations" Genetics 203:513 (2016)

If you find the two-locus methods useful, please cite:
AP Ragsdale, RN Gutenkunst "Inferring demographic history using two-locus statistics" Genetics 206:1037 (2017)
""")
def cuda_enabled(toggle=None)

Enable or disable cuda execution

Expand source code
def cuda_enabled(toggle=None):
    """
    Enable or disable cuda execution
    """
    if toggle is None:
        return Integration.cuda_enabled
    elif toggle == True:
        try:
            from . import cuda
            Integration.cuda_enabled = True
            return True
        except:
            print("Failed to import dadi.cuda")
            return False
    elif toggle == False:
        Integration.cuda_enabled = False
        return False
    else:
        raise ValueError("toggle must be True, False, or None")
def pts_to_RAM(pts, P)

Approximate RAM usage for a given grid points and number of populations

pts: Grid points setting P: Number of populations

Expand source code
def pts_to_RAM(pts, P):
    """
    Approximate RAM usage for a given grid points and number of populations 

    pts: Grid points setting
    P: Number of populations
    """
    return 8*4*pts**P / 1024**3