Esempio n. 1
0
    def property_lookup_button_clicked(self):

        Z = int(self.tools_z_entry.text())
        N = int(self.tools_n_entry.text())
        q = int(self.tools_q_entry.text())

        # freq = cpt_tools.nuclear_data.

        # print( cpt_tools.nuclear_data.half_lives )

        mass = cpt_tools.nuclear_data.masses[Z, N]
        half_life = cpt_tools.nuclear_data.half_lives[Z, N]
        cf_yield = cpt_tools.nuclear_data.cf_yields[Z, N]
        abund = cpt_tools.nuclear_data.rel_abundances[Z, N]

        if q > 0:
            omega = cpt_tools.mass_to_omega(mass, q, 1)
        else:
            omega = np.nan

        self.property_lookup_table.cellWidget(0, 0).setText('%.2f' % omega)
        self.property_lookup_table.cellWidget(0, 1).setText('%.2f' % mass)
        self.property_lookup_table.cellWidget(0, 2).setText('%.2e' % half_life)
        self.property_lookup_table.cellWidget(0, 3).setText('%.2e' % cf_yield)
        self.property_lookup_table.cellWidget(0, 4).setText('%.2e' % abund)
Esempio n. 2
0
 def set_ion_params(self, Z, A, Q):
     self.Z = Z
     self.A = A
     self.q = Q
     self.N = A - Z
     self.ame_mass = cpt_tools.nuclear_data.masses[self.Z, self.N]
     self.ame_freq = cpt_tools.mass_to_omega(self.ame_mass,
                                             self.q,
                                             atomic_mass=1)
Esempio n. 3
0
    def set_params_from_ion_data_button_clicked(self):
        print('INFO: setting tabor params from ion data...')
        Z = int(self.tabor_z_entry.text())
        N = int(self.tabor_n_entry.text())
        q = int(self.tabor_q_entry.text())

        mass = cpt_tools.nuclear_data.masses[Z, N]
        omega_c = cpt_tools.mass_to_omega(mass, q, atomic_mass=1)
        omega_minus = float(self.tabor_table.cellWidget(0, 0).text())
        omega_plus = omega_c - omega_minus

        frequencies = [omega_plus, omega_c]
        for i in range(1, len(frequencies)):
            self.tabor_table.cellWidget(0, i).setText('%.1f' % frequencies[i])
Esempio n. 4
0
    def property_lookup_button_clicked(self):

        Z, A, q = self.tools_property_ion_entry.fetch()
        N = A - Z

        mass = cpt_tools.nuclear_data.masses[Z, N]
        half_life = cpt_tools.nuclear_data.half_lives[Z, N]
        cf_yield = cpt_tools.nuclear_data.cf_yields[Z, N]
        abund = cpt_tools.nuclear_data.rel_abundances[Z, N]

        if q > 0:
            omega = cpt_tools.mass_to_omega(mass, q, 1)
        else:
            omega = np.nan

        self.property_lookup_table.cellWidget(0, 0).setText('%.2f' % omega)
        self.property_lookup_table.cellWidget(0, 1).setText('%.2f' % mass)
        self.property_lookup_table.cellWidget(0, 2).setText('%.2e' % half_life)
        self.property_lookup_table.cellWidget(0, 3).setText('%.2e' % cf_yield)
        self.property_lookup_table.cellWidget(0, 4).setText('%.2e' % abund)
Esempio n. 5
0
def check_ions(atom_masses, omega, d_omega, half_lives, cf_yields, abundances):

    print('ION MATCHES')
    print('OMEGA\t NAME\t q\t A\t Z\t N\t T_1/2\t CF_YIELD \tNATURAL_ABUND\n')

    none_found_flag = 1

    for q in range(1, max_charge + 1):

        # total_A = q * A1

        # print( '\n\nINFO: Checking q = %d,  A = %d' % ( q, total_A)  )

        for Z in range(1, max_Z):
            for N in range(0, max_N):

                # we have a candidate, add mass and all labels
                mass = atom_masses[Z][N]

                # default value: mass was not found in ame16
                if mass == -1:
                    continue

                mass -= q * nuclear_data.electron_mass
                current_omega = mass_to_omega(mass, q)

                if np.abs(current_omega - omega) <= d_omega:

                    half_life = half_lives[Z, N]

                    element_name = z_to_element(Z).title()

                    print('%.1f\t%s \t%d\t%d\t%d\t%d\t%.2f\t%.2f\t%.2f' %
                          (current_omega, element_name, q, Z + N, Z, N,
                           half_life, cf_yields[Z, N], abundances[Z, N]))

                    none_found_flag = 0

    if none_found_flag:

        print('NONE FOUND')
Esempio n. 6
0
    def set_params_from_ion_data_button_clicked(self):
        print('INFO: setting tabor params from ion data...')
        Z, A, q = self.tabor_ion_entry.fetch()
        N = A - Z

        self.processor.Z = Z
        self.processor.A = A
        # self.processor.q = q

        mass = cpt_tools.nuclear_data.masses[Z, N]
        omega_c = cpt_tools.mass_to_omega(mass, q, atomic_mass=1)
        omega_minus = float(self.tabor_table.cellWidget(0, 0).text())
        omega_plus = omega_c - omega_minus

        print(omega_minus)
        print(omega_c)
        print(omega_plus)

        frequencies = [omega_plus, omega_c]
        for i in range(2):
            self.tabor_table.cellWidget(0,
                                        i + 1).setText('%.1f' % frequencies[i])

        self.processor.tabor_params = self.tabor_params_widget.fetch()
Esempio n. 7
0
def check_molecule_combinations(molecule_db, omega, d_omega, half_lives,
                                cf_yields, abundances):

    candidate_masses = []
    candidate_indices = []
    candidate_labels = []

    none_found_flag = 1

    print('MOLECULE MATCHES')
    print('KEY:')
    print('MOLECULE NAME')
    print('\tQ')
    print('\tA')
    print('\tOMEGA  (Hz)')
    print('\tZ')
    print('\tN')
    print('\tHalf lives (inf = stable)  (seconds)')
    print('\tCf yield')
    print('\tRelative natural Abundance')
    print('')

    for q in range(1, max_charge + 1):

        print('\n\nINFO: checking q = %d' %
              q)  # , expected A = %d' % ( q, total_A)  )

        print(omega)
        print(q)
        print(nuclear_data.electron_mass)

        mass_low = omega_to_mass(omega + d_omega,
                                 q) + q * nuclear_data.electron_mass
        mass_high = omega_to_mass(omega - d_omega,
                                  q) + q * nuclear_data.electron_mass

        # print( [ mass_low, mass_high ] )

        isobar_molecules = molecule_db.search_mass(mass_low, mass_high)

        if len(isobar_molecules) > 0:

            print('INFO: Found %d candidates:\n' % len(isobar_molecules))

            for data in isobar_molecules:

                mass = data['mass']

                mass -= q * nuclear_data.electron_mass

                current_omega = mass_to_omega(mass, q)

                Z = pickle.loads(data['Z'])
                N = pickle.loads(data['N'])
                isomer_labels = pickle.loads(data['isomer_labels'])
                molecule_name = data['molecule_name']

                A = np.sum(Z) + np.sum(N)

                half_life = np.array(
                    [half_lives[Z[i], N[i]] for i in range(len(Z))])
                current_cf_yields = np.array(
                    [cf_yields[Z[i], N[i]] for i in range(len(Z))])
                abunds_arr = np.array(
                    [abundances[Z[i], N[i]] for i in range(len(Z))])

                # if ( np.any( ( half_life < min_half_life ) )
                #      or np.any( current_cf_yields < min_cf_yield_fraction ) ) :

                #     continue

                if np.all((half_life == np.inf)):
                    half_life_str = 'all stable'
                else:
                    half_life_str = ['%.2e' % x for x in half_life]

                if np.all((current_cf_yields == 0.0)):
                    cf_yields_str = 'no cf production'
                else:
                    cf_yields_str = ['%.2e' % x for x in current_cf_yields]

                abunds_str = ['%.3f' % x for x in abunds_arr]

                print('%s' % molecule_name)
                print('\t%d' % q)
                print('\t%d' % A)
                print('\t%.1f' % current_omega)
                print('\t%s' % str(Z))
                print('\t%s' % str(N))
                print('\t%s' % str(half_life_str))
                print('\t%s' % str(cf_yields_str))
                print('\t%s' % str(abunds_str))
                print('\n')

                # candidate_labels.append( [ nuclide_labels ] )

        else:
            print('NONE FOUND')