def stitch_data(self, input_file, output_dir, q_min, q_step): from LargeScaleStructures.data_stitching import DataSet, Stitcher #, RangeSelector # Identify the data sets to stitch and order them workspace_list = [] _list_name = [] _list_ts = [] ws_list = AnalysisDataService.getObjectNames() for item in ws_list: if item.endswith('ts'): (_name, _ts) = item.split('_#') _list_name.append(item) _list_ts.append(_ts) _name_ts = zip(_list_ts, _list_name) _name_ts.sort() _ts_sorted, workspace_list = zip(*_name_ts) # Stitch the data s = Stitcher() q_max = 0 for item in workspace_list: data = DataSet(item) data.load(True, True) dummy_x_min, x_max = data.get_range() if x_max > q_max: q_max = x_max s.append(data) s.set_reference(0) s.compute() # Apply the scaling factors for data in s._data_sets: Scale(InputWorkspace=str(data), OutputWorkspace=data._ws_scaled, Operation="Multiply", Factor=data.get_scale()) SaveAscii(InputWorkspace=str(data), Filename=os.path.join(output_dir, '%s.txt' % str(data))) output_file = input_file.replace('.xml', '_reprocessed.txt') Logger("REFLReprocess").notice("Saving to %s" % output_file) output_ws = _average_y_of_same_x_(q_min, q_step, q_max) SaveAscii(InputWorkspace=output_ws, Filename=output_file)
def plot_result(self): """ Plot the scaled data sets """ pol_dict = {"Off Off" : ReflData.OFF_OFF, "On Off" : ReflData.ON_OFF, "Off On" : ReflData.OFF_ON, "On On" : ReflData.ON_ON } for pol in pol_dict.keys(): s = Stitcher() ws_list = [] for item in self._workspace_list: d = item.get_user_data( pol_dict[pol] ) if d is not None: ws_list.append(d.get_scaled_ws()) s.append(d) if len(ws_list)>0: combined_ws = "ref_%s" % pol.replace(" ", "_") if self._settings.instrument_name == "REFL": combined_ws = "ref_combined" s.get_scaled_data(combined_ws) plot_name = '%s: %s' % (self._graph, pol) g = mantidplot.graph(plot_name) if g is not None: continue g = mantidplot.plotSpectrum(ws_list, [0], True) g.setName(plot_name) l=g.activeLayer() l.logYlinX() if self._settings.instrument_name == "REFL": l.setTitle("Reflectivity") else: l.setTitle("Polarization state: %s" % pol)
def stitch_data(self, input_file, output_dir, q_min, q_step): from LargeScaleStructures.data_stitching import DataSet, Stitcher, RangeSelector # Identify the data sets to stitch and order them workspace_list = [] _list_name = [] _list_ts = [] ws_list = AnalysisDataService.getObjectNames() for item in ws_list: if item.endswith('ts'): (_name,_ts) = item.split('_#') _list_name.append(item) _list_ts.append(_ts) _name_ts = zip(_list_ts, _list_name) _name_ts.sort() _ts_sorted, workspace_list = zip(*_name_ts) # Stitch the data s = Stitcher() q_max = 0 for item in workspace_list: data = DataSet(item) data.load(True, True) x_min, x_max = data.get_range() if x_max > q_max: q_max = x_max s.append(data) s.set_reference(0) s.compute() # Apply the scaling factors for data in s._data_sets: Scale(InputWorkspace=str(data), OutputWorkspace=data._ws_scaled, Operation="Multiply", Factor=data.get_scale()) SaveAscii(InputWorkspace=str(data), Filename=os.path.join(output_dir, '%s.txt' % str(data))) output_file = input_file.replace('.xml', '_reprocessed.txt') Logger("REFLReprocess").notice("Saving to %s" % output_file) output_ws = _average_y_of_same_x_(q_min, q_step, q_max) SaveAscii(InputWorkspace=output_ws, Filename=output_file)
def plot_result(self): """ Plot the scaled data sets """ pol_dict = { "Off Off": ReflData.OFF_OFF, "On Off": ReflData.ON_OFF, "Off On": ReflData.OFF_ON, "On On": ReflData.ON_ON } for pol in pol_dict.keys(): s = Stitcher() ws_list = [] for item in self._workspace_list: d = item.get_user_data(pol_dict[pol]) if d is not None: ws_list.append(d.get_scaled_ws()) s.append(d) if len(ws_list) > 0: combined_ws = "ref_%s" % pol.replace(" ", "_") if self._settings.instrument_name == "REFL": combined_ws = "ref_combined" s.get_scaled_data(combined_ws) plot_name = '%s: %s' % (self._graph, pol) g = mantidplot.graph(plot_name) if g is not None: continue g = mantidplot.plotSpectrum(ws_list, [0], True) g.setName(plot_name) l = g.activeLayer() l.logYlinX() if self._settings.instrument_name == "REFL": l.setTitle("Reflectivity") else: l.setTitle("Polarization state: %s" % pol)
def _apply(self): """ Perform auto-scaling """ # Update data sets, in case the user typed in a file name without using the browse button if self._low_q_modified: self._update_low_q() if self._medium_q_modified: self._update_medium_q() if self._high_q_modified: self._update_high_q() s = Stitcher() if self._low_q_data is not None: xmin = util._check_and_get_float_line_edit( self._content.low_min_edit) xmax = util._check_and_get_float_line_edit( self._content.low_max_edit) self._low_q_data.set_range(xmin, xmax) s.append(self._low_q_data) if self._referenceID == 0: scale = util._check_and_get_float_line_edit( self._content.low_scale_edit) self._low_q_data.set_scale(scale) if self._medium_q_data is not None: s.append(self._medium_q_data) if self._referenceID == 1: scale = util._check_and_get_float_line_edit( self._content.medium_scale_edit) self._medium_q_data.set_scale(scale) if self._high_q_data is not None: xmin = util._check_and_get_float_line_edit( self._content.medium_min_edit) xmax = util._check_and_get_float_line_edit( self._content.medium_max_edit) self._high_q_data.set_range(xmin, xmax) s.append(self._high_q_data) if self._referenceID == 2: scale = util._check_and_get_float_line_edit( self._content.high_scale_edit) self._high_q_data.set_scale(scale) if s.size() == 0: return s.set_reference(self._referenceID) s.compute() # Update scaling factor if self._low_q_data is not None: self._content.low_scale_edit.setText( str(self._low_q_data.get_scale())) if self._medium_q_data is not None: self._content.medium_scale_edit.setText( str(self._medium_q_data.get_scale())) if self._high_q_data is not None: self._content.high_scale_edit.setText( str(self._high_q_data.get_scale())) self._stitcher = s self.plot_result()
def _scale_data_sets(self): """ Perform auto-scaling """ scale_to_unity = self._content.scale_to_one_chk.isChecked() min_q_unity = float(self._content.min_q_unity_edit.text()) max_q_unity = float(self._content.max_q_unity_edit.text()) s = Stitcher() refID = 0 # Get reference cross-section ref_pol = ReflData.OFF_OFF if self._content.off_on_radio.isChecked(): ref_pol = ReflData.OFF_ON elif self._content.on_off_radio.isChecked(): ref_pol = ReflData.ON_OFF elif self._content.on_on_radio.isChecked(): ref_pol = ReflData.ON_ON for i in range(len(self._workspace_list)): item = self._workspace_list[i] data = DataSet(item.name) data.load(True, True) item.set_user_data(data) # Set skipped points for all cross-section xmin, xmax = item.update_skipped() if item.is_selected(): data.set_scale(item.get_scale()) refID = i if scale_to_unity: scale = data.scale_to_unity(max(xmin,min_q_unity), min(xmax,max_q_unity)) data.set_scale(scale) item.set_scale(scale) ref_data = item.get_user_data(ref_pol) if ref_data is None: QtGui.QMessageBox.warning(self, "Invalid choice of reference cross-section", "The selected cross-section is empty, please select another one") return s.append(ref_data) if s.size()==0: Logger("Stitcher").notice("No data to scale") return s.set_reference(refID) s.compute() for item in self._workspace_list: data = item.get_user_data(ref_pol) xmin, xmax = item.get_common_range() data.apply_scale(xmin=xmin, xmax=xmax) scale = data.get_scale() item.set_scale(scale) self._stitcher = s self.plot_result()
def _apply(self): """ Perform auto-scaling """ # Update data sets, in case the user typed in a file name without using the browse button if self._low_q_modified: self._update_low_q() if self._medium_q_modified: self._update_medium_q() if self._high_q_modified: self._update_high_q() s = Stitcher() if self._low_q_data is not None: xmin = util._check_and_get_float_line_edit(self._content.low_min_edit) xmax = util._check_and_get_float_line_edit(self._content.low_max_edit) self._low_q_data.set_range(xmin,xmax) s.append(self._low_q_data) if self._referenceID==0: scale = util._check_and_get_float_line_edit(self._content.low_scale_edit) self._low_q_data.set_scale(scale) if self._medium_q_data is not None: s.append(self._medium_q_data) if self._referenceID==1: scale = util._check_and_get_float_line_edit(self._content.medium_scale_edit) self._medium_q_data.set_scale(scale) if self._high_q_data is not None: xmin = util._check_and_get_float_line_edit(self._content.medium_min_edit) xmax = util._check_and_get_float_line_edit(self._content.medium_max_edit) self._high_q_data.set_range(xmin,xmax) s.append(self._high_q_data) if self._referenceID==2: scale = util._check_and_get_float_line_edit(self._content.high_scale_edit) self._high_q_data.set_scale(scale) if s.size()==0: return s.set_reference(self._referenceID) s.compute() # Update scaling factor if self._low_q_data is not None: self._content.low_scale_edit.setText(str(self._low_q_data.get_scale())) if self._medium_q_data is not None: self._content.medium_scale_edit.setText(str(self._medium_q_data.get_scale())) if self._high_q_data is not None: self._content.high_scale_edit.setText(str(self._high_q_data.get_scale())) self._stitcher = s self.plot_result()
def _scale_data_sets(self): """ Perform auto-scaling """ scale_to_unity = self._content.scale_to_one_chk.isChecked() min_q_unity = float(self._content.min_q_unity_edit.text()) max_q_unity = float(self._content.max_q_unity_edit.text()) s = Stitcher() refID = 0 # Get reference cross-section ref_pol = ReflData.OFF_OFF if self._content.off_on_radio.isChecked(): ref_pol = ReflData.OFF_ON elif self._content.on_off_radio.isChecked(): ref_pol = ReflData.ON_OFF elif self._content.on_on_radio.isChecked(): ref_pol = ReflData.ON_ON for i in range(len(self._workspace_list)): item = self._workspace_list[i] data = DataSet(item.name) data.load(True, True) item.set_user_data(data) # Set skipped points for all cross-section xmin, xmax = item.update_skipped() if item.is_selected(): data.set_scale(item.get_scale()) refID = i if scale_to_unity: scale = data.scale_to_unity(max(xmin,min_q_unity), min(xmax,max_q_unity)) data.set_scale(scale) item.set_scale(scale) ref_data = item.get_user_data(ref_pol) if ref_data is None: QtGui.QMessageBox.warning(self,\ "Invalid choice of reference cross-section",\ "The selected cross-section is empty, please select another one") return s.append(ref_data) if s.size()==0: Logger("Stitcher").notice("No data to scale") return s.set_reference(refID) s.compute() for item in self._workspace_list: data = item.get_user_data(ref_pol) xmin, xmax = item.get_common_range() data.apply_scale(xmin=xmin, xmax=xmax) scale = data.get_scale() item.set_scale(scale) self._stitcher = s self.plot_result()