Ejemplo n.º 1
0
def sc3ei(params , ns):
#    p_misid: proportion of misidentified ancestral states
# P: proportion of sites with lower migration
# Fi: factor of migration reduction (1e-5 - 0.999)
# migration is asymmetric, scales with pop size
    nu1_1,nu2_1,nu1_2,nu2_2,T1,T2,m12,m21,Fs,P,p_misid = params
    sts = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fs = moments.Spectrum(sts)
    fs = moments.Manips.split_1D_to_2D(fs, ns[0], ns[1])
    fs.integrate([nu1_1, nu2_1], T1, m = np.array([[0, m12], [m21, 0]]))
    fs.integrate([nu1_2, nu2_2], T2, m = np.array([[0, 0], [0, 0]]))

    stsi = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fsi = moments.Spectrum(stsi)
    fsi = moments.Manips.split_1D_to_2D(fsi, ns[0], ns[1])
    fsi.integrate([nu1_1, nu2_1*Fs], T1, m = np.array([[0, m12*Fs], [m21*Fs, 0]]))
    fsi.integrate([nu1_2, nu2_2*Fs], T2, m = np.array([[0, 0], [0, 0]]))

    fs2=P*fsi+(1-P)*fs
    return (1-p_misid)*fs2 + p_misid*moments.Numerics.reverse_array(fs2)
Ejemplo n.º 2
0
def SC(params, ns):
    s, nToro, nMega, t1, t2, m12, m21 = params
    sts = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fs = moments.Spectrum(sts)
    fs = moments.Manips.split_1D_to_2D(fs, ns[0], ns[1])
    nu1_func = lambda t: s * (nToro / s)**(t / t2)
    nu2_func = lambda t: (1 - s) * (nMega / (1 - s))**(t / t2)
    nu_func = lambda t: [nu1_func(t), nu2_func(t)]
    fs.integrate([nToro, nMega], t1, dt_fac=0.01, m=np.array([[0, 0], [0, 0]]))
    fs.integrate(nu_func, t2, dt_fac=0.01, m=np.array([[0, m12], [m21, 0]]))
    return fs
Ejemplo n.º 3
0
def sc11(params, ns):
    #    p_misid: proportion of misidentified ancestral states
    nu0, nu1_2, nu2_2, T0, T, m = params

    sts = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fs = moments.Spectrum(sts)
    fs.integrate([nu0], T0)
    fs = moments.Manips.split_1D_to_2D(fs, ns[0], ns[1])
    fs.integrate([nu1_2, nu2_2], T, m=np.array([[0, m], [m, 0]]))

    return fs
def model_func(params, ns):
	t1, nu11, t2, nu21, s1, t3, nu31, nu32, m3_12, m3_21 = params
	sts = moments.LinearSystem_1D.steady_state_1D(np.sum(ns))
	fs = moments.Spectrum(sts)
	fs.integrate(tf=t1, Npop=[nu11], dt_fac=0.01)
	fs.integrate(tf=t2, Npop=[nu21], dt_fac=0.01)
	fs = moments.Manips.split_1D_to_2D(fs, ns[0], ns[1])
	nu1_func = lambda t: (s1 * nu21) * (nu31 / (s1 * nu21)) ** (t / t3)
	migs = np.array([[0, m3_12], [m3_21, 0]])
	fs.integrate(tf=t3, Npop=lambda t: [nu1_func(t), nu32], m=migs, dt_fac=0.01)
	return fs
Ejemplo n.º 5
0
def sc3ei(params, ns):
    #    p_misid: proportion of misidentified ancestral states
    nu1_1, nu2_1, nu1_2, nu2_2, nu1_3, nu2_3, T1, T2, T3, m12_3, m21_3 = params
    sts = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fs = moments.Spectrum(sts)
    fs = moments.Manips.split_1D_to_2D(fs, ns[0], ns[1])
    fs.integrate([nu1_1, nu2_1], T1, m=np.array([[0, m12_3], [m21_3, 0]]))
    fs.integrate([nu1_2, nu2_2], T2, m=np.array([[0, 0], [0, 0]]))
    fs.integrate([nu1_3, nu2_3], T3, m=np.array([[0, 0], [0, 0]]))

    return fs
Ejemplo n.º 6
0
def sc12nm(params, ns):
    #    p_misid: proportion of misidentified ancestral states
    nu0, nu1, T1, T2 = params

    sts = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fs = moments.Spectrum(sts)
    fs.integrate([nu0], T1)
    fs.integrate([nu1], T2)
    fs = moments.Manips.split_1D_to_2D(fs, ns[0], ns[1])

    return fs
Ejemplo n.º 7
0
 def test_expected_sfs(self):
     pop_id = 'root'
     ns0 = 20
     nu = 1.
     theta = 1.0
     fs_moments = moments.Spectrum(
         moments.LinearSystem_1D.steady_state_1D(ns0, gamma=0, h=0.5),
         pop_ids=[pop_id])
     fs = demography.integration.moments_fs_root_equilibrium(ns0, nu, theta, pop_id)
     self.assertTrue(np.allclose(fs_moments, fs))
     self.assertTrue(fs.pop_ids == [pop_id])
Ejemplo n.º 8
0
def sc11(params, ns):
    #    p_misid: proportion of misidentified ancestral states
    nu0, nu1_2, nu2_2, T0, T, m12_2, m21_2, p_misid = params

    sts = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fs = moments.Spectrum(sts)
    fs.integrate([nu0], T0)
    fs = moments.Manips.split_1D_to_2D(fs, ns[0], ns[1])
    fs.integrate([nu1_2, nu2_2], T, m=np.array([[0, m12_2], [m21_2, 0]]))

    return (1 - p_misid) * fs + p_misid * moments.Numerics.reverse_array(fs)
Ejemplo n.º 9
0
    def test_marginalize(self):
        ns = (7, 8, 6)

        fs = moments.Spectrum(numpy.random.uniform(size=ns))
        folded = fs.fold()

        marg1 = fs.marginalize([1])
        # Do manual marginalization.
        manual = moments.Spectrum(fs.data.sum(axis=1))

        # Check that these are equal in the unmasked entries.
        self.assert_(
            numpy.allclose(numpy.where(marg1.mask, 0, marg1.data),
                           numpy.where(manual.mask, 0, manual.data)))

        # Check folded Spectrum objects. I should get the same result if I
        # marginalize then fold, as if I fold then marginalize.
        mf1 = marg1.fold()
        mf2 = folded.marginalize([1])
        self.assert_(numpy.allclose(mf1, mf2))
Ejemplo n.º 10
0
def sc12iml(params, ns):
    #    p_misid: proportion of misidentified ancestral states
    nu0, nu1_2, nu2_2, nu1_3, nu2_3, T1, T2, T3, m, mi, m12_3, m21_3, m12_3i, m21_3i, P = params

    sts = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fs = moments.Spectrum(sts)
    fs.integrate([nu0], T1)
    fs = moments.Manips.split_1D_to_2D(fs, ns[0], ns[1])
    fs.integrate([nu1_2, nu2_2], T2, m=np.array([[0, m], [m, 0]]))
    fs.integrate([nu1_3, nu2_3], T3, m=np.array([[0, m12_3], [m21_3, 0]]))

    stsi = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fsi = moments.Spectrum(stsi)
    fsi.integrate([nu0], T1)
    fsi = moments.Manips.split_1D_to_2D(fsi, ns[0], ns[1])
    fsi.integrate([nu1_2, nu2_2], T2, m=np.array([[0, mi], [mi, 0]]))
    fsi.integrate([nu1_3, nu2_3], T3, m=np.array([[0, m12_3i], [m21_3i, 0]]))

    fs2 = P * fsi + (1 - P) * fs
    return fs2
Ejemplo n.º 11
0
def sc12nm(params , ns):
#    p_misid: proportion of misidentified ancestral states
# P: proportion of sites with lower Ne
# Fs: factor of Ne reduction (1e-5 - 0.999)
    nu0,nu1,T1,T2,Fs,P = params

    sts = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fs = moments.Spectrum(sts)
    fs.integrate([nu0], T1)
    fs.integrate([nu1], T2)
    fs = moments.Manips.split_1D_to_2D(fs, ns[0], ns[1])

    stsi = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fsi = moments.Spectrum(sts)
    fsi.integrate([nu0*Fs], T1)
    fsi.integrate([nu1*Fs], T2)
    fsi = moments.Manips.split_1D_to_2D(fsi, ns[0], ns[1])

    fs2=P*fsi+(1-P)*fs
    return fs2
Ejemplo n.º 12
0
def sc3ei(params, ns):
    #    p_misid: proportion of misidentified ancestral states
    # Pi: proportion of sites with lower migration
    # Fi: factor of migration reduction (1e-5 - 0.999)
    # Ps: proportion of sites with lower Ne
    # Fs: factor of Ne reduction (0.1 - 0.999)
    # migration is asymmetric, scales with pop size
    nu1_1, nu2_1, nu1_2, nu2_2, T1, T2, m12, m21, Fi, Pi, Fs, Ps = params
    sts = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fs = moments.Spectrum(sts)
    fs = moments.Manips.split_1D_to_2D(fs, ns[0], ns[1])
    fs.integrate([nu1_1, nu2_1], T1, m=np.array([[0, m12], [m21, 0]]))
    fs.integrate([nu1_2, nu2_2], T2, m=np.array([[0, 0], [0, 0]]))

    stsi = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fsi = moments.Spectrum(stsi)
    fsi = moments.Manips.split_1D_to_2D(fsi, ns[0], ns[1])
    fsi.integrate([nu1_1, nu2_1],
                  T1,
                  m=np.array([[0, m12 * Fi], [m21 * Fi, 0]]))
    fsi.integrate([nu1_2, nu2_2], T2, m=np.array([[0, 0], [0, 0]]))

    stsis = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fsis = moments.Spectrum(stsis)
    fsis = moments.Manips.split_1D_to_2D(fsis, ns[0], ns[1])
    fsis.integrate([nu1_1 * Fs, nu2_1 * Fs],
                   T1,
                   m=np.array([[0, m12 * Fi * Fs], [m21 * Fi * Fs, 0]]))
    fsis.integrate([nu1_2 * Fs, nu2_2 * Fs], T2, m=np.array([[0, 0], [0, 0]]))

    stss = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fss = moments.Spectrum(stss)
    fss = moments.Manips.split_1D_to_2D(fss, ns[0], ns[1])
    fss.integrate([nu1_1 * Fs, nu2_1 * Fs],
                  T1,
                  m=np.array([[0, m12 * Fs], [m21 * Fs, 0]]))
    fss.integrate([nu1_2 * Fs, nu2_2 * Fs], T2, m=np.array([[0, 0], [0, 0]]))

    fs2 = Pi * (1 - Ps) * fsi + Ps * (1 - Pi) * fss + Pi * Ps * fsis + (
        1 - Pi) * (1 - Ps) * fs
    return fs2
Ejemplo n.º 13
0
    def test_pickle(self):
        """
        Saving spectrum to file.
        """
        comments = ['comment 1', 'comment 2']
        filename = 'test.p'
        data = numpy.random.rand(3, 3)

        fs = moments.Spectrum(data)

        pickle.dump(fs, open(filename, "wb"))
        os.remove(filename)
Ejemplo n.º 14
0
def s12nm(params , ns):
#    p_misid: proportion of misidentified ancestral states
# P: proportion of sites with lower Ne
# Fs: factor of Ne reduction (1e-5 - 0.999)
    nu1,nu1_2,nu2_2,T1,T2 = params
    sts = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fs = moments.Spectrum(sts)
    fs.integrate([nu1], T1)
    fs = moments.Manips.split_1D_to_2D(fs, ns[0], ns[1])
    fs.integrate([nu1_2, nu2_2], T2, m = np.array([[0, 0], [0, 0]]))

    return fs
Ejemplo n.º 15
0
def sc12nm(params, ns):
    #    p_misid: proportion of misidentified ancestral states
    nu0, nu1, nu2, T1, T2, T3, p_misid = params

    sts = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fs = moments.Spectrum(sts)
    fs.integrate([nu0], T1)
    fs.integrate([nu1], T2)
    fs.integrate([nu2], T3)
    fs = moments.Manips.split_1D_to_2D(fs, ns[0], ns[1])

    return (1 - p_misid) * fs + p_misid * moments.Numerics.reverse_array(fs)
Ejemplo n.º 16
0
def model_func(params, ns):
    s1, t1, nu11, nu12, m1_12, m1_21 = params
    sts = moments.LinearSystem_1D.steady_state_1D(np.sum(ns))
    fs = moments.Spectrum(sts)
    fs = moments.Manips.split_1D_to_2D(fs, ns[0], ns[1])
    nu2_func = lambda t: ((1 - s1) * 1.0) * (nu12 / ((1 - s1) * 1.0))**(t / t1)
    migs = np.array([[0, m1_12], [m1_21, 0]])
    fs.integrate(tf=t1,
                 Npop=lambda t: [nu11, nu2_func(t)],
                 m=migs,
                 dt_fac=0.01)
    return fs
def s12IMi(params, ns):
    """
    ancestral pop size change, then
    split into two populations with exponential growth
    Migration is asymmetric and scales with the size of the source population
    p_misid: proportion of misidentified ancestral states
    Ps: proportion of sites with lower Ne
    Fs: factor of Ne reduction (1e-4 - 0.999)
   
    """
    nu0, nu1_0, nu2_0, nu1, nu2, T0, T2, m12, m21 = params
    nu1_func = lambda t: nu1_0 * (nu1 / nu1_0)**(t / T2)
    nu2_func = lambda t: nu2_0 * (nu2 / nu2_0)**(t / T2)
    nu_func = lambda t: [nu1_func(t), nu2_func(t)]
    """
    nu1s_func = lambda t: Fs*nu1_0 * (nu1/nu1_0)**(t/T2)
    nu2s_func = lambda t: Fs*nu2_0 * (nu2/nu2_0)**(t/T2)
    nus_func = lambda t: [nu1s_func(t), nu2s_func(t)]
    """
    m21_func = lambda t: m21 * nu2_func(t)
    m12_func = lambda t: m12 * nu1_func(t)
    migs = lambda t: np.array([[0, m12_func(t)], [m21_func(t), 0]])
    migs.i = lambda t: np.array([[0, Fi * m12_func(t)], [Fi * m21_func(t), 0]])

    sts = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fs = moments.Spectrum(sts)
    fs.integrate([nu0], T0)
    fs = moments.Manips.split_1D_to_2D(fs, ns[0], ns[1])
    #    fs.integrate([nu1_0, nu2_0], T1, m = np.array([[0, 0], [0, 0]]))
    fs.integrate(nu_func, T2, dt_fac=0.01, m=migs)
    """     
    stsi = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fsi = moments.Spectrum(stsi)
    fsi.integrate([nu0], T0)
    fsi = moments.Manips.split_1D_to_2D(fsi, ns[0], ns[1])
#    fsi.integrate([nu1_0, nu2_0], T1, m = np.array([[0, 0], [0, 0]]))    
    fsi.integrate(nu_func, T2, dt_fac=0.01, m=migs.i)
    stss = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fss = moments.Spectrum(stss)
    fss.integrate([nu0*Fs], T0)
    fss = moments.Manips.split_1D_to_2D(fss, ns[0], ns[1])
 #   fss.integrate([Fs*nu1_0, Fs*nu2_0], T1, m = np.array([[0, 0], [0, 0]]))    
    fss.integrate(nus_func, T2, dt_fac=0.01, m=migs)
    
    stsis = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fsis = moments.Spectrum(stsis)
    fsis.integrate([nu0*Fs], T0)
    fsis = moments.Manips.split_1D_to_2D(fsis, ns[0], ns[1])
    fsis.integrate([Fs*nu1_0, Fs*nu2_0], T1, m = np.array([[0, 0], [0, 0]]))    
    fsis.integrate(nus_func, T2, dt_fac=0.01, m=migs.i)
    """
    #    fs2=Ps*fsi+(1-Pi)*fs
    return fs
def model_func(params, ns):
    """
    Some model
    """
    nuB, nuF, TB, TF = params
    sts = moments.LinearSystem_1D.steady_state_1D(ns[0])
    fs = moments.Spectrum(sts)

    fs.integrate(tf=TB, Npop=[nuB])
    fs.integrate(tf=TF, Npop=[nuF])

    return fs
Ejemplo n.º 19
0
def sc3ei(params , ns):
#    p_misid: proportion of misidentified ancestral states
# P: proportion of sites with lower Ne
# Fs: factor of Ne reduction (1e-5 - 0.999)
    nu1,nu1_2,nu2_2,T1,T2,m12,m21,p_misid = params
    sts = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fs = moments.Spectrum(sts)
    fs.integrate([nu1], T1)
    fs = moments.Manips.split_1D_to_2D(fs, ns[0], ns[1])
    fs.integrate([nu1_2, nu2_2], T2, m = np.array([[0, m12], [m21, 0]]))

    return (1-p_misid)*fs + p_misid*moments.Numerics.reverse_array(fs)
def SI_2N(params, ns):
    """
    nu1= pop size for North Sea
	nu2=pop size for Baltic Sea 
	T1= time of split
	hrf= Hill-Robertson factor (i.e. average Ne for regions under linked selection as a proportion of "neutral" Ne)
	Q= proportion of the genome under linked selection 
    """
    nu1,nu2,T1,hrf,Q = params
# calculate the spectrum for neutral portion of the genome
    sts = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fs = moments.Spectrum(sts)
    fs = moments.Manips.split_1D_to_2D(fs, ns[0], ns[1])
    fs.integrate([nu1, nu2], T1, dt_fac=0.01, m=numpy.array([[0, 0], [0, 0]]))
# calculate the spectrum for lower Ne regions of the genome
    stsn2 = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fsn2 = moments.Spectrum(stsn2)
    fsn2 = moments.Manips.split_1D_to_2D(fsn2, ns[0], ns[1])
    fsn2.integrate([nu1*hrf, nu2*hrf], T1, dt_fac=0.01, m=numpy.array([[0, 0], [0, 0]]))
    fs2= Q*fsn2+(1-Q)*fs
    return fs2
Ejemplo n.º 21
0
def sc3ei(params, ns):
    #    p_misid: proportion of misidentified ancestral states
    # P: proportion of sites with lower migration
    # Fi: factor of migr reduction (1e-5 - 0.999)
    nu1, nu1_2, nu2_2, T1, T2, m12, m21, Fi, P = params
    sts = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fs = moments.Spectrum(sts)
    fs.integrate([nu1], T1)
    fs = moments.Manips.split_1D_to_2D(fs, ns[0], ns[1])
    fs.integrate([nu1_2, nu2_2], T2, m=np.array([[0, m12], [m21, 0]]))

    stsi = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fsi = moments.Spectrum(stsi)
    fsi.integrate([nu1], T1)
    fsi = moments.Manips.split_1D_to_2D(fsi, ns[0], ns[1])
    fsi.integrate([nu1_2, nu2_2],
                  T2,
                  m=np.array([[0, m12 * Fi], [m21 * Fi, 0]]))

    fs2 = P * fsi + (1 - P) * fs
    return fs2
Ejemplo n.º 22
0
def AM_b_2M(params, ns):
    """
    nu1= pop size for North Sea
	s=proportion of the North Sea pop which invaded the Baltic (i.e. original bottleneck)
	nu2= final size of Baltic Sea pop
	T1= time of population split
	T2= time of second epoch of migration and population growth
	m12= migration rate from North Sea to Baltic
	m21= migration rate from Baltic Sea to North Sea
	i1= reduction in migration rate for Islands from the Baltic to North Sea 
	i2= reduction in migration rate for Islands from the North Sea to Baltic
	P= proportion of the genome made up of "islands"
    O= Proportion of miss-polirized SNPs  
    """
    nu1, nu2, s, T1, T2, m12, m21, i1, i2, P, O = params
    nu2_0 = nu1 * s
    nu2_func = lambda t: nu2_0 * (nu2 / nu2_0)**(t / T2)
    nu_func = lambda t: [nu1, nu2_func(t)]
    # calculate the spectrum for neutral portion of the genome
    sts = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fsO = moments.Spectrum(sts)
    fsO = moments.Manips.split_1D_to_2D(fsO, ns[0], ns[1])
    fsO.integrate([nu1, nu1 * s],
                  T1,
                  dt_fac=0.01,
                  m=numpy.array([[0, m12], [m21, 0]]))
    fsO.integrate(nu_func, T2, dt_fac=0.01, m=numpy.array([[0, 0], [0, 0]]))
    fsM = moments.Numerics.reverse_array(fsO)
    # calculate teh spectrum for genomic islands
    stsi = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fsiO = moments.Spectrum(stsi)
    fsiO = moments.Manips.split_1D_to_2D(fsiO, ns[0], ns[1])
    fsiO.integrate([nu1, nu1 * s],
                   T1,
                   dt_fac=0.01,
                   m=numpy.array([[0, m12 * i2], [m21 * i1, 0]]))
    fsiO.integrate(nu_func, T2, dt_fac=0.01, m=numpy.array([[0, 0], [0, 0]]))
    fsiM = moments.Numerics.reverse_array(fsiO)
    fs2 = P * (O * fsiO + (1 - O) * fsiM) + (1 - P) * (O * fsO + (1 - O) * fsM)
    return fs2
def SI(params, ns):
    """
    nu1= pop size for North Sea
	nu2=pop size for Baltic Sea 
	T1= time of split
    """
    nu1,nu2,T1 = params

    sts = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fs = moments.Spectrum(sts)
    fs = moments.Manips.split_1D_to_2D(fs, ns[0], ns[1])
    fs.integrate([nu1, nu2], T1, dt_fac=0.01,m = numpy.array([[0, 0], [0, 0]]))
    return fs
Ejemplo n.º 24
0
def sc3ei(params, ns):
    #    p_misid: proportion of misidentified ancestral states
    # P: proportion of sites with lower migration
    # Fi: factor of migration reduction (1e-5 - 0.999)
    nu0, nu1_1, nu2_1, nu1_2, nu2_2, T0, T1, T2, m12_1, m21_1, m12_2, m21_2 = params
    sts = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fs = moments.Spectrum(sts)
    fs.integrate([nu0], T0)
    fs = moments.Manips.split_1D_to_2D(fs, ns[0], ns[1])
    fs.integrate([nu1_1, nu2_1], T1, m=np.array([[0, m12_1], [m21_1, 0]]))
    fs.integrate([nu1_2, nu2_2], T2, m=np.array([[0, m12_2], [m21_2, 0]]))

    return fs
Ejemplo n.º 25
0
def IM(params, ns):
    s, nPer, nAlb, tSplit, m12, m21 = params
    sts = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fs = moments.Spectrum(sts)
    fs = moments.Manips.split_1D_to_2D(fs, ns[0], ns[1])
    nu1_func = lambda t: s * (nPer / s)**(t / tSplit)
    nu2_func = lambda t: (1 - s) * (nAlb / (1 - s))**(t / tSplit)
    nu_func = lambda t: [nu1_func(t), nu2_func(t)]
    fs.integrate(nu_func,
                 tSplit,
                 dt_fac=0.01,
                 m=np.array([[0, m12], [m21, 0]]))
    return fs
Ejemplo n.º 26
0
    def test_folded_slices(self):
        ns = (3, 4)
        fs1 = moments.Spectrum(numpy.random.rand(*ns))
        folded1 = fs1.fold()

        self.assert_(fs1[:].folded == False)
        self.assert_(folded1[:].folded == True)

        self.assert_(fs1[0].folded == False)
        self.assert_(folded1[1].folded == True)

        self.assert_(fs1[:, 0].folded == False)
        self.assert_(folded1[:, 1].folded == True)
Ejemplo n.º 27
0
def SC_2M(params, ns):
    """
	nu1= pop size for North Sea 
	nu2= pop size for the Baltic Sea
	T1= time of population split
	T2= time of secondary contact
	i1= reduction in migration rate for Islands from the Baltic to North Sea 
	i2= reduction in migration rate for Islands from the North Sea to Baltic
	P= proportion of the genome made up of "islands"
    O= Proportion of miss-polirized SNPs  
    """
    nu1, nu2, T1, T2, m12, m21, i1, i2, P, O = params

    # calculate the spectrum for neutral portion of the genome
    sts = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fsO = moments.Spectrum(sts)
    fsO = moments.Manips.split_1D_to_2D(fsO, ns[0], ns[1])
    fsO.integrate([nu1, nu2], T1, dt_fac=0.01, m=numpy.array([[0, 0], [0, 0]]))
    fsO.integrate([nu1, nu2],
                  T2,
                  dt_fac=0.01,
                  m=numpy.array([[0, m12], [m21, 0]]))
    fsM = moments.Numerics.reverse_array(fsO)

    # calculate the spectrum from genomic islands
    stsi = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fsiO = moments.Spectrum(stsi)
    fsiO = moments.Manips.split_1D_to_2D(fsiO, ns[0], ns[1])
    fsiO.integrate([nu1, nu2],
                   T1,
                   dt_fac=0.01,
                   m=numpy.array([[0, 0], [0, 0]]))
    fsiO.integrate([nu1, nu2],
                   T2,
                   dt_fac=0.01,
                   m=numpy.array([[0, m12 * i2], [m21 * i1, 0]]))
    fsiM = moments.Numerics.reverse_array(fsiO)
    fs2 = P * (O * fsiO + (1 - O) * fsiM) + (1 - P) * (O * fsO + (1 - O) * fsM)
    return fs2
Ejemplo n.º 28
0
def make_plot(sim_fs, integrated_fs, args, initial_seed):
    ndemes = len(integrated_fs.shape)

    outfile = os.path.basename(args.yaml).replace(".yml", "_residuals.png")

    fig = plt.Figure()

    if ndemes == 2:
        moments_sim_fs = moments.Spectrum(sim_fs.todense())
        moments.Plotting.plot_2d_comp_Poisson(
            integrated_fs,
            moments_sim_fs,
            show=False,
            fig_num=plt.gcf().number,
        )
        # simfs = os.path.basename(args.yaml).replace("yml", "mean_sim_fs")
        # moments_sim_fs.to_file(simfs)
        # simfs = os.path.basename(args.yaml).replace("yml", "integrated_fs")
        # integrated_fs.to_file(simfs)
    elif ndemes == 1:
        moments_sim_fs = moments.Spectrum(sim_fs.data[:-1])
        moments.Plotting.plot_1d_comp_Poisson(
            integrated_fs[:-1],
            moments_sim_fs,
            show=False,
            fig_num=plt.gcf().number,
        )
        # simfs = os.path.basename(args.yaml).replace("yml", "mean_sim_fs")
        # moments_sim_fs.to_file(simfs)
        # simfs = os.path.basename(args.yaml).replace("yml", "integrated_fs")
        # integrated_fs.to_file(simfs)
    else:
        raise NotImplementedError(
            f"Plotting not implemented for {ndemes} demes.")

    plt.gcf().suptitle(f"No. reps = {args.nreps}, seed = {initial_seed}")
    plt.gcf().tight_layout()
    plt.savefig(outfile)
    return outfile
Ejemplo n.º 29
0
def sc3ei(params, ns):
    #    p_misid: proportion of misidentified ancestral states
    # P: proportion of sites with lower migration
    # Fi: factor of migr reduction (1e-5 - 0.999)
    nu1, nu1_2, nu2_2, T1, T2, m12, m21, Fi, Pi, Fs, Ps, p_misid = params
    sts = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fs = moments.Spectrum(sts)
    fs.integrate([nu1], T1)
    fs = moments.Manips.split_1D_to_2D(fs, ns[0], ns[1])
    fs.integrate([nu1_2, nu2_2], T2, m=np.array([[0, m12], [m21, 0]]))

    stsi = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fsi = moments.Spectrum(stsi)
    fsi.integrate([nu1], T1)
    fsi = moments.Manips.split_1D_to_2D(fsi, ns[0], ns[1])
    fsi.integrate([nu1_2, nu2_2],
                  T2,
                  m=np.array([[0, m12 * Fi], [m21 * Fi, 0]]))

    stsis = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fsis = moments.Spectrum(stsis)
    fsis.integrate([nu1], T1)
    fsis = moments.Manips.split_1D_to_2D(fsis, ns[0], ns[1])
    fsis.integrate([nu1_2 * Fs, nu2_2 * Fs],
                   T2,
                   m=np.array([[0, m12 * Fi * Fs], [m21 * Fi * Fs, 0]]))

    stss = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fss = moments.Spectrum(stss)
    fss.integrate([nu1], T1)
    fss = moments.Manips.split_1D_to_2D(fss, ns[0], ns[1])
    fss.integrate([nu1_2 * Fs, nu2_2 * Fs],
                  T2,
                  m=np.array([[0, m12 * Fs], [m21 * Fs, 0]]))

    fs2 = Pi * (1 - Ps) * fsi + Ps * (1 - Pi) * fss + Pi * Ps * fsis + (
        1 - Pi) * (1 - Ps) * fs
    return (1 - p_misid) * fs2 + p_misid * moments.Numerics.reverse_array(fs2)
Ejemplo n.º 30
0
def SC_b_2N(params, ns):
    """
    nu1= pop size for North Sea
	s=proportion of the North Sea pop which invaded the Baltic (i.e. original bottleneck)
	nu2= final size of Baltic Sea pop
	T1= time of population split
	T2= time of secondary contact
	m12= migration rate from North Sea to Baltic
	m21= migration rate from Baltic Sea to North Sea
	hrf= Hill-Robertson factor (i.e. average Ne for regions under selection as a proportion of "neutral" Ne)
	Q= proportion of the genome under selection
    """
    nu1, nu2, s, T1, T2, m12, m21, hrf, Q = params
    nu2_0 = nu1 * s
    nu2_func = lambda t: nu2_0 * (nu2 / nu2_0)**(t / T2)
    nu_func = lambda t: [nu1, nu2_func(t)]
    nu2hrf_func = lambda t: nu2_0 * (nu2 / nu2_0)**(t / T2) * hrf
    nuhrf_func = lambda t: [nu1 * hrf, nu2hrf_func(t)]
    # calculate the spectrum for neutral portion of the genome
    sts = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fs = moments.Spectrum(sts)
    fs = moments.Manips.split_1D_to_2D(fs, ns[0], ns[1])
    fs.integrate([nu1, nu1 * s], T1, m=np.array([[0, 0], [0, 0]]))
    fs.integrate(nu_func, T2, dt_fac=0.01, m=np.array([[0, m12], [m21, 0]]))
    # calculate the spectrum from low Ne parts of the genome
    stsn2 = moments.LinearSystem_1D.steady_state_1D(ns[0] + ns[1])
    fsn2 = moments.Spectrum(stsn2)
    fsn2 = moments.Manips.split_1D_to_2D(fsn2, ns[0], ns[1])
    fsn2.integrate([nu1 * hrf, nu1 * s * hrf],
                   T1,
                   m=np.array([[0, 0], [0, 0]]))
    fsn2.integrate(nuhrf_func,
                   T2,
                   dt_fac=0.01,
                   m=np.array([[0, m12], [m21, 0]]))

    fs2 = Q * fsn2 + (1 - Q) * fs
    return fs2