Newer
Older
import os
from mantid.api import *
Federico Montesino Pouzols
committed
import mantid.simpleapi as sapi
def getDetIDsForBank(bank):
""" Returns detector IDs corresponding to the specified EnginX bank number
"""
Federico Montesino Pouzols
committed
groupingFilePath = os.path.join(sapi.config.getInstrumentDirectory(),
'Grouping', 'ENGINX_Grouping.xml')
alg = AlgorithmManager.create('LoadDetectorsGroupingFile')
alg.setProperty('InputFile', groupingFilePath)
alg.setProperty('OutputWorkspace', '__EnginXGrouping')
alg.execute()
grouping = mtd['__EnginXGrouping']
detIDs = set()
for i in range(grouping.getNumberHistograms()):
if grouping.readY(i)[0] == bank:
detIDs.add(grouping.getDetector(i).getID())
Federico Montesino Pouzols
committed
sapi.DeleteWorkspace(grouping)
if len(detIDs) == 0:
return detIDs
def getWsIndicesForBank(bank, ws):
""" Get a list of workspace indices which correspond to the specified bank
"""
detIDs = getDetIDsForBank(bank)
def isIndexInBank(index):
try:
det = ws.getDetector(index)
return det.getID() in detIDs
Federico Montesino Pouzols
committed
except RuntimeError:
Federico Montesino Pouzols
committed
return [i for i in range(0, ws.getNumberHistograms()) if isIndexInBank(i)]
Federico Montesino Pouzols
committed
def readInExpectedPeaks(filename, expectedGiven):
"""
Reads in expected peaks from the .csv file if requested. Otherwise fall back to the list of
peaks given (and check that it is not empty).
@param :: filename name of the csv file to read from. If empty, we take the peaks given in an option.
This is passed to EnginX algorithms in the (optional) input property 'ExpectedPeaksFromFile'
@param :: expectedGiven list of expected peaks given as an input property to an EnginX algorithm
(ExpectedPeaks)
@returns the expected peaks either from a file or input list, sorted in ascending order
"""
expectedPeaksD = None
if filename != "":
exPeakArray = []
readInArray = []
Federico Montesino Pouzols
committed
try:
with open(filename) as f:
for line in f:
readInArray.append([float(x) for x in line.split(',')])
for a in readInArray:
for b in a:
exPeakArray.append(b)
except RuntimeError, ex:
raise RuntimeError("Error while reading file of expected peaks '%s': %s" % (filename, ex))
if not exPeakArray:
# "File could not be read. Defaults in alternative option used."
if [] == expectedGiven:
raise ValueError("Could not read any peaks from the file given in 'ExpectedPeaksFromFile: '" +
filename + "', and no expected peaks were given in the property "
"'ExpectedPeaks' either. Cannot continue without a list of expected peaks.")
expectedPeaksD = sorted(expectedGiven)
else:
expectedPeaksD = sorted(exPeakArray)
else:
if [] == expectedGiven:
raise ValueError("No expected peaks were given in the property 'ExpectedPeaks', "
"could not get default expected peaks, and 'ExpectedPeaksFromFile' "
"was not given either. Cannot continout without a list of expected peaks.")
expectedPeaksD = sorted(expectedGiven)
return expectedPeaksD
def generateOutputParTable(name, difc, zero):
Federico Montesino Pouzols
committed
"""
Produces a table workspace with the two fitted calibration parameters
@param name :: the name to use for the table workspace that is created here
"""
tbl = sapi.CreateEmptyTableWorkspace(OutputWorkspace=name)
tbl.addColumn('double', 'difc')
tbl.addColumn('double', 'zero')
tbl.addRow([float(difc), float(zero)])