Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #4
0
    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)
Exemple #5
0
    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()
Exemple #6
0
    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()
Exemple #7
0
    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()
Exemple #8
0
    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()