\(\renewcommand\AA{\unicode{x212B}}\)
Python in Mantid: Solution 4¶
All the data for these solutions can be found in the TrainingCourseData on the Downloads page.
Manipulating data arrays¶
A - Create a MatrixWorkspace¶
# import mantid algorithms, numpy and matplotlib
from mantid.simpleapi import *
import matplotlib.pyplot as plt
import numpy as np
ws = Load(Filename="HRP39182.RAW")
ws = Rebin(InputWorkspace=ws, Params=1e4)
nbins = ws.blocksize()
print(nbins)
xMin = ws.getDimension(0).getMinimum()
xMax = ws.getDimension(0).getMaximum()
xRange = [xMin, xMax]
''' ----------- Part One Solution using nested loop and implementing a max condition by hand ----------- '''
new_y = []
for i in range(ws.getNumberHistograms()):
y = ws.readY(i)
maxY = -1
# Inner loop. Loop over bins.
for j in range(nbins):
current = y[j]
if current > maxY:
maxY = current
new_y.append(maxY)
solution_1 = CreateWorkspace(DataY=new_y, DataX=xRange, NSpec=ws.getNumberHistograms())
''' ----------- Part One Solution using nested loop and implementing an inbuild max function ----------- '''
new_y = []
for i in range(ws.getNumberHistograms()):
y = ws.readY(i)
maxY = -1.0
# Inner loop. Loop over bins.
for j in range(nbins):
maxY = max(y[j], maxY) # Using the input Max method.
new_y.append(maxY)
solution_2 = CreateWorkspace(DataY=new_y, DataX=xRange, NSpec=ws.getNumberHistograms())
''' ----------- Part One Solution using single loop and numpy max function ----------- '''
new_y = []
for i in range(ws.getNumberHistograms()):
y = ws.readY(i)
maxY = np.max(y)
new_y.append(maxY)
solution_3 = CreateWorkspace(DataY=new_y, DataX=xRange, NSpec=ws.getNumberHistograms())
B - Create a TableWorkspace¶
ws = Load(Filename="HRP39182.RAW")
ws = Rebin(InputWorkspace=ws, Params=1e4)
nbins = ws.blocksize()
print(nbins)
xMin = ws.getDimension(0).getMinimum()
xMax = ws.getDimension(0).getMaximum()
xRange = [xMin, xMax]
table = CreateEmptyTableWorkspace()
table.addColumn('int', 'Spectrum Number')
table.addColumn('double', 'Max')
table.addColumn('double', 'Min')
for i in range(ws.getNumberHistograms()):
y = ws.readY(i)
maxY = np.max(y)
minY = np.min(y)
specNumber = ws.getSpectrum(i).getSpectrumNo()
table.addRow([specNumber, maxY, minY])