Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,15 @@ docs/_build/
# PyBuilder
target/

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

#####=== Jython ===#####

*.pyc
Expand Down
9 changes: 7 additions & 2 deletions pyxray/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ def print_element_xray_transitions(self, element, file=sys.stdout, tabulate_kwar

:arg file: file for output, default to standard out
"""
header = ['IUPAC', 'Siegbahn', 'Energy (eV)', 'Probability']
header = ['IUPAC', 'Siegbahn', 'Energy (eV)', 'Probability', 'Relative weight']

rows = []
for xray_transition in self.element_xray_transitions(element):
Expand All @@ -265,7 +265,12 @@ def print_element_xray_transitions(self, element, file=sys.stdout, tabulate_kwar
except:
probability = ''

rows.append([iupac, siegbahn, energy_eV, probability])
try:
relative_weight = self.xray_transition_relative_weight(element, xray_transition)
except:
relative_weight = ''

rows.append([iupac, siegbahn, energy_eV, probability, relative_weight])

rows.sort(key=operator.itemgetter(2))

Expand Down
36 changes: 33 additions & 3 deletions pyxray/sql/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -367,9 +367,39 @@ def element_xray_transitions(self, element, xray_transition=None, reference=None
self._update_xray_transition(builder, table_probability, xray_transition, search=True)

transitions = []
for src_n, src_l, src_j_n, dst_n, dst_l, dst_j_n in self._execute_many(builder):
transition = descriptor.XrayTransition(src_n, src_l, src_j_n, dst_n, dst_l, dst_j_n)
transitions.append(transition)
try:
for src_n, src_l, src_j_n, dst_n, dst_l, dst_j_n in self._execute_many(builder):
transition = descriptor.XrayTransition(src_n, src_l, src_j_n, dst_n, dst_l, dst_j_n)
transitions.append(transition)
except NotFound:
logger.info("No transition found for {}".format(element))

if len(transitions) == 0:
table_relative_weight = self.require_table(property.XrayTransitionRelativeWeight)
builder = StatementBuilder()
builder.add_column(table_xray.c['source_principal_quantum_number'])
builder.add_column(table_xray.c['source_azimuthal_quantum_number'])
builder.add_column(table_xray.c['source_total_angular_momentum_nominator'])
builder.add_column(table_xray.c['destination_principal_quantum_number'])
builder.add_column(table_xray.c['destination_azimuthal_quantum_number'])
builder.add_column(table_xray.c['destination_total_angular_momentum_nominator'])
builder.add_join(table_relative_weight, table_xray, table_relative_weight.c['xray_transition_id'] == table_xray.c['id'])
builder.add_clause(table_relative_weight.c['value'] > 0.0)
self._update_element(builder, table_relative_weight, element)
self._update_reference(builder, table_relative_weight, reference)
if xray_transition is not None:
self._update_xray_transition(builder, table_relative_weight, xray_transition, search=True)

transitions = []
try:
for src_n, src_l, src_j_n, dst_n, dst_l, dst_j_n in self._execute_many(builder):
transition = descriptor.XrayTransition(src_n, src_l, src_j_n, dst_n, dst_l, dst_j_n)
transitions.append(transition)
except NotFound:
logger.info("No transition found for {}".format(element))

if len(transitions) == 0:
raise NotFound

return tuple(transitions)

Expand Down
16 changes: 16 additions & 0 deletions tests/sql/test_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
# Local modules.
import pyxray.descriptor as descriptor
from pyxray.sql.data import SqlDatabase, NotFound
import pyxray.data

# Globals and constants variables.
K = descriptor.AtomicSubshell(1, 0, 1)
Expand All @@ -23,6 +24,10 @@
def database(builder):
return SqlDatabase(builder.engine)

@pytest.fixture
def database_real(tmp_path):
return pyxray.data.database

def test_add_preferred_reference(database):
database.clear_preferred_references()
database.add_preferred_reference('lee1966')
Expand Down Expand Up @@ -131,6 +136,17 @@ def test_element_xray_transitions_with_xray_transition(database, xray_transition
transitions = database.element_xray_transitions(118, xray_transition)
assert len(transitions) == expected

@pytest.mark.parametrize('element, expected', [
(13, 14),
(6, 2),
(5, 3),
(4, 3),
(3, 2),
])
def test_element_xray_transitions(database_real, element, expected):
transitions = database_real.element_xray_transitions(element)
assert len(transitions) == expected

@pytest.mark.parametrize('element,reference', [(118, 'unknown'), (1, None)])
def test_element_xray_transitions_notfound(database, element, reference):
with pytest.raises(NotFound):
Expand Down