diff --git a/Code/Mantid/scripts/Interface/reduction_gui/reduction/reflectometer/refl_reduction.py b/Code/Mantid/scripts/Interface/reduction_gui/reduction/reflectometer/refl_reduction.py index a87d5e0a66bd4d700f2e32515d096c241b0f3b0f..12099d352683767085c5c7f49037f43623d23cf9 100644 --- a/Code/Mantid/scripts/Interface/reduction_gui/reduction/reflectometer/refl_reduction.py +++ b/Code/Mantid/scripts/Interface/reduction_gui/reduction/reflectometer/refl_reduction.py @@ -30,10 +30,13 @@ class REFLReductionScripter(BaseReductionScripter): script = "# %s reduction script\n" % self.instrument_name script += "# Script automatically generated on %s\n\n" % time.ctime(time.time()) + script += "import os\n" script += "from MantidFramework import *\n" script += "mtd.initialise(False)\n" script += "from mantidsimple import *\n\n" + script += "REF_RED_OUTPUT_MESSAGE = ''\n\n" + for item in self._observers: if item.state() is not None: script += str(item.state()) diff --git a/Code/Mantid/scripts/Interface/reduction_gui/reduction/reflectometer/refm_data_script.py b/Code/Mantid/scripts/Interface/reduction_gui/reduction/reflectometer/refm_data_script.py index 8db35eed79dddab06bf0b8c0b3b0d7ac01aa8af9..7343d7fd3143deaa45b8af9eaf5227111f5d3fd0 100644 --- a/Code/Mantid/scripts/Interface/reduction_gui/reduction/reflectometer/refm_data_script.py +++ b/Code/Mantid/scripts/Interface/reduction_gui/reduction/reflectometer/refm_data_script.py @@ -14,10 +14,10 @@ class DataSets(BaseScriptElement): DataTofRange = [10700., 24500.] crop_TOF_range = True - data_x_range_flag = True + data_x_range_flag = False data_x_range = [115, 210] - norm_x_range_flag = True + norm_x_range_flag = False norm_x_range = [90, 160] NormFlag = True @@ -47,6 +47,8 @@ class DataSets(BaseScriptElement): detector_angle_offset = 0.0 set_direct_pixel = False direct_pixel = 0.0 + + output_dir = '' def __init__(self): super(DataSets, self).__init__() @@ -104,7 +106,22 @@ class DataSets(BaseScriptElement): script += " OutputWorkspace='reflectivity_Off_Off_%s')" % str(self.data_files[0]) script += "\n" - script += "REF_RED_OUTPUT_MESSAGE=a.getPropertyValue('OutputMessage')\n" + script += "REF_RED_OUTPUT_MESSAGE += a.getPropertyValue('OutputMessage')\n" + + # Save the reduced data + script += "ws_list = ['reflectivity_Off_Off_%s',\n" % str(self.data_files[0]) + script += " 'reflectivity_On_Off_%s',\n" % str(self.data_files[0]) + script += " 'reflectivity_Off_On_%s',\n" % str(self.data_files[0]) + script += " 'reflectivity_On_On_%s']\n" % str(self.data_files[0]) + + script += "outdir = '%s'\n" % self.output_dir + script += "if not os.path.isdir(outdir):\n" + script += " outdir = os.path.expanduser('~')\n\n" + + script += "for ws in ws_list:\n" + script += " if mtd.workspaceExists(ws):\n" + script += " outpath = os.path.join(outdir, ws+'.txt')\n" + script += " SaveAscii(Filename=outpath, InputWorkspace=ws, Separator='Space')\n\n" return script @@ -201,6 +218,8 @@ class DataSets(BaseScriptElement): xml += "<set_direct_pixel>%s</set_direct_pixel>\n" % str(self.set_direct_pixel) xml += "<direct_pixel>%s</direct_pixel>\n" % str(self.direct_pixel) + xml += "<output_dir>%s</output_dir>\n" % str(self.output_dir) + xml += "</RefMData>\n" return xml @@ -224,7 +243,7 @@ class DataSets(BaseScriptElement): #low resolution range - self.data_x_range_flag = BaseScriptElement.getBoolElement(instrument_dom, "data_x_range_flag", + self.data_x_range_flag = BaseScriptElement.getBoolElement(instrument_dom, "x_range_flag", default=DataSets.data_x_range_flag) self.data_x_range = [BaseScriptElement.getIntElement(instrument_dom, "x_min_pixel"), @@ -310,6 +329,10 @@ class DataSets(BaseScriptElement): "direct_pixel", default=DataSets.direct_pixel) + self.output_dir = BaseScriptElement.getStringElement(instrument_dom, + "output_dir", + default=DataSets.output_dir) + def reset(self): """ Reset state @@ -349,4 +372,6 @@ class DataSets(BaseScriptElement): self.detector_angle_offset = DataSets.detector_angle_offset self.set_direct_pixel = DataSets.set_direct_pixel self.direct_pixel = DataSets.direct_pixel + + self.output_dir = DataSets.output_dir diff --git a/Code/Mantid/scripts/Interface/reduction_gui/widgets/reflectometer/refl_data_simple.py b/Code/Mantid/scripts/Interface/reduction_gui/widgets/reflectometer/refl_data_simple.py index 6090623af93ad28df0dad71e0e7820fc4bdc42e9..6e0f396ba0b6dbdf63572f5b60fb17332e108ac5 100644 --- a/Code/Mantid/scripts/Interface/reduction_gui/widgets/reflectometer/refl_data_simple.py +++ b/Code/Mantid/scripts/Interface/reduction_gui/widgets/reflectometer/refl_data_simple.py @@ -190,6 +190,9 @@ class DataReflWidget(BaseWidget): self.connect(self._summary.data_peak_from_pixel, QtCore.SIGNAL("textChanged(QString)"), self._data_peak_range_changed) self.connect(self._summary.data_peak_to_pixel, QtCore.SIGNAL("textChanged(QString)"), self._data_peak_range_changed) + # Output directory + self._summary.outdir_edit.setText(os.path.expanduser('~')) + self.connect(self._summary.outdir_browse_button, QtCore.SIGNAL("clicked()"), self._output_dir_browse) # Set up the automated reduction options self._summary.auto_reduce_check.setChecked(False) @@ -223,6 +226,14 @@ class DataReflWidget(BaseWidget): if not self._settings.debug and not os.path.isdir("/SNS/%s" % self.instrument_name): self._summary.auto_reduce_check.hide() + def _output_dir_browse(self): + output_dir = QtGui.QFileDialog.getExistingDirectory(self, "Output Directory - Choose a directory", + os.path.expanduser('~'), + QtGui.QFileDialog.ShowDirsOnly + | QtGui.QFileDialog.DontResolveSymlinks) + if output_dir: + self._summary.outdir_edit.setText(output_dir) + def _run_number_changed(self): self._edit_event(ctrl=self._summary.data_run_number_edit) if IS_IN_MANTIDPLOT and self.short_name == "REFM": @@ -388,6 +399,11 @@ class DataReflWidget(BaseWidget): self._summary.direct_pixel_check.hide() self._summary.direct_pixel_edit.hide() self._summary.q_bins_label.hide() + + # Output directory + self._summary.outdir_label.hide() + self._summary.outdir_edit.hide() + self._summary.outdir_browse_button.hide() else: self.instrument_name = "REF_M" self._summary.center_pix_radio.show() @@ -896,6 +912,10 @@ class DataReflWidget(BaseWidget): self._summary.angle_radio.setChecked(True) self._scattering_angle_changed() + # Output directory + if hasattr(state, "output_dir"): + self._summary.outdir_edit.setText(str(state.output_dir)) + self._reset_warnings() self._summary.data_run_number_edit.setText(str(','.join([str(i) for i in state.data_files]))) @@ -937,9 +957,8 @@ class DataReflWidget(BaseWidget): data.q_bins = q_bins data.q_log = self._summary.log_scale_chk.isChecked() - ## - # Add here states that are relevant to the interface (all the runs) - ## + if hasattr(data, "output_dir"): + data.output_dir = self._summary.outdir_edit.text() state_list.append(data) state.data_sets = state_list diff --git a/Code/Mantid/scripts/Interface/ui/reflectometer/data_refl_simple.ui b/Code/Mantid/scripts/Interface/ui/reflectometer/data_refl_simple.ui index ca1e606bf7023e8931ad6d6ec81248a437e893c7..80b02a26aefe10d79e4bd2b30d7ba3c2b483bbbb 100644 --- a/Code/Mantid/scripts/Interface/ui/reflectometer/data_refl_simple.ui +++ b/Code/Mantid/scripts/Interface/ui/reflectometer/data_refl_simple.ui @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>1298</width> - <height>1303</height> + <height>1401</height> </rect> </property> <property name="windowTitle"> @@ -37,7 +37,7 @@ <x>0</x> <y>0</y> <width>1280</width> - <height>1285</height> + <height>1383</height> </rect> </property> <layout class="QVBoxLayout" name="verticalLayout_7"> @@ -192,7 +192,7 @@ <item> <widget class="QGroupBox" name="groupBox"> <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> @@ -3137,7 +3137,7 @@ p, li { white-space: pre-wrap; } <item> <widget class="QGroupBox" name="groupBox_4"> <property name="title"> - <string>Output Binning</string> + <string>Output</string> </property> <layout class="QVBoxLayout" name="verticalLayout_8"> <item> @@ -3155,13 +3155,13 @@ p, li { white-space: pre-wrap; } </property> <property name="minimumSize"> <size> - <width>90</width> + <width>150</width> <height>0</height> </size> </property> <property name="maximumSize"> <size> - <width>90</width> + <width>150</width> <height>16777215</height> </size> </property> @@ -3210,6 +3210,24 @@ p, li { white-space: pre-wrap; } </item> <item> <widget class="QLabel" name="q_bins_label"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>150</width> + <height>0</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>150</width> + <height>16777215</height> + </size> + </property> <property name="text"> <string>Number of bins </string> </property> @@ -3305,15 +3323,21 @@ p, li { white-space: pre-wrap; } </property> <item> <widget class="QLabel" name="angle_offset_label"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="minimumSize"> <size> - <width>90</width> + <width>150</width> <height>0</height> </size> </property> <property name="maximumSize"> <size> - <width>90</width> + <width>150</width> <height>16777215</height> </size> </property> @@ -3370,7 +3394,7 @@ p, li { white-space: pre-wrap; } <item> <widget class="QLabel" name="angle_offset_unit_label"> <property name="text"> - <string>degrees</string> + <string> degrees</string> </property> </widget> </item> @@ -3389,6 +3413,67 @@ p, li { white-space: pre-wrap; } </item> </layout> </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_19"> + <property name="spacing"> + <number>0</number> + </property> + <item> + <widget class="QLabel" name="outdir_label"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>150</width> + <height>0</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>150</width> + <height>16777215</height> + </size> + </property> + <property name="text"> + <string>Output directory</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="outdir_edit"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="outdir_browse_button"> + <property name="minimumSize"> + <size> + <width>150</width> + <height>0</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>150</width> + <height>16777215</height> + </size> + </property> + <property name="text"> + <string>Browse</string> + </property> + </widget> + </item> + </layout> + </item> </layout> </widget> </item> diff --git a/Code/Mantid/scripts/Interface/ui/reflectometer/ui_data_refl_simple.py b/Code/Mantid/scripts/Interface/ui/reflectometer/ui_data_refl_simple.py index 92212cac8d1557406a67c5539217e2dd98f9e21f..d3640bf4e7ea643ea56612bc92984a2026575905 100644 --- a/Code/Mantid/scripts/Interface/ui/reflectometer/ui_data_refl_simple.py +++ b/Code/Mantid/scripts/Interface/ui/reflectometer/ui_data_refl_simple.py @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file 'ui/reflectometer/data_refl_simple.ui' # -# Created: Fri Mar 2 15:14:30 2012 +# Created: Mon Mar 5 11:40:35 2012 # by: PyQt4 UI code generator 4.7.4 # # WARNING! All changes made in this file will be lost! @@ -12,7 +12,7 @@ from PyQt4 import QtCore, QtGui class Ui_Frame(object): def setupUi(self, Frame): Frame.setObjectName("Frame") - Frame.resize(1298, 1303) + Frame.resize(1298, 1401) Frame.setFrameShape(QtGui.QFrame.NoFrame) Frame.setFrameShadow(QtGui.QFrame.Raised) self.verticalLayout_5 = QtGui.QVBoxLayout(Frame) @@ -23,7 +23,7 @@ class Ui_Frame(object): self.scrollArea.setWidgetResizable(True) self.scrollArea.setObjectName("scrollArea") self.scrollAreaWidgetContents = QtGui.QWidget(self.scrollArea) - self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 1280, 1285)) + self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 1280, 1383)) self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents") self.verticalLayout_7 = QtGui.QVBoxLayout(self.scrollAreaWidgetContents) self.verticalLayout_7.setObjectName("verticalLayout_7") @@ -94,7 +94,7 @@ class Ui_Frame(object): self.horizontalLayout_17.addLayout(self.verticalLayout_10) self.verticalLayout_4.addWidget(self.instrument_group_box) self.groupBox = QtGui.QGroupBox(self.scrollAreaWidgetContents) - sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Expanding) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth()) @@ -1065,8 +1065,8 @@ class Ui_Frame(object): sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.q_min_label.sizePolicy().hasHeightForWidth()) self.q_min_label.setSizePolicy(sizePolicy) - self.q_min_label.setMinimumSize(QtCore.QSize(90, 0)) - self.q_min_label.setMaximumSize(QtCore.QSize(90, 16777215)) + self.q_min_label.setMinimumSize(QtCore.QSize(150, 0)) + self.q_min_label.setMaximumSize(QtCore.QSize(150, 16777215)) self.q_min_label.setObjectName("q_min_label") self.horizontalLayout_14.addWidget(self.q_min_label) self.q_min_edit = QtGui.QLineEdit(self.groupBox_4) @@ -1080,6 +1080,13 @@ class Ui_Frame(object): self.q_min_unit_label.setObjectName("q_min_unit_label") self.horizontalLayout_14.addWidget(self.q_min_unit_label) self.q_bins_label = QtGui.QLabel(self.groupBox_4) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.q_bins_label.sizePolicy().hasHeightForWidth()) + self.q_bins_label.setSizePolicy(sizePolicy) + self.q_bins_label.setMinimumSize(QtCore.QSize(150, 0)) + self.q_bins_label.setMaximumSize(QtCore.QSize(150, 16777215)) self.q_bins_label.setObjectName("q_bins_label") self.horizontalLayout_14.addWidget(self.q_bins_label) self.q_step_label = QtGui.QLabel(self.groupBox_4) @@ -1107,8 +1114,13 @@ class Ui_Frame(object): self.horizontalLayout_16.setSpacing(0) self.horizontalLayout_16.setObjectName("horizontalLayout_16") self.angle_offset_label = QtGui.QLabel(self.groupBox_4) - self.angle_offset_label.setMinimumSize(QtCore.QSize(90, 0)) - self.angle_offset_label.setMaximumSize(QtCore.QSize(90, 16777215)) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.angle_offset_label.sizePolicy().hasHeightForWidth()) + self.angle_offset_label.setSizePolicy(sizePolicy) + self.angle_offset_label.setMinimumSize(QtCore.QSize(150, 0)) + self.angle_offset_label.setMaximumSize(QtCore.QSize(150, 16777215)) self.angle_offset_label.setObjectName("angle_offset_label") self.horizontalLayout_16.addWidget(self.angle_offset_label) self.angle_offset_edit = QtGui.QLineEdit(self.groupBox_4) @@ -1130,6 +1142,33 @@ class Ui_Frame(object): spacerItem17 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_16.addItem(spacerItem17) self.verticalLayout_8.addLayout(self.horizontalLayout_16) + self.horizontalLayout_19 = QtGui.QHBoxLayout() + self.horizontalLayout_19.setSpacing(0) + self.horizontalLayout_19.setObjectName("horizontalLayout_19") + self.outdir_label = QtGui.QLabel(self.groupBox_4) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.outdir_label.sizePolicy().hasHeightForWidth()) + self.outdir_label.setSizePolicy(sizePolicy) + self.outdir_label.setMinimumSize(QtCore.QSize(150, 0)) + self.outdir_label.setMaximumSize(QtCore.QSize(150, 16777215)) + self.outdir_label.setObjectName("outdir_label") + self.horizontalLayout_19.addWidget(self.outdir_label) + self.outdir_edit = QtGui.QLineEdit(self.groupBox_4) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.outdir_edit.sizePolicy().hasHeightForWidth()) + self.outdir_edit.setSizePolicy(sizePolicy) + self.outdir_edit.setObjectName("outdir_edit") + self.horizontalLayout_19.addWidget(self.outdir_edit) + self.outdir_browse_button = QtGui.QPushButton(self.groupBox_4) + self.outdir_browse_button.setMinimumSize(QtCore.QSize(150, 0)) + self.outdir_browse_button.setMaximumSize(QtCore.QSize(150, 16777215)) + self.outdir_browse_button.setObjectName("outdir_browse_button") + self.horizontalLayout_19.addWidget(self.outdir_browse_button) + self.verticalLayout_8.addLayout(self.horizontalLayout_19) self.verticalLayout_4.addWidget(self.groupBox_4) spacerItem18 = QtGui.QSpacerItem(20, 25, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) self.verticalLayout_4.addItem(spacerItem18) @@ -1258,7 +1297,7 @@ class Ui_Frame(object): "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-weight:600;color:rgb(0,153,153);\">Click Save To List to apply your changes → </span></p></body></html>", None, QtGui.QApplication.UnicodeUTF8)) self.add_dataset_btn.setToolTip(QtGui.QApplication.translate("Frame", "Click to add the data set above to the reduction list", None, QtGui.QApplication.UnicodeUTF8)) self.add_dataset_btn.setText(QtGui.QApplication.translate("Frame", "Save to list", None, QtGui.QApplication.UnicodeUTF8)) - self.groupBox_4.setTitle(QtGui.QApplication.translate("Frame", "Output Binning", None, QtGui.QApplication.UnicodeUTF8)) + self.groupBox_4.setTitle(QtGui.QApplication.translate("Frame", "Output", None, QtGui.QApplication.UnicodeUTF8)) self.q_min_label.setText(QtGui.QApplication.translate("Frame", "Q min", None, QtGui.QApplication.UnicodeUTF8)) self.q_min_edit.setText(QtGui.QApplication.translate("Frame", "0", None, QtGui.QApplication.UnicodeUTF8)) self.q_min_unit_label.setText(QtGui.QApplication.translate("Frame", " 1/Å", None, QtGui.QApplication.UnicodeUTF8)) @@ -1271,7 +1310,9 @@ class Ui_Frame(object): self.angle_offset_edit.setText(QtGui.QApplication.translate("Frame", "0", None, QtGui.QApplication.UnicodeUTF8)) self.angle_offset_pm_label.setText(QtGui.QApplication.translate("Frame", " ± ", None, QtGui.QApplication.UnicodeUTF8)) self.angle_offset_error_edit.setText(QtGui.QApplication.translate("Frame", "0", None, QtGui.QApplication.UnicodeUTF8)) - self.angle_offset_unit_label.setText(QtGui.QApplication.translate("Frame", "degrees", None, QtGui.QApplication.UnicodeUTF8)) + self.angle_offset_unit_label.setText(QtGui.QApplication.translate("Frame", " degrees", None, QtGui.QApplication.UnicodeUTF8)) + self.outdir_label.setText(QtGui.QApplication.translate("Frame", "Output directory", None, QtGui.QApplication.UnicodeUTF8)) + self.outdir_browse_button.setText(QtGui.QApplication.translate("Frame", "Browse", None, QtGui.QApplication.UnicodeUTF8)) self.auto_reduce_help_label.setText(QtGui.QApplication.translate("Frame", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n" "p, li { white-space: pre-wrap; }\n"