Exemplo n.º 1
0
    def test_find_plateaus_exclude_pass(self):
        ages, errors, signals, exclude, idx = self._get_test_data_exclude_pass(
        )
        p = Plateau(ages=ages, errors=errors, exclude=exclude, signals=signals)
        pidx = p.find_plateaus()

        self.assertEqual(pidx, idx)
Exemplo n.º 2
0
def calculate_plateau_age(ages, errors, k39, kind='inverse_variance',
                          method='fleck 1977', options=None):
    """
        ages: list of ages
        errors: list of corresponding  1sigma errors
        k39: list of 39ArK signals

        return age, error
    """
    # print 'ages=array({})'.format(ages)
    # print 'errors=array({})'.format(errors)
    # print 'k39=array({})'.format(k39)
    if options is None:
        options = {}

    ages = asarray(ages)
    errors = asarray(errors)
    k39 = asarray(k39)

    force_steps = options.get('force_steps', False)
    if force_steps:
        sstep, estep = force_steps
        sstep, estep = sstep.upper(), estep.upper()
        if not sstep:
            sidx = 0
        else:
            sidx = ALPHAS.index(sstep)

        n = ages.shape[0] - 1
        if not estep:
            eidx = n
        else:
            eidx = ALPHAS.index(estep)

        sidx, eidx = min(sidx, eidx), min(max(sidx, eidx), n)
        pidx = (sidx, eidx) if sidx < n else None

    else:

        from pychron.processing.plateau import Plateau

        p = Plateau(ages=ages,
                    errors=errors,
                    signals=k39,
                    nsteps=options.get('nsteps', 3),
                    gas_fraction=options.get('gas_fraction', 50))

        pidx = p.find_plateaus(method)

    if pidx:
        sx = slice(pidx[0], pidx[1] + 1)
        plateau_ages = ages[sx]
        if kind == 'vol_fraction':
            weights = k39[sx]
            wm, we = average(plateau_ages, weights=weights)
        else:
            plateau_errors = errors[sx]
            wm, we = calculate_weighted_mean(plateau_ages, plateau_errors)

        return wm, we, pidx
Exemplo n.º 3
0
    def test_find_plateaus_exclude_pass(self):
        ages, errors, signals, exclude, idx = self._get_test_data_exclude_pass()
        p = Plateau(ages=ages, errors=errors,
                    exclude=exclude,
                    signals=signals)
        pidx = p.find_plateaus()

        self.assertEqual(pidx, idx)
Exemplo n.º 4
0
def calculate_plateau_age(ages, errors, k39, kind='inverse_variance', method=FLECK, options=None, excludes=None):
    """
        ages: list of ages
        errors: list of corresponding  1sigma errors
        k39: list of 39ArK signals

        return age, error
    """
    if options is None:
        options = {}

    ages = asarray(ages)
    errors = asarray(errors)
    k39 = asarray(k39)

    fixed_steps = options.get('fixed_steps', False)
    if fixed_steps and (fixed_steps[0] or fixed_steps[1]):
        sstep, estep = fixed_steps
        sstep, estep = sstep.upper(), estep.upper()
        if not sstep:
            sidx = 0
        else:
            sidx = alpha_to_int(sstep)

        n = ages.shape[0] - 1
        if not estep:
            eidx = n
        else:
            eidx = alpha_to_int(estep)

        sidx, eidx = min(sidx, eidx), min(max(sidx, eidx), n)
        pidx = (sidx, eidx) if sidx < n else None

    else:

        from pychron.processing.plateau import Plateau

        p = Plateau(ages=ages,
                    errors=errors,
                    signals=k39,
                    excludes=excludes,
                    overlap_sigma=options.get('overlap_sigma', 2),
                    nsteps=options.get('nsteps', 3),
                    gas_fraction=options.get('gas_fraction', 50))

        pidx = p.find_plateaus(method)

    if pidx:
        sx = slice(pidx[0], pidx[1] + 1)
        plateau_ages = ages[sx]
        if kind == 'vol_fraction':
            weights = k39[sx]
            wm, we = average(plateau_ages, weights=weights)
        else:
            plateau_errors = errors[sx]
            wm, we = calculate_weighted_mean(plateau_ages, plateau_errors)

        return wm, we, pidx
Exemplo n.º 5
0
def calculate_plateau_age(ages, errors, k39, kind='inverse_variance', method='fleck 1977'):
    """
        ages: list of ages
        errors: list of corresponding  1sigma errors
        k39: list of 39ArK signals

        return age, error
    """
    # print 'ages=array({})'.format(ages)
    # print 'errors=array({})'.format(errors)
    # print 'k39=array({})'.format(k39)

    ages = asarray(ages)
    errors = asarray(errors)

    k39 = asarray(k39)
    from pychron.processing.plateau import Plateau

    p = Plateau(ages=ages,
                errors=errors,
                signals=k39)
    pidx = p.find_plateaus(method)
    # pidx = find_plateaus(ages, errors, k39,
    #                      overlap_sigma=2)
    if pidx:
        sx = slice(*pidx)
        plateau_ages = ages[sx]

        if kind == 'vol_fraction':
            weights = k39[sx]
            wm, we = average(plateau_ages, weights=weights)
        else:
            plateau_errors = errors[sx]
            wm, we = calculate_weighted_mean(plateau_ages, plateau_errors)

        return wm, we, pidx
Exemplo n.º 6
0
    def test_find_plateaus_fail1(self):
        ages, errors, signals, idx = self._get_test_data_fail1()
        p = Plateau(ages=ages, errors=errors, signals=signals)
        pidx = p.find_plateaus()

        self.assertEqual(pidx, idx)
Exemplo n.º 7
0
def calculate_plateau_age(ages,
                          errors,
                          k39,
                          kind='inverse_variance',
                          method='fleck 1977',
                          options=None,
                          excludes=None):
    """
        ages: list of ages
        errors: list of corresponding  1sigma errors
        k39: list of 39ArK signals

        return age, error
    """
    # print 'ages=array({})'.format(ages)
    # print 'errors=array({})'.format(errors)
    # print 'k39=array({})'.format(k39)
    if options is None:
        options = {}

    ages = asarray(ages)
    errors = asarray(errors)
    k39 = asarray(k39)

    force_steps = options.get('force_steps', False)
    if force_steps:
        sstep, estep = force_steps
        sstep, estep = sstep.upper(), estep.upper()
        if not sstep:
            sidx = 0
        else:
            sidx = ALPHAS.index(sstep)

        n = ages.shape[0] - 1
        if not estep:
            eidx = n
        else:
            eidx = ALPHAS.index(estep)

        sidx, eidx = min(sidx, eidx), min(max(sidx, eidx), n)
        pidx = (sidx, eidx) if sidx < n else None

    else:

        from pychron.processing.plateau import Plateau

        p = Plateau(ages=ages,
                    errors=errors,
                    signals=k39,
                    excludes=excludes,
                    nsteps=options.get('nsteps', 3),
                    gas_fraction=options.get('gas_fraction', 50))

        pidx = p.find_plateaus(method)

    if pidx:
        sx = slice(pidx[0], pidx[1] + 1)
        plateau_ages = ages[sx]
        if kind == 'vol_fraction':
            weights = k39[sx]
            wm, we = average(plateau_ages, weights=weights)
        else:
            plateau_errors = errors[sx]
            wm, we = calculate_weighted_mean(plateau_ages, plateau_errors)

        return wm, we, pidx
Exemplo n.º 8
0
    def test_find_plateaus_fail1(self):
        ages, errors, signals, idx = self._get_test_data_fail1()
        p = Plateau(ages=ages, errors=errors, signals=signals)
        pidx = p.find_plateaus()

        self.assertEqual(pidx, idx)