Skip to content

Commit

Permalink
Checkpointing progress on vanadium peak strip. Refs #11289.
Browse files Browse the repository at this point in the history
  • Loading branch information
wdzhou committed Apr 17, 2015
1 parent 0125ebe commit a970a39
Show file tree
Hide file tree
Showing 5 changed files with 154 additions and 65 deletions.
57 changes: 57 additions & 0 deletions Code/Mantid/scripts/HFIRPowderReduction/HfirPDReductionControl.py
Expand Up @@ -39,6 +39,10 @@
from mantid.simpleapi import AnalysisDataService
from mantid.kernel import ConfigService


VanadiumPeakPositions = [0.5044,0.5191,0.5350,0.5526,0.5936,0.6178,0.6453,0.6768,
0.7134,0.7566,0.8089,0.8737,0.9571,1.0701,1.2356,1.5133,2.1401]

""" Powder data reduction class
"""
class PDRManager:
Expand Down Expand Up @@ -223,7 +227,34 @@ def getMergedVector(self, mkey):
raise NotImplementedError("No merged workspace for key = %s." % (str(mkey)))

return (vecx, vecy)


def getVanadiumPeaksPos(self, exp, scan):
""" Convert vanadium peaks from d-spacing to 2theta
Arguments
- exp
- scan
Return :: list of peak positions in 2-theta (Degrees)
"""
wsmanager = self.getWorkspace(exp, scan, raiseexception=True)
if wsmanager.datamdws is None:
self._logError("Unable to rebin the data for exp=%d, scan=%d because either data MD workspace and \
monitor MD workspace is not present." % (exp, scan))
return False

wavelength = wsmanager.datamdws.getExperimentInfo(0).run().getProperty('wavelength').value()

vanpeakpos2theta = []
for peakpos in VanadiumPeakPositions:
# FIXME - Check equation
twotheta = math.asin(peakpos*0.25/(math.pi*wavelength))
vanpeakpos2theta.append(twotheta)

vanpeakpos2theta = sorted(vanpeakpos2theta)

return vanpeakpos2theta


def getWkspToMerge(self):
""" Get the individual workspaces that are used for merging in the last
Expand Down Expand Up @@ -520,6 +551,30 @@ def savePDFile(self, exp, scan, filetype, sfilename):
return


def stripVanadiumPeaks(self, exp, scan, binparams, vanpeakposlist):
""" Strip vanadium peaks
"""
# Get reduced workspace
wsmanager = self.getWorkspace(exp, scan, raiseexception=True)
wksp = wsmanager.reducedws
if wksp is None:
raise NotImplementedError("Unable to rebin the data for exp=%d, scan=%d because either data MD workspace and \
monitor MD workspace is not present." % (exp, scan))

# Convert unit to Time-of-flight
xaxis_unit = wksp.getAxis(0).unit().ID()
if xaxis != 'Degrees':
wksp = mantid.ConvertCWPDToSpectra(InputWorkspace=wksp, OutputWorkspace=wksp.name(),
Params=binparams)

# Call
wksp = StripPeaks(InputWorkspace=wksp, OutputWorksapce=wksp.name(),
PeakList=vanpeakposlist)

return



""" External Methods """
def downloadFile(url, localfilepath):
"""
Expand All @@ -540,3 +595,5 @@ def downloadFile(url, localfilepath):
ofile.close()

return (True, "")


80 changes: 56 additions & 24 deletions Code/Mantid/scripts/HFIRPowderReduction/HfirPDReductionGUI.py
Expand Up @@ -117,8 +117,8 @@ def __init__(self, parent=None):
self.doStripVandiumPeaks)
self.connect(self.ui.pushButton_saveVanRun, QtCore.SIGNAL('clicked()'),
self.doSaveVanRun)
self.connect(self.ui.pushButton_rebinD, QtCore.SIGNAL('clicked()'),
self.doRebinD)
self.connect(self.ui.pushButton_rebin2Theta, QtCore.SIGNAL('clicked()'),
self.doRebin2Theta)

# tab 'Multiple Scans'
self.connect(self.ui.pushButton_mergeScans, QtCore.SIGNAL('clicked()'),
Expand Down Expand Up @@ -169,17 +169,17 @@ def __init__(self, parent=None):
validator7.setBottom(0)
self.ui.lineEdit_detID.setValidator(validator7)

validator8 = QtGui.QDoubleValidator(self.ui.lineEdit_minD)
validator8 = QtGui.QDoubleValidator(self.ui.lineEdit_min2Theta)
validator8.setBottom(0.)
self.ui.lineEdit_minD.setValidator(validator8)
self.ui.lineEdit_min2Theta.setValidator(validator8)

validator9 = QtGui.QDoubleValidator(self.ui.lineEdit_maxD)
validator9 = QtGui.QDoubleValidator(self.ui.lineEdit_max2Theta)
validator9.setBottom(0.)
self.ui.lineEdit_maxD.setValidator(validator9)
self.ui.lineEdit_max2Theta.setValidator(validator9)

validator10 = QtGui.QDoubleValidator(self.ui.lineEdit_binsizeD)
validator10 = QtGui.QDoubleValidator(self.ui.lineEdit_binsize2Theta)
validator10.setBottom(0.)
self.ui.lineEdit_binsizeD.setValidator(validator10)
self.ui.lineEdit_binsize2Theta.setValidator(validator10)

validator11 = QtGui.QIntValidator(self.ui.lineEdit_scanStart)
validator11.setBottom(1)
Expand Down Expand Up @@ -771,36 +771,45 @@ def doPlotPrevPtRaw(self):



def doRebinD(self):
""" Rebin MDEventWorkspaces in d-Spacing. for pushButton_rebinD
def doRebin2Theta(self):
""" Rebin MDEventWorkspaces in 2-theta. for pushButton_rebinD
in vanadium peak strip tab
Suggested workflow
1. Rebin data
2. Calculate vanadium peaks in 2theta
3.
"""
# exp number an scan number
# TODO - Need to heavy test!
# Get exp number an scan number
try:
expno, scanno = self._uiGetExpScanNumber()
except Exception as e:
self._logError("Error to get Exp and Scan due to %s." % (str(e)))
return False

# wave length
wavelength = float(self.ui.lineEdit_wavelength.text())

# get new binning parameters
unit = 'dSpacing'
# Get new binning parameters
unit = 'Degrees'
try:
xmin, binsize, xmax = self._uiGetBinningParams(xmin_w=self.ui.lineEdit_minD,
binsize_w=self.ui.lineEdit_binsizeD,
xmax_w=self.ui.lineEdit_maxD)
xmin, binsize, xmax = self._uiGetBinningParams(xmin_w=self.ui.lineEdit_min2Theta,
binsize_w=self.ui.lineEdit_binsize2Theta,
xmax_w=self.ui.lineEdit_max2Theta)
except Exception as e:
self._logError(str(e))
return False

# Reduce data
wavelength = float(self.ui.lineEdit_wavelength.text())
execstatus = self._myControl.rebin(expno, scanno, unit, wavelength, \
xmin, binsize, xmax)
print "[DB] reduction status = %s, Binning = %s, %s, %s" % (str(execstatus),
str(xmin), str(binsize), str(xmax))

# Get wave length and get list of vanadium peaks in 2theta
wavelength = float(self.ui.lineEdit_wavelength.text())
vanpeakposlist = self._myControl.getVanadiumPeakPos(wavelength=wavelength)

# Plot data
clearcanvas = True
xlabel = self._getXLabelFromUnit(unit)
Expand All @@ -809,6 +818,7 @@ def doRebinD(self):
self._plotReducedData(expno, scanno, canvas, \
xlabel, label="Exp %d Scan %d Bin = %.5f" % (expno, scanno, binsize), \
clearcanvas=clearcanvas)
self._plotVanadiumPeaks(canvas, canvas)

return True

Expand Down Expand Up @@ -850,14 +860,25 @@ def doSaveVanRun(self):
def doStripVandiumPeaks(self):
""" Strip vanadium peaks
"""
inputws = self._myReducedPDWs

api.StripVanadiumPeaks(inputws, BackgroundType="Linear",
WorkspaceIndex=0)
# Get exp number an scan number
try:
expno, scanno = self._uiGetExpScanNumber()
except Exception as e:
self._logError("Error to get Exp and Scan due to %s." % (str(e)))
return False

self._myControl.stripVanadiumPeaks(expno, scanno, peaklist)

self._plotVanadiumRun(xlabel, 0, True)

clearcanvas = True
xlabel = self._getXLabelFromUnit(unit)
print "[DB] Unit %s has label %s." % (unit, xlabel)
canvas = self.ui.graphicsView_vanPeaks

self._plotReducedData(expno, scanno, canvas, \
xlabel, label="Exp %d Scan %d Bin = %.5f" % (expno, scanno, binsize), \
clearcanvas=clearcanvas)

raise NotImplementedError("ASAP")

Expand Down Expand Up @@ -1250,7 +1271,18 @@ def _plotReducedData(self, exp, scan, canvas, xlabel, label=None, clearcanvas=Tr
return



def _plotPeakIndicators(self, canvas, peakpositions):
""" On canvas indicate peaks with vertical lines
"""
rangey = canvas.getYRange()

for pos in peakpositions:
vecx = numpy.array([pos, pos])
vecy = numpy.array([rangey[0], rangey[1]])
canvas.addPlot(vecx, vecy, clear=False)

return

def _uiCheckBinningParameters(self, curxmin=None, curxmax=None, curbinsize=None, curunit=None, targetunit=None):
""" check the binning parameters including xmin, xmax, bin size and target unit
Expand Down
52 changes: 26 additions & 26 deletions Code/Mantid/scripts/HFIRPowderReduction/Ui_MainWindow.py
Expand Up @@ -2,8 +2,8 @@

# Form implementation generated from reading ui file 'Ui_MainWindow.ui'
#
# Created: Fri Apr 10 17:21:29 2015
# by: PyQt4 UI code generator 4.11.2
# Created: Thu Apr 16 23:22:05 2015
# by: PyQt4 UI code generator 4.10.4
#
# WARNING! All changes made in this file will be lost!

Expand Down Expand Up @@ -575,39 +575,39 @@ def setupUi(self, MainWindow):
self.line.setFrameShadow(QtGui.QFrame.Sunken)
self.line.setObjectName(_fromUtf8("line"))
self.verticalLayout_6.addWidget(self.line)
self.lineEdit_minD = QtGui.QLineEdit(self.tab_4)
self.lineEdit_min2Theta = QtGui.QLineEdit(self.tab_4)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.lineEdit_minD.sizePolicy().hasHeightForWidth())
self.lineEdit_minD.setSizePolicy(sizePolicy)
self.lineEdit_minD.setObjectName(_fromUtf8("lineEdit_minD"))
self.verticalLayout_6.addWidget(self.lineEdit_minD)
sizePolicy.setHeightForWidth(self.lineEdit_min2Theta.sizePolicy().hasHeightForWidth())
self.lineEdit_min2Theta.setSizePolicy(sizePolicy)
self.lineEdit_min2Theta.setObjectName(_fromUtf8("lineEdit_min2Theta"))
self.verticalLayout_6.addWidget(self.lineEdit_min2Theta)
self.label_4 = QtGui.QLabel(self.tab_4)
self.label_4.setObjectName(_fromUtf8("label_4"))
self.verticalLayout_6.addWidget(self.label_4)
self.lineEdit_maxD = QtGui.QLineEdit(self.tab_4)
self.lineEdit_max2Theta = QtGui.QLineEdit(self.tab_4)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.lineEdit_maxD.sizePolicy().hasHeightForWidth())
self.lineEdit_maxD.setSizePolicy(sizePolicy)
self.lineEdit_maxD.setObjectName(_fromUtf8("lineEdit_maxD"))
self.verticalLayout_6.addWidget(self.lineEdit_maxD)
sizePolicy.setHeightForWidth(self.lineEdit_max2Theta.sizePolicy().hasHeightForWidth())
self.lineEdit_max2Theta.setSizePolicy(sizePolicy)
self.lineEdit_max2Theta.setObjectName(_fromUtf8("lineEdit_max2Theta"))
self.verticalLayout_6.addWidget(self.lineEdit_max2Theta)
self.label_5 = QtGui.QLabel(self.tab_4)
self.label_5.setObjectName(_fromUtf8("label_5"))
self.verticalLayout_6.addWidget(self.label_5)
self.lineEdit_binsizeD = QtGui.QLineEdit(self.tab_4)
self.lineEdit_binsize2Theta = QtGui.QLineEdit(self.tab_4)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.lineEdit_binsizeD.sizePolicy().hasHeightForWidth())
self.lineEdit_binsizeD.setSizePolicy(sizePolicy)
self.lineEdit_binsizeD.setObjectName(_fromUtf8("lineEdit_binsizeD"))
self.verticalLayout_6.addWidget(self.lineEdit_binsizeD)
self.pushButton_rebinD = QtGui.QPushButton(self.tab_4)
self.pushButton_rebinD.setObjectName(_fromUtf8("pushButton_rebinD"))
self.verticalLayout_6.addWidget(self.pushButton_rebinD)
sizePolicy.setHeightForWidth(self.lineEdit_binsize2Theta.sizePolicy().hasHeightForWidth())
self.lineEdit_binsize2Theta.setSizePolicy(sizePolicy)
self.lineEdit_binsize2Theta.setObjectName(_fromUtf8("lineEdit_binsize2Theta"))
self.verticalLayout_6.addWidget(self.lineEdit_binsize2Theta)
self.pushButton_rebin2Theta = QtGui.QPushButton(self.tab_4)
self.pushButton_rebin2Theta.setObjectName(_fromUtf8("pushButton_rebin2Theta"))
self.verticalLayout_6.addWidget(self.pushButton_rebin2Theta)
spacerItem23 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Preferred)
self.verticalLayout_6.addItem(spacerItem23)
self.pushButton_stripVanPeaks = QtGui.QPushButton(self.tab_4)
Expand Down Expand Up @@ -761,7 +761,7 @@ def setupUi(self, MainWindow):
self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 1115, 25))
self.menubar.setGeometry(QtCore.QRect(0, 0, 1115, 22))
self.menubar.setObjectName(_fromUtf8("menubar"))
self.menuFile = QtGui.QMenu(self.menubar)
self.menuFile.setObjectName(_fromUtf8("menuFile"))
Expand Down Expand Up @@ -802,7 +802,7 @@ def setupUi(self, MainWindow):
self.menubar.addAction(self.menuHelp.menuAction())

self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(1)
self.tabWidget.setCurrentIndex(4)
QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):
Expand Down Expand Up @@ -872,10 +872,10 @@ def retranslateUi(self, MainWindow):
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_merge), _translate("MainWindow", "Multiple Scans", None))
self.label_2.setText(_translate("MainWindow", "Vanadium Peak List", None))
self.pushButton_resetVanPeakList.setText(_translate("MainWindow", "Reset Vanadium Peaks List", None))
self.label_3.setText(_translate("MainWindow", "Minimum d-Spacing", None))
self.label_4.setText(_translate("MainWindow", "Maximum d-Spacing", None))
self.label_5.setText(_translate("MainWindow", "Bin size in d-Spacing", None))
self.pushButton_rebinD.setText(_translate("MainWindow", "Rebin", None))
self.label_3.setText(_translate("MainWindow", "Minimum 2Theta (Degrees)", None))
self.label_4.setText(_translate("MainWindow", "Maximum 2Theta (Degrees)", None))
self.label_5.setText(_translate("MainWindow", "Bin size in 2Theta", None))
self.pushButton_rebin2Theta.setText(_translate("MainWindow", "Plot", None))
self.pushButton_stripVanPeaks.setText(_translate("MainWindow", "Strip Vanadium Peaks", None))
self.pushButton_saveVanRun.setText(_translate("MainWindow", "Save", None))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4), _translate("MainWindow", "Vanadium", None))
Expand Down

0 comments on commit a970a39

Please sign in to comment.