Exemple #1
0
def test_irradiation_activate_errors():
    """Test NeutronIrradiation.activate() bad args"""

    iso0 = Isotope("Na-23")
    iso1 = Isotope("Na-24")
    iq0 = IsotopeQuantity(iso0, atoms=1e24)
    iq1 = IsotopeQuantity(iso1, atoms=1e24)

    start = datetime.datetime.now()
    stop = start
    n_cm2 = 1e15
    ni = NeutronIrradiation(start, stop, n_cm2=n_cm2)

    barns = 10

    with pytest.raises(NeutronIrradiationError):
        ni.activate(barns, initial=iq0, activated=iq1)
    with pytest.raises(NeutronIrradiationError):
        ni.activate(barns, initial=iso0, activated=iso1)
    with pytest.raises(TypeError):
        ni.activate(barns, initial=iq0, activated="asdf")

    iso2 = Isotope("Na-25")
    with pytest.raises(NotImplementedError):
        ni.activate(barns, initial=iq1, activated=iso2)
Exemple #2
0
def test_isotopequantity_ref_atoms_stable(stable_isotope):
    """Test IsotopeQuantity.ref_atoms for a stable isotope"""

    atoms = 1e24
    iq = IsotopeQuantity(stable_isotope, atoms=atoms)
    assert iq.ref_atoms == atoms

    g = 1e-5
    iq = IsotopeQuantity(stable_isotope, g=g)
    assert iq.ref_atoms == g / stable_isotope.A * N_AV
Exemple #3
0
def test_isotopequantity_init_stable(stable_isotope, iq_date, iq_kwargs):
    """Test IsotopeQuantity.__init__() for radioactive isotopes"""

    if "bq" in iq_kwargs or "uci" in iq_kwargs:
        with pytest.raises(IsotopeQuantityError):
            iq = IsotopeQuantity(stable_isotope, date=iq_date, **iq_kwargs)
        return None
    iq = IsotopeQuantity(stable_isotope, date=iq_date, **iq_kwargs)
    assert iq.isotope is stable_isotope
    assert iq.half_life == stable_isotope.half_life
    assert iq.decay_const == stable_isotope.decay_const
Exemple #4
0
def test_isotopequantity_init_rad(radioisotope, iq_date, iq_kwargs):
    """Test IsotopeQuantity.__init__() for radioactive isotopes"""

    iq = IsotopeQuantity(radioisotope, date=iq_date, **iq_kwargs)
    assert iq.isotope is radioisotope
    assert iq.half_life == radioisotope.half_life
    assert iq.decay_const == radioisotope.decay_const

    # check string input
    iq = IsotopeQuantity(str(radioisotope), date=iq_date, **iq_kwargs)
    assert iq.isotope == radioisotope
    assert iq.half_life == radioisotope.half_life
    assert iq.decay_const == radioisotope.decay_const
Exemple #5
0
def test_irradiation_activate_extended(activation_pair):
    """Test NeutronIrradiation.activate() with decay"""

    start = datetime.datetime.now()
    t_irr = 3600 * 12
    stop = start + datetime.timedelta(seconds=t_irr)
    n_cm2_s = 1e11

    iso0, iso1 = activation_pair
    barns = 1

    iq0 = IsotopeQuantity(iso0, date=start, atoms=1e24)
    expected_atoms = (n_cm2_s * barns * 1e-24 * iq0.ref_atoms *
                      (1 - np.exp(-iso1.decay_const * t_irr)))

    ni = NeutronIrradiation(start, stop, n_cm2_s=n_cm2_s)

    # forward calculation
    iq1 = ni.activate(barns, initial=iq0, activated=iso1)
    assert iq1.ref_date == stop
    assert np.isclose(iq1.bq_at(iq1.ref_date), expected_atoms)

    # backward calculation
    iq0a = ni.activate(barns, initial=iso0, activated=iq1)
    assert iq0a.ref_date == start
    assert np.isclose(iq0a.ref_atoms, iq0.ref_atoms)
Exemple #6
0
def test_isotopequantity_init_stable(stable_isotope, iq_date, iq_kwargs):
    """Test IsotopeQuantity.__init__() for radioactive isotopes"""

    if "bq" in iq_kwargs or "uci" in iq_kwargs:
        with pytest.raises(IsotopeQuantityError):
            iq = IsotopeQuantity(stable_isotope, date=iq_date, **iq_kwargs)
        return None
    iq = IsotopeQuantity(stable_isotope, date=iq_date, **iq_kwargs)
    assert iq.isotope is stable_isotope
    assert iq.half_life == stable_isotope.half_life
    assert iq.decay_const == stable_isotope.decay_const
    assert iq.bq_at() == iq.bq_at(iq.ref_date) == 0.0
    assert iq.uci_at() == iq.uci_at(iq.ref_date) == 0.0
    if "g" in iq_kwargs:
        assert np.isclose(iq.g_at(), iq_kwargs["g"])
    if "atoms" in iq_kwargs:
        assert np.isclose(iq.atoms_at(), iq_kwargs["atoms"])
Exemple #7
0
def test_isotopequantity_ref_date_stable(stable_isotope, iq_date):
    """Test IsotopeQuantity.ref_date for a stable isotope"""

    iq = IsotopeQuantity(stable_isotope, date=iq_date, atoms=1e24)
    if isinstance(iq_date, datetime.datetime):
        assert iq.ref_date == iq_date
    elif isinstance(iq_date, string_types):
        assert iq.ref_date == dateutil_parse(iq_date)
    else:
        assert (datetime.datetime.now() - iq.ref_date).total_seconds() < 5
Exemple #8
0
def test_isotopequantity_ref_date_rad(radioisotope, iq_date):
    """Test IsotopeQuantity.ref_date for a radioisotope"""

    iq = IsotopeQuantity(radioisotope, date=iq_date, atoms=1e24)
    if isinstance(iq_date, datetime.datetime):
        assert iq.ref_date == iq_date
    elif bq.core.utils.isstring(iq_date):
        assert iq.ref_date == dateutil_parse(iq_date)
    else:
        assert (datetime.datetime.now() - iq.ref_date).total_seconds() < 5
Exemple #9
0
def test_isotopequantity_eq(iq):
    """Test IsotopeQuantity equality magic method"""

    iq2 = copy.deepcopy(iq)
    assert iq == iq2

    dt_s = min(iq.half_life, 10 * 86400)
    date = iq.ref_date + datetime.timedelta(seconds=dt_s)
    iq3 = IsotopeQuantity(iq.isotope, date=date, atoms=iq.atoms_at(date))
    assert iq == iq3
Exemple #10
0
def test_isotopequantity_ref_atoms_rad(radioisotope, iq_kwargs):
    """Test IsotopeQuantity.ref_atoms for a radioactive isotope"""

    iq = IsotopeQuantity(radioisotope, **iq_kwargs)
    if 'atoms' in iq_kwargs:
        assert iq.ref_atoms == iq_kwargs['atoms']
    elif 'g' in iq_kwargs:
        assert iq.ref_atoms == (iq_kwargs['g'] / radioisotope.A * N_AV)
    elif 'bq' in iq_kwargs:
        assert iq.ref_atoms == iq_kwargs['bq'] / radioisotope.decay_const
    else:
        assert iq.ref_atoms == (iq_kwargs['uci'] * UCI_TO_BQ /
                                radioisotope.decay_const)
Exemple #11
0
def test_isotopequantity_ref_atoms_rad(radioisotope, iq_kwargs):
    """Test IsotopeQuantity.ref_atoms for a radioactive isotope"""

    iq = IsotopeQuantity(radioisotope, **iq_kwargs)
    if "atoms" in iq_kwargs:
        assert isclose(iq.ref_atoms, iq_kwargs["atoms"])
    elif "g" in iq_kwargs:
        assert isclose(iq.ref_atoms, (iq_kwargs["g"] / radioisotope.A * N_AV))
    elif "bq" in iq_kwargs:
        assert isclose(iq.ref_atoms,
                       iq_kwargs["bq"] / radioisotope.decay_const)
    else:
        assert isclose(iq.ref_atoms,
                       iq_kwargs["uci"] * UCI_TO_BQ / radioisotope.decay_const)
Exemple #12
0
def test_irradiation_nan_g():
    """Regression test for https://github.com/lbl-anp/becquerel/issues/325.

    From examples/isotopes.ipynb
    """
    iso = Isotope("Na-23")
    iso2 = Isotope("Na-24")
    barns = 2.3  # making this up for now

    irradiation_start = "2017-04-30 10:32:00"
    irradiation_stop = "2017-04-30 11:32:00"
    flux = 3.1e11
    ni = NeutronIrradiation(irradiation_start, irradiation_stop, n_cm2_s=flux)

    activated_qty = IsotopeQuantity(iso2, date="2017-05-01", bq=103.2)
    na23_qty = ni.activate(barns, initial=iso, activated=activated_qty)

    assert not np.isnan(na23_qty.g_at())
Exemple #13
0
def test_irradiation_activate_pulse(activation_pair):
    """Test NeutronIrradiation.activate() for duration = 0"""

    start = datetime.datetime.now()
    stop = start
    n_cm2 = 1e15

    iso0, iso1 = activation_pair
    barns = 1

    iq0 = IsotopeQuantity(iso0, date=start, atoms=1e24)
    expected_atoms = n_cm2 * barns * 1e-24 * iq0.ref_atoms

    ni = NeutronIrradiation(start, stop, n_cm2=n_cm2)

    # forward calculation
    iq1 = ni.activate(barns, initial=iq0, activated=iso1)
    assert iq1.ref_date == stop
    assert np.isclose(iq1.ref_atoms, expected_atoms)

    # backward calculation
    iq0a = ni.activate(barns, activated=iq1, initial=iso0)
    assert iq0a.ref_date == start
    assert np.isclose(iq0a.ref_atoms, iq0.ref_atoms)
Exemple #14
0
def test_isotopequantity_bad_init(iso, date, kwargs, error):
    """Test errors from Isotope.__init__()"""

    with pytest.raises(error):
        IsotopeQuantity(iso, date=date, **kwargs)
Exemple #15
0
def test_isotopequantity_quantity_at(radioisotope, iq_kwargs):
    """Test IsotopeQuantity.quantity_at for a radioactive isotope"""

    iq = IsotopeQuantity(radioisotope, **iq_kwargs)
    key = next(iter(iq_kwargs))
    assert iq_kwargs[key] == iq.quantity_at(key, iq.ref_date)
Exemple #16
0
def test_isotopequantity_time_when_error(stable_isotope):
    """Test error for time_when on a stable isotope"""

    iq = IsotopeQuantity(stable_isotope, g=10)
    with pytest.raises(IsotopeQuantityError):
        iq.time_when(g=5)
Exemple #17
0
def iq(radioisotope):
    """An IsotopeQuantity object"""

    date = datetime.datetime.now()
    kwargs = {"uci": 10.047}
    return IsotopeQuantity(radioisotope, date=date, **kwargs)