\(\renewcommand\AA{\unicode{x212B}}\)

PeakMatching v1

../_images/PeakMatching-v1_dlg.png

PeakMatching dialog.

Summary

Matches peaks from table to a database to find probable transitions

Properties

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

Description

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.

Input Table and datafile requirement

  • input table must have at least 2 column in which one column is the peak centre and the other is the standard deviation, the names of the columns must be given if they differ from the default values: centre and sigma respectively.
  • json file can be loaded to override the default but must follow structure below:
{
  "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
    }
  }
}

Usage

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

Source

Python: PeakMatching.py (last modified: 2021-04-01)