\(\renewcommand\AA{\unicode{x212B}}\)
Table of Contents
Name | Direction | Type | Default | Description |
---|---|---|---|---|
PeakTable | Input | TableWorkspace | Mandatory | Table containing peaks to match to database |
PeakDatabase | Input | string | json file with peak database, if none is given default database will be used. Allowed values: [‘json’] | |
PeakCentreColumn | Input | string | centre | Name of column containing centre of peaks |
SigmaColumn | Input | string | sigma | Name of column containing standard deviation of peaks |
AllPeaks | Output | TableWorkspace | all_matches | Name of the table containing all of the peak matches |
PrimaryPeaks | Output | TableWorkspace | primary_matches | Name of the table containing the primary peak matches |
SecondaryPeaks | Output | TableWorkspace | secondary_matches | Name of the table containing the secondary peak matches |
SortedByEnergy | Output | TableWorkspace | all_matches_sorted_by_energy | Name of the table containing all of the peak matches sorted by energy |
ElementLikelihood | Output | TableWorkspace | element_likelihood | Name of the table containing the weighted count of elements in all matches |
This algorithm takes a table of peak centres and standard deviations, then finds overlap with a database of known values to find probable energy transitions for peaks.
{
"Ag": {
"Z": 47,
"A": 107.87,
"Primary": {
"K(4->1)": 3177.7,
"L(4->2)": 900.7,
"M(4->3)": 304.7,
"6->5": 141
},
"Secondary": {
"K(2->1)": 3140.6,
"L(8->2)": 1347.8,
"M(10->3)": 567,
"8->6": 122.2
},
"Gammas": {
"72Ge(n,n')72Ge": 691,
"73Ge(n,g)74Ge": null,
"74Ge(n,n')74Ge": 595.7
}
}
}
Example: Using all defaults*
from mantid.simpleapi import *
import matplotlib.pyplot as plt
import numpy
def formatdict(row):
row = dict([(column, "{:.2f}".format(value)) if type(value) == float else (column, value) for column , value in row.items()])
return row
table = CreateEmptyTableWorkspace(OutputWorkspace="input")
rows = [(900, 0.8), (306, 0.8), (567, 0.8), (3, 0.8)]
table.addColumn("double","centre")
table.addColumn("double","sigma")
for row in rows:
table.addRow(row)
PeakMatching(table)
primary_matches = mtd['primary_matches']
secondary_matches = mtd['secondary_matches']
all_matches = mtd['all_matches']
sorted_by_energy = mtd['all_matches_sorted_by_energy']
element_likelihood = mtd[ 'element_likelihood']
print("--"*25)
print(formatdict(primary_matches.row(0)))
print("--"*25)
print(formatdict(secondary_matches.row(0)))
print("--"*25)
print(formatdict(all_matches.row(0)))
print("--"*25)
print(formatdict(sorted_by_energy.row(0)))
print("--"*25)
print(formatdict(element_likelihood.row(0)))
Output:
--------------------------------------------------
{'Peak centre': '3.00', 'Database Energy': '3.40', 'Element': 'Li', 'Transition': 'L(3d->2p)', 'Error': '0.80', 'Difference': '0.40'}
--------------------------------------------------
{'Peak centre': '567.00', 'Database Energy': '567.00', 'Element': 'Ag', 'Transition': 'M(7f->3d)', 'Error': '0.00', 'Difference': '0.00'}
--------------------------------------------------
{'Peak centre': '567.00', 'Database Energy': '567.00', 'Element': 'Ag', 'Transition': 'M(7f->3d)', 'Error': '0.00', 'Difference': '0.00'}
--------------------------------------------------
{'Peak centre': '3.00', 'Database Energy': '3.40', 'Element': 'Li', 'Transition': 'L(3d->2p)', 'Error': '0.80', 'Difference': '0.40'}
--------------------------------------------------
{'Element': 'Ag', 'Likelihood(arbitrary units)': 10}
Example: Renaming tables*
from mantid.simpleapi import *
import matplotlib.pyplot as plt
import numpy
def formatdict(row):
row = dict([(column, "{:.2f}".format(value)) if type(value) == float else (column, value) for column , value in row.items()])
return row
table = CreateEmptyTableWorkspace(OutputWorkspace="input")
rows = [(900, 0.8), (306, 0.8), (567, 0.8), (3, 0.8)]
table.addColumn("double","centre")
table.addColumn("double","sigma")
for row in rows:
table.addRow(row)
PeakMatching(table,PrimaryPeaks="primary",SecondaryPeaks="secondary",AllPeaks="all",SortedByEnergy="sort",ElementLikelihood="count")
primary_matches = mtd['primary']
secondary_matches = mtd['secondary']
all_matches = mtd['all']
sorted_by_energy = mtd['sort']
element_likelihood = mtd[ 'count']
print("--"*25)
print(formatdict(primary_matches.row(1)))
print("--"*25)
print(formatdict(secondary_matches.row(1)))
print("--"*25)
print(formatdict(all_matches.row(1)))
print("--"*25)
print(formatdict(sorted_by_energy.row(1)))
print("--"*25)
print(formatdict(element_likelihood.row(1)))
Output:
--------------------------------------------------
{'Peak centre': '900.00', 'Database Energy': '900.70', 'Element': 'Ag', 'Transition': 'L(3d3/2->2p3/2)', 'Error': '0.80', 'Difference': '0.70'}
--------------------------------------------------
{'Peak centre': '567.00', 'Database Energy': '567.00', 'Element': 'In', 'Transition': 'M(6f->3d)', 'Error': '0.00', 'Difference': '0.00'}
--------------------------------------------------
{'Peak centre': '567.00', 'Database Energy': '567.00', 'Element': 'In', 'Transition': 'M(6f->3d)', 'Error': '0.00', 'Difference': '0.00'}
--------------------------------------------------
{'Peak centre': '306.00', 'Database Energy': '304.10', 'Element': 'W', 'Transition': 'O(7i->5g)', 'Error': '2.40', 'Difference': '1.90'}
--------------------------------------------------
{'Element': 'Tm', 'Likelihood(arbitrary units)': 6}
Example: Using non default column names*
from mantid.simpleapi import *
import matplotlib.pyplot as plt
import numpy
def formatdict(row):
row = dict([(column, "{:.2f}".format(value)) if type(value) == float else (column, value) for column , value in row.items()])
return row
table = CreateEmptyTableWorkspace(OutputWorkspace="input")
rows = [(900, 0.8), (306, 0.8), (567, 0.8), (3, 0.8)]
table.addColumn("double","center")
table.addColumn("double","standard deviation")
for row in rows:
table.addRow(row)
PeakMatching(table, PeakCentreColumn = "center",SigmaColumn = "standard deviation")
primary_matches = mtd['primary_matches']
secondary_matches = mtd['secondary_matches']
all_matches = mtd['all_matches']
sorted_by_energy = mtd['all_matches_sorted_by_energy']
element_likelihood = mtd[ 'element_likelihood']
print("--"*25)
print(formatdict(primary_matches.row(2)))
print("--"*25)
print(formatdict(secondary_matches.row(2)))
print("--"*25)
print(formatdict(all_matches.row(2)))
print("--"*25)
print(formatdict(sorted_by_energy.row(2)))
print("--"*25)
print(formatdict(element_likelihood.row(2)))
Output:
--------------------------------------------------
{'Peak centre': '900.00', 'Database Energy': '899.20', 'Element': 'Au', 'Transition': 'M(4f5/2->3d3/2)', 'Error': '0.80', 'Difference': '0.80'}
--------------------------------------------------
{'Peak centre': '567.00', 'Database Energy': '566.70', 'Element': 'I', 'Transition': 'M(5f->3d)', 'Error': '0.80', 'Difference': '0.30'}
--------------------------------------------------
{'Peak centre': '567.00', 'Database Energy': '566.70', 'Element': 'I', 'Transition': 'M(5f->3d)', 'Error': '0.80', 'Difference': '0.30'}
--------------------------------------------------
{'Peak centre': '306.00', 'Database Energy': '304.50', 'Element': 'Tm', 'Transition': 'N(5g->4f)', 'Error': '1.60', 'Difference': '1.50'}
--------------------------------------------------
{'Element': 'In', 'Likelihood(arbitrary units)': 4}
Categories: AlgorithmIndex | Muon
Python: PeakMatching.py (last modified: 2021-04-01)