Exemplo n.º 1
0
def test_isotopequantity_from_comparison(iq):
    """Test IsotopeQuantity.from_comparison calculation"""

    counts1 = 1e3
    start = iq.ref_date
    stop = start + datetime.timedelta(seconds=3600)
    interval1 = (start, stop)
    iq2 = IsotopeQuantity.from_comparison(iq, counts1, interval1, counts1,
                                          interval1)
    assert iq2 == iq

    f = 3.1
    counts2 = counts1 * f
    iq3 = IsotopeQuantity.from_comparison(iq, counts1, interval1, counts2,
                                          interval1)
    assert iq3 == iq * f

    if iq.half_life < 1000 * 3.156e7:
        dt = datetime.timedelta(seconds=iq.half_life)
        interval2 = (start + dt, stop + dt)
        iq4 = IsotopeQuantity.from_comparison(iq, counts1, interval1, counts1,
                                              interval2)
        assert iq4 == iq * 2

        iq5 = IsotopeQuantity.from_comparison(iq, counts1, interval1, counts2,
                                              interval2)
        assert iq5 == iq * 2 * f

        interval3 = (start - dt, stop - dt)
        iq6 = IsotopeQuantity.from_comparison(iq, counts1, interval1, counts1,
                                              interval3)
        assert iq6 == iq / 2
Exemplo n.º 2
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)
Exemplo n.º 3
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
Exemplo n.º 4
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
Exemplo n.º 5
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
def test_isotopequantity_from_decays(iq):
    """Test IsotopeQuantity.from_decays instantiation"""

    start = iq.ref_date
    stop = start + datetime.timedelta(seconds=3600)

    # qualitative
    IsotopeQuantity.from_decays(
        iq.isotope, n_decays=1000, start_time=start, stop_time=stop)

    # quantitative
    if iq.half_life < 1000 * 3.156e7:  # floating point precision #65
        n = iq.decays_from(start, stop)
        iq2 = IsotopeQuantity.from_decays(
            iq.isotope, n_decays=n, start_time=start, stop_time=stop)
        assert np.isclose(iq.atoms_at(start), iq2.atoms_at(start))
Exemplo n.º 7
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)
Exemplo n.º 8
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"])
Exemplo n.º 9
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
Exemplo n.º 10
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
Exemplo n.º 11
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
Exemplo n.º 12
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)
Exemplo n.º 13
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)
Exemplo n.º 14
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())
Exemplo n.º 15
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)
Exemplo n.º 16
0
def iq(radioisotope):
    """An IsotopeQuantity object"""

    date = datetime.datetime.now()
    kwargs = {"uci": 10.047}
    return IsotopeQuantity(radioisotope, date=date, **kwargs)
Exemplo n.º 17
0
Na_22_spec = Spectrum.from_file('/Users/jackiegasca/Documents/Ca_sources/Na_22_flat_against_detector_531.Spe')
Mn_54_spec = Spectrum.from_file('/Users/jackiegasca/Documents/Ca_sources/Mn_54_flat_against_detector_1264-96-2.Spe')
Co_57_spec = Spectrum.from_file('/Users/jackiegasca/Documents/Ca_sources/Co_57_flat_against_detector_1264-96-3.Spe')
Cd_109_spec = Spectrum.from_file('/Users/jackiegasca/Documents/Ca_sources/Cd_109_flat_against_detector_1264-96-8.Spe')
Th_228_spec = Spectrum.from_file('/Users/jackiegasca/Documents/Ca_sources/Th_228_flat_against_detector_1415-83.Spe')
Eu_152_spec = Spectrum.from_file('/Users/jackiegasca/Documents/Ca_sources/Eu_152_flat_against_detector_1316-97-2.Spe')


Na_22_start = Na_22_spec.start_time
Mn_54_start = Mn_54_spec.start_time
Co_57_start = Co_57_spec.start_time
Cd_109_start = Cd_109_spec.start_time
Th_228_start = Th_228_spec.start_time
Eu_152_start = Eu_152_spec.start_time

Na_22_init_act = IsotopeQuantity('na22', date=ca.Na_22.date, uci=ca.Na_22.init_act)
Na_22_act = Na_22_init_act.bq_at(Na_22_start)
Mn_54_init_act = IsotopeQuantity('mn54', date=ca.Mn_54.date, uci=ca.Mn_54.init_act)
Mn_54_act = Mn_54_init_act.bq_at(Mn_54_start)
Co_57_init_act = IsotopeQuantity('co57', date=ca.Co_57.date, uci=ca.Co_57.init_act)
Co_57_act = Co_57_init_act.bq_at(Co_57_start)
Cd_109_init_act = IsotopeQuantity('cd109', date=ca.Cd_109.date, uci=ca.Cd_109.init_act)
Cd_109_act = Cd_109_init_act.bq_at(Cd_109_start)
Th_228_init_act = IsotopeQuantity('th229', date=ca.Th_228.date, uci=ca.Th_228.init_act)
Th_228_act = Th_228_init_act.bq_at(Th_228_start)
Eu_152_init_act = IsotopeQuantity('eu152', date=ca.Eu_152.date, uci=ca.Eu_152.init_act)
Eu_152_act = Eu_152_init_act.bq_at(Eu_152_start)

Na_22_ener_spec = Na_22_spec.energies_kev[0:len(Na_22_spec)]
Mn_54_ener_spec = Mn_54_spec.energies_kev[0:len(Mn_54_spec)]
Co_57_ener_spec = Co_57_spec.energies_kev[0:len(Co_57_spec)]
Exemplo n.º 18
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)
Exemplo n.º 19
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)
Exemplo n.º 20
0
def test_isotopequantity_bad_init(iso, date, kwargs, error):
    """Test errors from Isotope.__init__()"""

    with pytest.raises(error):
        IsotopeQuantity(iso, date=date, **kwargs)
def Concentration():
    conc = []
    for i in range(len(iso_name)):
        c = iso_name[i].split('_')
        abb = c[0]
        A = int(c[1])
        A_0 = A - 1
        iso_2 = '{0}-{1}'.format(abb, A_0)
        iso_1 = '{0}-{1}'.format(abb, A)
        nuclide = Isotope(iso_1)
        def urlcreator(abb, A_0):
            A_num = str(A_0)
            if len(A_num) == 1:
                A_num = '00' + A_num
            elif len(A_num) == 2:
                A_num = '0' + A_num
            else:
                A_num = A_num
            url = 'http://wwwndc.jaea.go.jp/cgi-bin/Tab80WWW.cgi?/data' \
                    + '/JENDL/JENDL-4-prc/intern/' + abb + A_num + '.intern'
            html = urllib.request.urlopen(url)
            bslink = BeautifulSoup(html, 'lxml')

            return(bslink)

        bslink = urlcreator(abb, A_0)
        def tabledata(bslink):
            '''extracts data from the jaea website'''

            table = bslink.table
            table_rows = table.find_all('tr')
            for tr in table_rows:
                td = tr.find_all('td')
                row = [i.text for i in td]

                if len(row) == 7:
                    if row[0] == 'total       ':
                        x_sec = row[1]
                        x_sec_s = x_sec.split(' ')
                        x_val = float(x_sec_s[0])
                        barn = x_sec_s[1]
                        if barn[1] == 'k':
                            x_val = 10**(3) * x_val
                            return(x_val)
                        elif barn[1] == 'm':
                            x_val = 10**(-3) * x_val
                            return(x_val)

                        elif barn[1] == '&':
                            x_val = 10**(-6) * x_val
                            return(x_val)
                        else:
                            x_val = x_val
                            return(x_val)

                    else:
                        pass

                else:
                    pass
            return(x_val)

        x_val = tabledata(bslink)
        #print(x_val)

        quantity = IsotopeQuantity(nuclide, date=spec_S1.start_time, bq=isotope_activities[i])
        unc_quantity = IsotopeQuantity(nuclide, date=spec_S1.start_time, bq=stat_uncertainties[i])
        irrad_quan = quantity.bq_at(irr_stop)
        unc_irrad_quan = unc_quantity.bq_at(irr_stop)
        irrad_act = IsotopeQuantity(nuclide, date=irr_stop, bq=irrad_quan)
        unc_irrad_act = IsotopeQuantity(nuclide, date=irr_stop, bq=unc_irrad_quan)
        ni = NeutronIrradiation(irr_start, irr_stop, n_cm2_s=flux)
        init_comp = ni.activate(x_val, initial=Isotope(iso_2), activated=irrad_act)
        unc_init_comp = ni.activate(x_val, initial=Isotope(iso_2), activated=unc_irrad_act)
        init_comp.is_stable = True
        unc_init_comp.is_stable = True
        sinit_comp = str(init_comp)
        sunc_init_comp = str(unc_init_comp)
        #print(sinit_comp, sunc_init_comp)
        s2 = sinit_comp.split(' ')
        s0 = s2[0]
        sunc2 = sunc_init_comp.split(' ')
        sunc0 = sunc2[0]
        isotope_type = ' ' + s2[1] + ' ' + s2[2] + ' ' + s2[3]
        print(s0+' +/- '+sunc0 +isotope_type)