コード例 #1
0
                                                      (0.4, '#fcae91'),
                                                      (0.6, '#fb6a4a'),
                                                      (0.8, '#de2d26'),
                                                      (1.0, '#a50f15')],
                                             gamma=0.5)
cmap_red.set_bad('w', alpha=0.0)

d2r = np.pi / 180.
r2d = 180. / np.pi

f_lon, f_lat = 30., 30.
f_kappa = 20.
w_lon, w_lat = 90., 70.
w_kappa = -5.

vmf = mcplates.VonMisesFisher('vmf', lon_lat=(f_lon, f_lat), kappa=f_kappa)
watson = mcplates.WatsonGirdle('watson', lon_lat=(w_lon, w_lat), kappa=w_kappa)
uniform = mcplates.VonMisesFisher('watson', lon_lat=(0, 0), kappa=0.)
vmf_samples = np.array([vmf.random() for i in range(50)])
wat_samples = np.array([watson.random() for i in range(200)])
u_samples = np.array([uniform.random() for i in range(200)])

reg_lat = np.linspace(-np.pi / 2., np.pi / 2., 181,
                      endpoint=True) * 180. / np.pi
reg_lon = np.linspace(0., 2. * np.pi, 361, endpoint=True) * 180. / np.pi
mesh_lon, mesh_lat = np.meshgrid(reg_lon, reg_lat)
uniform_vals = np.empty_like(mesh_lon)
fisher_vals = np.empty_like(mesh_lon)
watson_vals = np.empty_like(mesh_lon)
for i, lat in enumerate(reg_lat):
    for j, lon in enumerate(reg_lon):
コード例 #2
0
import numpy as np
import matplotlib.pyplot as plt
import pymc
import cartopy.crs as ccrs

import mcplates

d2r = np.pi / 180.
r2d = 180. / np.pi

mu_lat = 30.
mu_lon = 30.
kappa = 50.0

vmf = mcplates.VonMisesFisher('vmf', lon_lat=(mu_lon, mu_lat), kappa=kappa)
samples = np.array([vmf.random() for i in range(100)])
print samples
phi = samples[:, 0]
theta = samples[:, 1]

ax = plt.axes(projection=ccrs.Orthographic(30, 30))
ax.scatter(phi, theta, transform=ccrs.PlateCarree())
ax.gridlines()
ax.set_global()
plt.show()
コード例 #3
0
def generate_data_samples():
    if os.path.isfile('euler_pole_samples.txt'):
        data = np.loadtxt('euler_pole_samples.txt')
        lon_samples = data[:, 0]
        lat_samples = data[:, 1]
        val_samples = data[:, 2]
    else:

        plate_id_to_code = {
            0: 'an',
            1: 'au',
            2: 'nb',
            3: 'pa',
            4: 'eu',
            5: 'na',
            6: 'nz',
            7: 'co',
            8: 'ca',
            9: 'ar',
            10: 'ps',
            11: 'sa',
            12: 'in',
            13: 'jf'
        }

        morvel = pd.read_table("NNR-MORVEL56.txt",
                               delim_whitespace=True).set_index('Abbreviation')
        plate_data = np.loadtxt("WhichPlate.dat")
        vals = plate_data[:, 2]

        nlons = 256
        nlats = 128
        dlon = 360. / nlons
        dlat = 180. / nlats

        vals = vals.reshape(nlats, nlons)

        n_samples = 1000
        val_samples = np.zeros(n_samples)
        lon_samples = np.zeros(n_samples)
        lat_samples = np.zeros(n_samples)

        uniform_lon_lat_sampler = mcplates.VonMisesFisher('lon_lat_sampler',
                                                          lon_lat=(0., 0.),
                                                          kappa=0.)

        i = 0
        while i < n_samples:
            sample = uniform_lon_lat_sampler.random()
            lon = sample[0]
            lat = sample[1]
            try:
                lon_index = int(np.floor(lon / dlon))
                lat_index = int(np.floor((90. - lat) / dlat))
                plate_id = vals[lat_index, lon_index]
                plate_code = plate_id_to_code[plate_id]

                elat = morvel['Latitude'][plate_code]
                elon = morvel['Longitude'][plate_code]

                evec = mcplates.rotations.spherical_to_cartesian(
                    elon, elat, 1.)
                x = mcplates.rotations.spherical_to_cartesian(lon, lat, 1.)

                lon_samples[i] = lon
                lat_samples[i] = lat
                val_samples[i] = np.arccos(np.dot(x, evec)) * 180. / np.pi
                i += 1
            except KeyError:
                continue
        np.savetxt('euler_pole_samples.txt',
                   list(zip(lon_samples, lat_samples, val_samples)))

    return lon_samples, lat_samples, val_samples
コード例 #4
0
    euler_pole_1 = mcplates.EulerPole(euler_1[0], euler_1[1], rate_1)
    euler_pole_2 = mcplates.EulerPole(euler_2[0], euler_2[1], rate_2)
    start_pole = mcplates.PaleomagneticPole(start[0], start[1], age=time)

    if time <= switchpoint:
        start_pole.rotate(euler_pole_1, euler_pole_1.rate * time)
    else:
        start_pole.rotate(euler_pole_1, euler_pole_1.rate * switchpoint)
        start_pole.rotate(euler_pole_2,
                          euler_pole_2.rate * (time - switchpoint))

    lon_lat = np.array([start_pole.longitude, start_pole.latitude])
    return lon_lat


euler_1 = mcplates.VonMisesFisher('euler_1', lon_lat=(0., 0.), kappa=0.00)
rate_1 = pymc.Exponential('rate_1', 1.)
euler_2 = mcplates.VonMisesFisher('euler_2', lon_lat=(0., 0.), kappa=0.00)
rate_2 = pymc.Exponential('rate_2', 1.)

start = mcplates.VonMisesFisher('start',
                                lon_lat=lon_lats[0],
                                kappa=mcplates.kappa_from_two_sigma(10.))
switchpoint = pymc.Uniform('switchpoint', ages[0], ages[-1])

model_vars = [euler_1, rate_1, euler_2, rate_2, start, switchpoint]

for i in range(len(ages)):
    time = pymc.Normal('t' + str(i), mu=ages[i], tau=age_taus[i])
    lon_lat = pymc.Lambda('ll'+str(i), lambda st=start, e1=euler_1, r1=rate_1, e2=euler_2, r2=rate_2, sw=switchpoint, t=time : \
                                              pole_position(st, e1, r1, e2, r2, sw, t),\