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)
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)
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])
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)
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')
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()
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')