コード例 #1
0
 def test_tOverlap(self):
     """tOverlap should return a known value for known input"""
     real_ans = ([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
                  11, 12, 13, 14, 15, 16, 17, 18, 19],
                 [20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
                  30, 31, 32, 33, 34, 35, 36, 37, 38, 39])
     ans = tb.tOverlap(self.dt_a, self.dt_b)
     self.assertEqual(real_ans, ans)
     self.assertEqual( (None, None), tb.tOverlap(self.dt_a, self.dt_b2) )
コード例 #2
0
 def test_tOverlap(self):
     """tOverlap should return a known value for known input"""
     real_ans = ([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
                  11, 12, 13, 14, 15, 16, 17, 18, 19],
                 [20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
                  30, 31, 32, 33, 34, 35, 36, 37, 38, 39])
     ans = tb.tOverlap(self.dt_a, self.dt_b)
     self.assertEqual(real_ans, ans)
     self.assertEqual( (None, None), tb.tOverlap(self.dt_a, self.dt_b2) )
コード例 #3
0
 def test_tOverlapSorted(self):
     """Exploit the sorting for a fast tOverlap"""
     real_ans = ([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
                  11, 12, 13, 14, 15, 16, 17, 18, 19],
                 [20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
                  30, 31, 32, 33, 34, 35, 36, 37, 38, 39])
     ans = tb.tOverlap(self.dt_a, self.dt_b, presort=True)
     numpy.testing.assert_array_equal(real_ans, ans)
コード例 #4
0
 def test_tOverlapSorted(self):
     """Exploit the sorting for a fast tOverlap"""
     real_ans = ([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
                  11, 12, 13, 14, 15, 16, 17, 18, 19],
                 [20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
                  30, 31, 32, 33, 34, 35, 36, 37, 38, 39])
     ans = tb.tOverlap(self.dt_a, self.dt_b, presort=True)
     numpy.testing.assert_array_equal(real_ans, ans)
コード例 #5
0
 def test_tOverlap_random(self):
     """Shuffle input before calling tOverlap"""
     real_ans = ([1, 5, 6, 10, 15, 16, 18, 24, 29, 30, 43,
                  46, 47, 51, 53, 55, 56, 64, 67, 74],
                 [1, 2, 6, 7, 10, 12, 13, 14, 15, 17, 18,
                  19, 24, 27, 28, 30, 32, 35, 37, 38])
     random.seed(0)
     random.shuffle(self.dt_a, lambda:round(random.random(), 9))
     random.shuffle(self.dt_b, lambda:round(random.random(), 9))
     ans = tb.tOverlap(self.dt_a, self.dt_b)
     numpy.testing.assert_array_equal(real_ans, ans)
コード例 #6
0
 def test_tOverlap_random(self):
     """Shuffle input before calling tOverlap"""
     real_ans = ([1, 5, 6, 10, 15, 16, 18, 24, 29, 30, 43,
                  46, 47, 51, 53, 55, 56, 64, 67, 74],
                 [1, 2, 6, 7, 10, 12, 13, 14, 15, 17, 18,
                  19, 24, 27, 28, 30, 32, 35, 37, 38])
     random.seed(0)
     random.shuffle(self.dt_a, lambda:round(random.random(), 9))
     random.shuffle(self.dt_b, lambda:round(random.random(), 9))
     ans = tb.tOverlap(self.dt_a, self.dt_b)
     numpy.testing.assert_array_equal(real_ans, ans)
コード例 #7
0
ファイル: toverlap_speed.py プロジェクト: yugidoge/spacepy
"""Tests for the speed of tOverlap

Copyright ©2010 Los Alamos National Security, LLC.
"""

import datetime
import random
import timeit
from spacepy import toolbox

n_iter = 500

#Very simple call to make sure everything loaded/init before timing
dt_a = [datetime.datetime(2000, 1, 1), datetime.datetime(2000, 1, 2)]
dt_b = [datetime.datetime(1999, 12, 31), datetime.datetime(2000, 1, 1)]
toolbox.tOverlap(dt_a, dt_b, presort=False)
toolbox.tOverlap(dt_a, dt_b, presort=True)

dt1 = datetime.datetime(2000, 11, 12)
dt_a = [dt1 + datetime.timedelta(hours=offset) for offset in range(10000)]
dt_b = [
    dt1 + datetime.timedelta(hours=offset) for offset in range(-5000, 5000)
]
timing = timeit.timeit('toolbox.tOverlap(dt_a, dt_b)',
                       'from __main__ import toolbox, dt_a, dt_b',
                       number=n_iter)
print('Sorted arrays took ' + str(timing) + ' seconds.')

timing = timeit.timeit('toolbox.tOverlap(dt_a, dt_b, presort=True)',
                       'from __main__ import toolbox, dt_a, dt_b',
                       number=n_iter)
コード例 #8
0
ファイル: empiricals.py プロジェクト: yugidoge/spacepy
def getPlasmaPause(ticks, model='M2002', LT='all', omnivals=None):
    """
    Plasmapause location model(s)

    CA1992 -- Carpenter, D. L., and R. R. Anderson, An ISEE/whistler 
    model of equatorial electron density in the magnetosphere, 
    J. Geophys. Res., 97, 1097, 1992.
    M2002 -- Moldwin, M. B., L. Downward, H. K. Rassoul, R. Amin, 
    and R. R. Anderson, A new model of the location of the plasmapause: 
    CRRES results, J. Geophys. Res., 107(A11), 1339, 
    doi:10.1029/2001JA009211, 2002.
    RT1970 -- Rycroft, M. J., and J. O. Thomas, The magnetospheric
    plasmapause and the electron density trough at the alouette i
    orbit, Planetary and Space Science, 18(1), 65-80, 1970


    Parameters
    ==========
    ticks : spacepy.time.Ticktock
        TickTock object of desired times
    Lpp_model : string, optional
        'CA1992' or 'M2002' (default)
        CA1992 returns the Carpenter and Anderson model,
        M2002 returns the Moldwin et al. model
    LT : int, float
        requested local time sector, 'all' is valid option
    omnivals : spacepy.datamodel.SpaceData, dict
        dict-like containing UTC (datetimes) and Kp keys

    Returns
    =======
    out : float
        Plasmapause radius in Earth radii

    Examples
    ========
    >>> import spacepy.time as spt
    >>> import spacepy.empiricals as emp
    >>> ticks = spt.tickrange('2002-01-01T12:00:00','2002-01-04T00:00:00',.25)
    >>> emp.getPlasmaPause(ticks)
    array([ 6.42140002,  6.42140002,  6.42140002,  6.42140002,  6.42140002,
        6.42140002,  6.42140002,  6.26859998,  5.772     ,  5.6574    ,
        5.6574    ])
    """
    def calcLpp(Kpmax, A, B, power=1):
        currLpp = A - B * Kpmax**power
        return currLpp

    model_list = ['CA1992', 'M2002', 'RT1970']

    if model == 'CA1992':
        if LT != 'all':
            print('No LT dependence currently supported for this model')
    if model not in model_list:
        raise ValueError("Please specify a valid model:\n{0}".format(
            ' or '.join(model_list)))

    if LT == 'all':
        parA = {'CA1992': 5.6, 'M2002': 5.39, 'RT1970': 5.64}
        parB = {'CA1992': 0.46, 'M2002': 0.382, 'RT1970': 0.78}
        priorvals = {
            'CA1992': datetime.timedelta(hours=24),
            'M2002': datetime.timedelta(hours=12),
            'RT1970': datetime.timedelta(0)
        }
        A, B = parA[model], parB[model]
        prior = priorvals[model]
    else:
        try:
            float(LT)
        except (ValueError, TypeError):
            raise ValueError(
                "Please specify a valid LT:\n'all' or a numeric type")
        parA = {
            'CA1992': [5.6] * 24,
            'M2002':
            [5.7] * 3 + [6.05] * 6 + [5.2] * 6 + [4.45] * 6 + [5.7] * 3,
            'RT1970': [5.64] * 24
        }
        parB = {
            'CA1992': [0.46] * 24,
            'M2002':
            [0.42] * 3 + [0.573] * 6 + [0.425] * 6 + [0.167] * 6 + [0.42] * 3,
            'RT1970': [0.78] * 24
        }
        priorvals = {
            'CA1992': [datetime.timedelta(hours=24)] * 24,
            'M2002': [datetime.timedelta(hours=12)] * 24,
            'RT1970': [datetime.timedelta(0)] * 24
        }
        try:
            LThr = long(LT)
        except NameError:
            LThr = int(LT)
        prior = priorvals[model][LThr]
        A, B = parA[model][LThr], parB[model][LThr]

    st, en = ticks.UTC[0] - prior, ticks.UTC[-1]
    if omnivals is None:
        omdat = om.get_omni(spt.tickrange(st, en, 1.0 / 24.0),
                            dbase='QDhourly')
    else:
        #now test for sanity of input
        try:
            assert isinstance(omnivals, dict)
        except:
            raise TypeError(
                'Not a valid input type for omnivals, expected spacepy.datamodel.SpaceData'
            )
        try:
            assert 'UTC' in omnivals
            assert 'Kp' in omnivals
        except:
            raise KeyError(
                'Required data not found in input dict-like (omnivals)')
        omdat = omnivals

    einds, oinds = tb.tOverlap([st, en], omdat['UTC'])
    utc = np.array(omdat['UTC'])[oinds]
    Kp = np.array(omdat['Kp'])[oinds]
    Lpp = np.zeros(len(ticks))

    if model == 'RT1970':
        power = 0.5
    else:
        power = 1
    for i, t1 in enumerate(ticks.UTC):
        t0 = t1 - prior
        iprevday, dum = tb.tOverlap(utc, [t0, t1])
        if iprevday:
            Kpmax = max(Kp[iprevday])
            Lpp[i] = calcLpp(Kpmax, A, B, power=power)
        else:
            Lpp[i] = np.nan

    return Lpp
コード例 #9
0
ファイル: empiricals.py プロジェクト: dpshelio/spacepy
def getPlasmaPause(ticks, model='M2002', LT='all', omnivals=None):
    """
    Plasmapause location model(s)

    CA1992 -- Carpenter, D. L., and R. R. Anderson, An ISEE/whistler 
    model of equatorial electron density in the magnetosphere, 
    J. Geophys. Res., 97, 1097, 1992.
    M2002 -- Moldwin, M. B., L. Downward, H. K. Rassoul, R. Amin, 
    and R. R. Anderson, A new model of the location of the plasmapause: 
    CRRES results, J. Geophys. Res., 107(A11), 1339, 
    doi:10.1029/2001JA009211, 2002.
    RT1970 -- Rycroft, M. J., and J. O. Thomas, The magnetospheric
    plasmapause and the electron density trough at the alouette i
    orbit, Planetary and Space Science, 18(1), 65-80, 1970


    Parameters
    ==========
    ticks : spacepy.time.Ticktock
        TickTock object of desired times
    Lpp_model : string, optional
        'CA1992' or 'M2002' (default)
        CA1992 returns the Carpenter and Anderson model,
        M2002 returns the Moldwin et al. model
    LT : int, float
        requested local time sector, 'all' is valid option
    omnivals : spacepy.datamodel.SpaceData, dict
        dict-like containing UTC (datetimes) and Kp keys

    Returns
    =======
    out : float
        Plasmapause radius in Earth radii

    Examples
    ========
    >>> import spacepy.time as spt
    >>> import spacepy.empiricals as emp
    >>> ticks = spt.tickrange('2002-01-01T12:00:00','2002-01-04T00:00:00',.25)
    >>> emp.getPlasmaPause(ticks)
    array([ 6.42140002,  6.42140002,  6.42140002,  6.42140002,  6.42140002,
        6.42140002,  6.42140002,  6.26859998,  5.772     ,  5.6574    ,
        5.6574    ])
    """
    def calcLpp(Kpmax, A, B, power=1):
        currLpp = A - B*Kpmax**power
        return currLpp

    model_list = ['CA1992', 'M2002', 'RT1970']

    if model == 'CA1992':
        if LT!='all':
            print('No LT dependence currently supported for this model')
    if model not in model_list:
        raise ValueError("Please specify a valid model:\n{0}".format(' or '.join(model_list)))

    if LT=='all':
        parA = {'CA1992': 5.6,  'M2002': 5.39,  'RT1970': 5.64}
        parB = {'CA1992': 0.46, 'M2002': 0.382, 'RT1970': 0.78}
        priorvals = {'CA1992': datetime.timedelta(hours=24),
                     'M2002': datetime.timedelta(hours=12),
                     'RT1970': datetime.timedelta(0)}
        A, B = parA[model], parB[model]
        prior = priorvals[model]
    else:
        try:
            float(LT)
        except (ValueError, TypeError):
            raise ValueError("Please specify a valid LT:\n'all' or a numeric type")
        parA = {'CA1992': [5.6]*24,
                'M2002': [5.7]*3+[6.05]*6+[5.2]*6+[4.45]*6+[5.7]*3,
                'RT1970': [5.64]*24}
        parB = {'CA1992': [0.46]*24,
                'M2002': [0.42]*3+[0.573]*6+[0.425]*6+[0.167]*6+[0.42]*3,
                'RT1970': [0.78]*24}
        priorvals = {'CA1992': [datetime.timedelta(hours=24)]*24,
                     'M2002': [datetime.timedelta(hours=12)]*24,
                     'RT1970': [datetime.timedelta(0)]*24}
        try:
            LThr = long(LT)
        except NameError:
            LThr = int(LT)
        prior = priorvals[model][LThr]
        A, B = parA[model][LThr], parB[model][LThr]

    st, en = ticks.UTC[0]-prior, ticks.UTC[-1]
    if omnivals is None:
        omdat = om.get_omni(spt.tickrange(st, en, 1.0/24.0), dbase='QDhourly')
    else:
        #now test for sanity of input
        try:
            assert isinstance(omnivals, dict)
        except:
            raise TypeError('Not a valid input type for omnivals, expected spacepy.datamodel.SpaceData')
        try:
            assert 'UTC' in omnivals
            assert 'Kp' in omnivals
        except:
            raise KeyError('Required data not found in input dict-like (omnivals)')
        omdat = omnivals

    einds, oinds = tb.tOverlap([st, en], omdat['UTC'])
    utc = np.array(omdat['UTC'])[oinds]
    Kp = np.array(omdat['Kp'])[oinds]
    Lpp = np.zeros(len(ticks))

    if model == 'RT1970':
        power = 0.5
    else:
        power = 1
    for i, t1 in enumerate(ticks.UTC):
        t0 = t1-prior
        iprevday, dum = tb.tOverlap(utc, [t0, t1])
        if iprevday:
            Kpmax = max(Kp[iprevday])
            Lpp[i] = calcLpp(Kpmax, A, B, power=power)
        else:
            Lpp[i] = np.nan

    return Lpp
コード例 #10
0
data=om.get_omni(ticks)




import spacepy.seapy as se
import spacepy.omni as om
import spacepy.toolbox as tb
import datetime as datetime
import numpy as np

epochs =se.readepochs('/Library/Python/2.7/site-packages/spacepy/data/SEA_epochs_OMNI.txt')

st = datetime.datetime(2005,1,1)
en = datetime.datetime(2009,1,1)
einds,oinds = tb.tOverlap([st,en],data['UTC'])
omni1hr = np.array(data['UTC'])[oinds]
delta = datetime.timedelta(hours=1)
window= datetime.timedelta(days=3)
sevx = se.Sea(data['velo'][oinds],omni1hr, epochs, window, delta)
# sevx = se.Sea(data['Pdyn'][oinds],omni1hr, epochs, window, delta)

sevx.sea()
sevx.plot(epochline=True,yquan='V$_{sw}$',xunits='days',yunits='Km s$^{-1}$')






コード例 #11
0
ファイル: toverlap_speed.py プロジェクト: spacepy/spacepy
"""Tests for the speed of tOverlap

Copyright ©2010 Los Alamos National Security, LLC.
"""

import datetime
import random
import timeit
from spacepy import toolbox

n_iter = 500

#Very simple call to make sure everything loaded/init before timing
dt_a = [datetime.datetime(2000, 1, 1), datetime.datetime(2000, 1, 2)]
dt_b = [datetime.datetime(1999, 12, 31), datetime.datetime(2000, 1, 1)]
toolbox.tOverlap(dt_a, dt_b, presort=False)
toolbox.tOverlap(dt_a, dt_b, presort=True)

dt1 = datetime.datetime(2000, 11, 12)
dt_a = [dt1 + datetime.timedelta(hours=offset) for offset in range(10000)]
dt_b = [dt1 + datetime.timedelta(hours=offset)
        for offset in range(-5000, 5000)]
timing = timeit.timeit('toolbox.tOverlap(dt_a, dt_b)',
                       'from __main__ import toolbox, dt_a, dt_b',
                       number=n_iter)
print('Sorted arrays took ' + str(timing) + ' seconds.')

timing = timeit.timeit('toolbox.tOverlap(dt_a, dt_b, presort=True)',
                       'from __main__ import toolbox, dt_a, dt_b',
                       number=n_iter)
print('Sorted arrays, sorted algorithm took ' + str(timing) + ' seconds.')