示例#1
0
    def from_xml_element(self, instrument_dom):
        """
            Read in data from XML
            @param xml_str: text to read the data from
        """   
        #Peak selection
        self.DataPeakSelectionType = BaseScriptElement.getStringElement(instrument_dom, "peak_selection_type")
        
        #Peak from/to pixels
        self.DataPeakPixels = [BaseScriptElement.getIntElement(instrument_dom, "from_peak_pixels"),
                               BaseScriptElement.getIntElement(instrument_dom, "to_peak_pixels")]
        
        
        #data metadata
        _tthd_value = BaseScriptElement.getStringElement(instrument_dom, "tthd_value")
        if (_tthd_value == ''):
            _tthd_value = 'N/A'
        self.tthd_value = _tthd_value
        
        _ths_value = BaseScriptElement.getStringElement(instrument_dom, "ths_value")
        if (_ths_value == ''):
            _ths_value = 'N/A'
        self.ths_value = _ths_value
        
        #low resolution range
        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"),
                             BaseScriptElement.getIntElement(instrument_dom, "x_max_pixel")]
        
        self.norm_x_range_flag = BaseScriptElement.getBoolElement(instrument_dom, "norm_x_range_flag",
                                                                  default=DataSets.norm_x_range_flag)

        self.norm_x_range = [BaseScriptElement.getIntElement(instrument_dom, "norm_x_min"),
                             BaseScriptElement.getIntElement(instrument_dom, "norm_x_max")]
        
        #discrete selection string
        self.DataPeakDiscreteSelection = BaseScriptElement.getStringElement(instrument_dom, "peak_discrete_selection")
        
        #background flag
        self.DataBackgroundFlag = BaseScriptElement.getBoolElement(instrument_dom,
                                                                   "background_flag",
                                                                   default=DataSets.DataBackgroundFlag)

        #background from/to pixels
        self.DataBackgroundRoi = [BaseScriptElement.getIntElement(instrument_dom, "back_roi1_from"),
                                  BaseScriptElement.getIntElement(instrument_dom, "back_roi1_to"),
                                  BaseScriptElement.getIntElement(instrument_dom, "back_roi2_from"),
                                  BaseScriptElement.getIntElement(instrument_dom, "back_roi2_to")]

        #from TOF and to TOF
        self.TofRangeFlag = BaseScriptElement.getBoolElement(instrument_dom, "tof_range_flag", 
                                                             default=DataSets.TofRangeFlag)
        self.DataTofRange = [BaseScriptElement.getFloatElement(instrument_dom, "from_tof_range"),
                             BaseScriptElement.getFloatElement(instrument_dom, "to_tof_range")]

        self.data_files = BaseScriptElement.getIntList(instrument_dom, "data_sets")
            
        #with or without norm 
        self.NormFlag = BaseScriptElement.getBoolElement(instrument_dom, "norm_flag",
                                                         default=DataSets.NormFlag)
        
        #Peak from/to pixels
        self.NormPeakPixels = [BaseScriptElement.getIntElement(instrument_dom, "norm_from_peak_pixels"),
                               BaseScriptElement.getIntElement(instrument_dom, "norm_to_peak_pixels")]

        #background flag
        self.NormBackgroundFlag = BaseScriptElement.getBoolElement(instrument_dom, 
                                                                   "norm_background_flag", 
                                                                   default=DataSets.NormBackgroundFlag)
        
        #background from/to pixels
        self.NormBackgroundRoi = [BaseScriptElement.getIntElement(instrument_dom, "norm_from_back_pixels"),
                                  BaseScriptElement.getIntElement(instrument_dom, "norm_to_back_pixels")]
        
        self.norm_file = BaseScriptElement.getIntElement(instrument_dom, "norm_dataset")
    
        # Q cut
        self.q_min = BaseScriptElement.getFloatElement(instrument_dom, "q_min", default=DataSets.q_min)    
        self.q_step = BaseScriptElement.getFloatElement(instrument_dom, "q_step", default=DataSets.q_step)
        self.auto_q_binning = BaseScriptElement.getBoolElement(instrument_dom, "auto_q_binning", default=False)
    
        # Angle offset
        self.angle_offset = BaseScriptElement.getFloatElement(instrument_dom, "angle_offset", default=DataSets.angle_offset)
        self.angle_offset_error = BaseScriptElement.getFloatElement(instrument_dom, "angle_offset_error", default=DataSets.angle_offset_error)        
        
        #scaling factor file and options
        self.scaling_factor_file = BaseScriptElement.getStringElement(instrument_dom, "scaling_factor_file")
        self.slits_width_flag = BaseScriptElement.getBoolElement(instrument_dom, "slits_width_flag")
        self.scaling_factor_file_flag = BaseScriptElement.getBoolElement(instrument_dom, "scaling_factor_flag")
        
        #incident medium selected
        if BaseScriptElement.getStringList(instrument_dom, "incident_medium_list") != []:        
            self.incident_medium_list = BaseScriptElement.getStringList(instrument_dom, "incident_medium_list")
            self.incident_medium_index_selected = BaseScriptElement.getIntElement(instrument_dom, "incident_medium_index_selected")
        else:
            self.incident_medium_list = ['H2O']
            self.incident_medium_index_selected = 0

        #fourth column (precision)
        self.fourth_column_flag = BaseScriptElement.getBoolElement(instrument_dom, "fourth_column_flag")
        self.fourth_column_dq0 = BaseScriptElement.getFloatElement(instrument_dom, "fourth_column_dq0")
        self.fourth_column_dq_over_q = BaseScriptElement.getFloatElement(instrument_dom, "fourth_column_dq_over_q")
    def from_xml(self, xml_str):
        """
            Read in data from XML
            @param xml_str: text to read the data from
        """
        self.reset()
        dom = xml.dom.minidom.parseString(xml_str)

        instrument_dom = dom.getElementsByTagName("Instrument")[0]
        self.nx_pixels = BaseScriptElement.getIntElement(
            instrument_dom, "nx_pixels", default=ReductionOptions.nx_pixels)
        self.ny_pixels = BaseScriptElement.getIntElement(
            instrument_dom, "ny_pixels", default=ReductionOptions.ny_pixels)
        self.instrument_name = BaseScriptElement.getStringElement(
            instrument_dom, "name")
        self.pixel_size = BaseScriptElement.getFloatElement(
            instrument_dom, "pixel_size", default=ReductionOptions.pixel_size)

        self.sample_detector_distance = BaseScriptElement.getFloatElement(
            instrument_dom,
            "sample_det_dist",
            default=ReductionOptions.sample_detector_distance)
        self.detector_offset = BaseScriptElement.getFloatElement(
            instrument_dom,
            "detector_offset",
            default=ReductionOptions.detector_offset)

        self.wavelength = BaseScriptElement.getFloatElement(
            instrument_dom, "wavelength", default=ReductionOptions.wavelength)
        self.wavelength_spread = BaseScriptElement.getFloatElement(
            instrument_dom,
            "wavelength_spread",
            default=ReductionOptions.wavelength_spread)

        self.solid_angle_corr = BaseScriptElement.getBoolElement(
            instrument_dom,
            "solid_angle_corr",
            default=ReductionOptions.solid_angle_corr)

        # Output directory
        self.use_data_directory = BaseScriptElement.getBoolElement(
            instrument_dom,
            "UseDataDirectory",
            default=ReductionOptions.use_data_directory)
        self.output_directory = BaseScriptElement.getStringElement(
            instrument_dom,
            "OutputDirectory",
            default=ReductionOptions.output_directory)

        # Dark current
        self.dark_current_corr = BaseScriptElement.getBoolElement(
            instrument_dom,
            "dark_current_corr",
            default=ReductionOptions.dark_current_corr)
        self.dark_current_data = BaseScriptElement.getStringElement(
            instrument_dom, "dark_current_data")

        self.n_q_bins = BaseScriptElement.getIntElement(
            instrument_dom, "n_q_bins", default=ReductionOptions.n_q_bins)
        self.n_sub_pix = BaseScriptElement.getIntElement(
            instrument_dom, "n_sub_pix", default=ReductionOptions.n_sub_pix)
        self.log_binning = BaseScriptElement.getBoolElement(
            instrument_dom,
            "log_binning",
            default=ReductionOptions.log_binning)
        self.align_log_with_decades = BaseScriptElement.getBoolElement(
            instrument_dom,
            "align_log_with_decades",
            default=ReductionOptions.align_log_with_decades)
        self.error_weighting = BaseScriptElement.getBoolElement(
            instrument_dom,
            "error_weighting",
            default=ReductionOptions.error_weighting)

        self.n_wedges = BaseScriptElement.getIntElement(
            instrument_dom, "n_wedges", default=ReductionOptions.n_wedges)
        self.wedge_angle = BaseScriptElement.getFloatElement(
            instrument_dom,
            "wedge_angle",
            default=ReductionOptions.wedge_angle)
        self.wedge_offset = BaseScriptElement.getFloatElement(
            instrument_dom,
            "wedge_offset",
            default=ReductionOptions.wedge_offset)

        self.normalization = BaseScriptElement.getIntElement(
            instrument_dom,
            "normalization",
            default=ReductionOptions.normalization)

        # Mask
        element_list = dom.getElementsByTagName("Mask")
        if len(element_list) > 0:
            mask_dom = element_list[0]
            self.top = BaseScriptElement.getIntElement(
                mask_dom, "mask_top", default=ReductionOptions.top)
            self.bottom = BaseScriptElement.getIntElement(
                mask_dom, "mask_bottom", default=ReductionOptions.bottom)
            self.right = BaseScriptElement.getIntElement(
                mask_dom, "mask_right", default=ReductionOptions.right)
            self.left = BaseScriptElement.getIntElement(
                mask_dom, "mask_left", default=ReductionOptions.left)

            self.masked_side = BaseScriptElement.getStringElement(
                mask_dom, "mask_side", default=ReductionOptions.masked_side)

            self.shapes = []
            shapes_dom_list = mask_dom.getElementsByTagName("Shapes")
            if len(shapes_dom_list) > 0:
                shapes_dom = shapes_dom_list[0]
                for item in shapes_dom.getElementsByTagName("rect"):
                    x_min = float(item.getAttribute("x_min"))
                    x_max = float(item.getAttribute("x_max"))
                    y_min = float(item.getAttribute("y_min"))
                    y_max = float(item.getAttribute("y_max"))
                    self.shapes.append(
                        ReductionOptions.RectangleMask(x_min, x_max, y_min,
                                                       y_max))

            self.detector_ids = BaseScriptElement.getIntList(mask_dom,
                                                             "DetectorIDs",
                                                             default=[])
            self.mask_file = BaseScriptElement.getStringElement(
                mask_dom, "mask_file")
            self.use_mask_file = BaseScriptElement.getBoolElement(
                mask_dom,
                "use_mask_file",
                default=ReductionOptions.use_mask_file)

        # Absolute scaling
        element_list = dom.getElementsByTagName("AbsScale")
        if len(element_list) > 0:
            scale_dom = element_list[0]

            self.manual_beam_diam = BaseScriptElement.getBoolElement(
                scale_dom,
                "manual_beam_diam",
                default=ReductionOptions.manual_beam_diam)
            self.scaling_factor = BaseScriptElement.getFloatElement(
                scale_dom,
                "scaling_factor",
                default=ReductionOptions.scaling_factor)
            self.calculate_scale = BaseScriptElement.getBoolElement(
                scale_dom,
                "calculate_scale",
                default=ReductionOptions.calculate_scale)
            self.scaling_direct_file = BaseScriptElement.getStringElement(
                scale_dom, "scaling_direct_file")
            self.scaling_att_trans = BaseScriptElement.getFloatElement(
                scale_dom,
                "scaling_att_trans",
                default=ReductionOptions.scaling_att_trans)
            self.scaling_beam_diam = BaseScriptElement.getFloatElement(
                scale_dom,
                "scaling_beam_diam",
                default=ReductionOptions.scaling_beam_diam)
示例#3
0
    def from_xml_element(self, instrument_dom):
        """
            Read in data from XML
            @param xml_str: text to read the data from
        """
        #Peak selection
        self.DataPeakSelectionType = BaseScriptElement.getStringElement(
            instrument_dom, "peak_selection_type")

        #Peak from/to pixels
        self.DataPeakPixels = [
            BaseScriptElement.getIntElement(instrument_dom,
                                            "from_peak_pixels"),
            BaseScriptElement.getIntElement(instrument_dom, "to_peak_pixels")
        ]

        #data metadata
        _tthd_value = BaseScriptElement.getStringElement(
            instrument_dom, "tthd_value")
        if _tthd_value == '':
            _tthd_value = 'N/A'
        self.tthd_value = _tthd_value

        _ths_value = BaseScriptElement.getStringElement(
            instrument_dom, "ths_value")
        if _ths_value == '':
            _ths_value = 'N/A'
        self.ths_value = _ths_value

        #low resolution range
        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"),
            BaseScriptElement.getIntElement(instrument_dom, "x_max_pixel")
        ]

        self.norm_x_range_flag = BaseScriptElement.getBoolElement(
            instrument_dom,
            "norm_x_range_flag",
            default=DataSets.norm_x_range_flag)

        self.norm_x_range = [
            BaseScriptElement.getIntElement(instrument_dom, "norm_x_min"),
            BaseScriptElement.getIntElement(instrument_dom, "norm_x_max")
        ]

        #discrete selection string
        self.DataPeakDiscreteSelection = BaseScriptElement.getStringElement(
            instrument_dom, "peak_discrete_selection")

        #background flag
        self.DataBackgroundFlag = BaseScriptElement.getBoolElement(
            instrument_dom,
            "background_flag",
            default=DataSets.DataBackgroundFlag)

        #background from/to pixels
        self.DataBackgroundRoi = [
            BaseScriptElement.getIntElement(instrument_dom, "back_roi1_from"),
            BaseScriptElement.getIntElement(instrument_dom, "back_roi1_to"),
            BaseScriptElement.getIntElement(instrument_dom, "back_roi2_from"),
            BaseScriptElement.getIntElement(instrument_dom, "back_roi2_to")
        ]

        #from TOF and to TOF
        self.TofRangeFlag = BaseScriptElement.getBoolElement(
            instrument_dom, "tof_range_flag", default=DataSets.TofRangeFlag)
        self.DataTofRange = [
            BaseScriptElement.getFloatElement(instrument_dom,
                                              "from_tof_range"),
            BaseScriptElement.getFloatElement(instrument_dom, "to_tof_range")
        ]

        self.data_files = BaseScriptElement.getIntList(instrument_dom,
                                                       "data_sets")

        #with or without norm
        self.NormFlag = BaseScriptElement.getBoolElement(
            instrument_dom, "norm_flag", default=DataSets.NormFlag)

        #Peak from/to pixels
        self.NormPeakPixels = [
            BaseScriptElement.getIntElement(instrument_dom,
                                            "norm_from_peak_pixels"),
            BaseScriptElement.getIntElement(instrument_dom,
                                            "norm_to_peak_pixels")
        ]

        #background flag
        self.NormBackgroundFlag = BaseScriptElement.getBoolElement(
            instrument_dom,
            "norm_background_flag",
            default=DataSets.NormBackgroundFlag)

        #background from/to pixels
        self.NormBackgroundRoi = [
            BaseScriptElement.getIntElement(instrument_dom,
                                            "norm_from_back_pixels"),
            BaseScriptElement.getIntElement(instrument_dom,
                                            "norm_to_back_pixels")
        ]

        self.norm_file = BaseScriptElement.getIntElement(
            instrument_dom, "norm_dataset")

        # Q cut
        self.q_min = BaseScriptElement.getFloatElement(instrument_dom,
                                                       "q_min",
                                                       default=DataSets.q_min)
        self.q_step = BaseScriptElement.getFloatElement(
            instrument_dom, "q_step", default=DataSets.q_step)
        self.auto_q_binning = BaseScriptElement.getBoolElement(
            instrument_dom, "auto_q_binning", default=False)

        # overlap_lowest_error
        self.overlap_lowest_error = BaseScriptElement.getBoolElement(
            instrument_dom, "overlap_lowest_error", default=True)
        self.overlap_mean_value = BaseScriptElement.getBoolElement(
            instrument_dom, "overlap_mean_value", default=False)

        # Angle offset
        self.angle_offset = BaseScriptElement.getFloatElement(
            instrument_dom, "angle_offset", default=DataSets.angle_offset)
        self.angle_offset_error = BaseScriptElement.getFloatElement(
            instrument_dom,
            "angle_offset_error",
            default=DataSets.angle_offset_error)

        #scaling factor file and options
        self.scaling_factor_file = BaseScriptElement.getStringElement(
            instrument_dom, "scaling_factor_file")
        self.slits_width_flag = BaseScriptElement.getBoolElement(
            instrument_dom, "slits_width_flag")
        self.scaling_factor_file_flag = BaseScriptElement.getBoolElement(
            instrument_dom, "scaling_factor_flag")

        # geometry correction switch
        self.geometry_correction_switch = BaseScriptElement.getBoolElement(
            instrument_dom, "geometry_correction_switch")

        #incident medium selected
        if BaseScriptElement.getStringList(instrument_dom,
                                           "incident_medium_list") != []:
            self.incident_medium_list = BaseScriptElement.getStringList(
                instrument_dom, "incident_medium_list")
            self.incident_medium_index_selected = BaseScriptElement.getIntElement(
                instrument_dom, "incident_medium_index_selected")
        else:
            self.incident_medium_list = ['H2O']
            self.incident_medium_index_selected = 0

        #fourth column (precision)
        self.fourth_column_flag = BaseScriptElement.getBoolElement(
            instrument_dom, "fourth_column_flag")
        self.fourth_column_dq0 = BaseScriptElement.getFloatElement(
            instrument_dom, "fourth_column_dq0")
        self.fourth_column_dq_over_q = BaseScriptElement.getFloatElement(
            instrument_dom, "fourth_column_dq_over_q")

        # Primary fraction
        self.clocking_from = BaseScriptElement.getIntElement(instrument_dom,
                                                             "clocking_from",
                                                             default=None)
        self.clocking_to = BaseScriptElement.getIntElement(instrument_dom,
                                                           "clocking_to",
                                                           default=None)
    def from_xml(self, xml_str):
        """
            Read in data from XML
            @param xml_str: text to read the data from
        """
        self.reset()
        dom = xml.dom.minidom.parseString(xml_str)

        instrument_dom = dom.getElementsByTagName("Instrument")[0]
        self.nx_pixels = BaseScriptElement.getIntElement(instrument_dom, "nx_pixels",
                                                         default=ReductionOptions.nx_pixels)
        self.ny_pixels = BaseScriptElement.getIntElement(instrument_dom, "ny_pixels",
                                                         default=ReductionOptions.ny_pixels)
        self.instrument_name = BaseScriptElement.getStringElement(
            instrument_dom, "name")
        self.pixel_size = BaseScriptElement.getFloatElement(instrument_dom, "pixel_size",
                                                            default=ReductionOptions.pixel_size)

        self.sample_detector_distance = BaseScriptElement.getFloatElement(instrument_dom, "sample_det_dist",
                                                                          default=ReductionOptions.sample_detector_distance)
        self.detector_offset = BaseScriptElement.getFloatElement(instrument_dom, "detector_offset",
                                                                 default=ReductionOptions.detector_offset)

        self.wavelength = BaseScriptElement.getFloatElement(instrument_dom, "wavelength",
                                                            default=ReductionOptions.wavelength)
        self.wavelength_spread = BaseScriptElement.getFloatElement(instrument_dom, "wavelength_spread",
                                                                   default=ReductionOptions.wavelength_spread)

        self.solid_angle_corr = BaseScriptElement.getBoolElement(instrument_dom, "solid_angle_corr",
                                                                 default=ReductionOptions.solid_angle_corr)

        # Output directory
        self.use_data_directory = BaseScriptElement.getBoolElement(instrument_dom, "UseDataDirectory",
                                                                   default=ReductionOptions.use_data_directory)
        self.output_directory = BaseScriptElement.getStringElement(instrument_dom, "OutputDirectory",
                                                                   default=ReductionOptions.output_directory)

        # Dark current
        self.dark_current_corr = BaseScriptElement.getBoolElement(instrument_dom, "dark_current_corr",
                                                                  default=ReductionOptions.dark_current_corr)
        self.dark_current_data = BaseScriptElement.getStringElement(
            instrument_dom, "dark_current_data")

        self.n_q_bins = BaseScriptElement.getIntElement(instrument_dom, "n_q_bins",
                                                        default=ReductionOptions.n_q_bins)
        self.n_sub_pix = BaseScriptElement.getIntElement(instrument_dom, "n_sub_pix",
                                                         default=ReductionOptions.n_sub_pix)
        self.log_binning = BaseScriptElement.getBoolElement(instrument_dom, "log_binning",
                                                            default=ReductionOptions.log_binning)
        self.align_log_with_decades = BaseScriptElement.getBoolElement(instrument_dom, "align_log_with_decades",
                                                                       default=ReductionOptions.align_log_with_decades)
        self.error_weighting = BaseScriptElement.getBoolElement(instrument_dom, "error_weighting",
                                                                default=ReductionOptions.error_weighting)

        self.n_wedges = BaseScriptElement.getIntElement(instrument_dom, "n_wedges",
                                                        default=ReductionOptions.n_wedges)
        self.wedge_angle = BaseScriptElement.getFloatElement(instrument_dom, "wedge_angle",
                                                             default=ReductionOptions.wedge_angle)
        self.wedge_offset = BaseScriptElement.getFloatElement(instrument_dom, "wedge_offset",
                                                              default=ReductionOptions.wedge_offset)

        self.normalization = BaseScriptElement.getIntElement(instrument_dom, "normalization",
                                                             default=ReductionOptions.normalization)

        # Mask
        element_list = dom.getElementsByTagName("Mask")
        if len(element_list) > 0:
            mask_dom = element_list[0]
            self.top = BaseScriptElement.getIntElement(
                mask_dom, "mask_top", default=ReductionOptions.top)
            self.bottom = BaseScriptElement.getIntElement(
                mask_dom, "mask_bottom", default=ReductionOptions.bottom)
            self.right = BaseScriptElement.getIntElement(
                mask_dom, "mask_right", default=ReductionOptions.right)
            self.left = BaseScriptElement.getIntElement(
                mask_dom, "mask_left", default=ReductionOptions.left)

            self.masked_side = BaseScriptElement.getStringElement(
                mask_dom, "mask_side", default=ReductionOptions.masked_side)

            self.shapes = []
            shapes_dom_list = mask_dom.getElementsByTagName("Shapes")
            if len(shapes_dom_list) > 0:
                shapes_dom = shapes_dom_list[0]
                for item in shapes_dom.getElementsByTagName("rect"):
                    x_min = float(item.getAttribute("x_min"))
                    x_max = float(item.getAttribute("x_max"))
                    y_min = float(item.getAttribute("y_min"))
                    y_max = float(item.getAttribute("y_max"))
                    self.shapes.append(ReductionOptions.RectangleMask(
                        x_min, x_max, y_min, y_max))

            self.detector_ids = BaseScriptElement.getIntList(
                mask_dom, "DetectorIDs", default=[])
            self.mask_file = BaseScriptElement.getStringElement(
                mask_dom, "mask_file")
            self.use_mask_file = BaseScriptElement.getBoolElement(mask_dom, "use_mask_file",
                                                                  default=ReductionOptions.use_mask_file)

        # Absolute scaling
        element_list = dom.getElementsByTagName("AbsScale")
        if len(element_list) > 0:
            scale_dom = element_list[0]

            self.manual_beam_diam = BaseScriptElement.getBoolElement(scale_dom, "manual_beam_diam",
                                                                     default=ReductionOptions.manual_beam_diam)
            self.scaling_factor = BaseScriptElement.getFloatElement(scale_dom, "scaling_factor",
                                                                    default=ReductionOptions.scaling_factor)
            self.calculate_scale = BaseScriptElement.getBoolElement(scale_dom, "calculate_scale",
                                                                    default=ReductionOptions.calculate_scale)
            self.scaling_direct_file = BaseScriptElement.getStringElement(
                scale_dom, "scaling_direct_file")
            self.scaling_att_trans = BaseScriptElement.getFloatElement(scale_dom, "scaling_att_trans",
                                                                       default=ReductionOptions.scaling_att_trans)
            self.scaling_beam_diam = BaseScriptElement.getFloatElement(scale_dom, "scaling_beam_diam",
                                                                       default=ReductionOptions.scaling_beam_diam)
示例#5
0
    def from_xml(self, xml_str):
        """
            Read in data from XML
            @param xml_str: text to read the data from
        """    
        self.reset()   
        dom = xml.dom.minidom.parseString(xml_str)
        
        # Get Mantid version
        mtd_version = BaseScriptElement.getMantidBuildVersion(dom)
        
        instrument_dom = dom.getElementsByTagName("Instrument")[0]
        self.nx_pixels = BaseScriptElement.getIntElement(instrument_dom, "nx_pixels",
                                                         default=ReductionOptions.nx_pixels) 
        self.ny_pixels = BaseScriptElement.getIntElement(instrument_dom, "ny_pixels",
                                                         default=ReductionOptions.ny_pixels) 
        self.instrument_name = BaseScriptElement.getStringElement(instrument_dom, "name")
        self.pixel_size = BaseScriptElement.getFloatElement(instrument_dom, "pixel_size",
                                                            default=ReductionOptions.pixel_size)
        
        self.sample_detector_distance = BaseScriptElement.getFloatElement(instrument_dom, "sample_det_dist", 
                                                                          default=ReductionOptions.sample_detector_distance)
        self.detector_offset = BaseScriptElement.getFloatElement(instrument_dom, "detector_offset",
                                                                 default=ReductionOptions.detector_offset)
        self.wavelength = BaseScriptElement.getFloatElement(instrument_dom, "wavelength",
                                                            default=ReductionOptions.wavelength)
        self.wavelength_spread = BaseScriptElement.getFloatElement(instrument_dom, "wavelength_spread",
                                                            default=ReductionOptions.wavelength_spread)
        
        self.solid_angle_corr = BaseScriptElement.getBoolElement(instrument_dom, "solid_angle_corr",
                                                                 default = ReductionOptions.solid_angle_corr)
        
        # Output directory
        self.use_data_directory = BaseScriptElement.getBoolElement(instrument_dom, "UseDataDirectory",
                                                                   default = ReductionOptions.use_data_directory) 
        self.output_directory = BaseScriptElement.getStringElement(instrument_dom, "OutputDirectory",
                                                                   default = ReductionOptions.output_directory)
        
        # Dark current - take care of backward compatibility
        if mtd_version!=0 and mtd_version<BaseScriptElement.UPDATE_1_CHANGESET_CUTOFF:
            bck_entries = dom.getElementsByTagName("Background")
            if len(bck_entries)>0:
                self.dark_current_corr = BaseScriptElement.getBoolElement(bck_entries[0], "dark_current_corr",
                                                                          default = ReductionOptions.dark_current_corr)
                self.dark_current_data = BaseScriptElement.getStringElement(bck_entries[0], "dark_current_file")
        else:
            self.dark_current_corr = BaseScriptElement.getBoolElement(instrument_dom, "dark_current_corr",
                                                                      default = ReductionOptions.dark_current_corr)
            self.dark_current_data = BaseScriptElement.getStringElement(instrument_dom, "dark_current_data")
                
        self.n_q_bins = BaseScriptElement.getIntElement(instrument_dom, "n_q_bins",
                                                       default=ReductionOptions.n_q_bins)
        self.n_sub_pix = BaseScriptElement.getIntElement(instrument_dom, "n_sub_pix",
                                                       default=ReductionOptions.n_sub_pix)
        self.log_binning = BaseScriptElement.getBoolElement(instrument_dom, "log_binning",
                                                                 default = ReductionOptions.log_binning)
        
        self.normalization = BaseScriptElement.getIntElement(instrument_dom, "normalization",
                                                             default=ReductionOptions.normalization)

        # Mask - take care of backward compatibility
        if mtd_version!=0 and mtd_version<BaseScriptElement.UPDATE_1_CHANGESET_CUTOFF:
            self.top = BaseScriptElement.getIntElement(instrument_dom, "mask_top", default=ReductionOptions.top)
            self.bottom = BaseScriptElement.getIntElement(instrument_dom, "mask_bottom", default=ReductionOptions.bottom)
            self.right = BaseScriptElement.getIntElement(instrument_dom, "mask_right", default=ReductionOptions.right)
            self.left = BaseScriptElement.getIntElement(instrument_dom, "mask_left", default=ReductionOptions.left)
        else:   
            element_list = dom.getElementsByTagName("Mask")
            if len(element_list)>0: 
                mask_dom = element_list[0]
                self.top = BaseScriptElement.getIntElement(mask_dom, "mask_top", default=ReductionOptions.top)
                self.bottom = BaseScriptElement.getIntElement(mask_dom, "mask_bottom", default=ReductionOptions.bottom)
                self.right = BaseScriptElement.getIntElement(mask_dom, "mask_right", default=ReductionOptions.right)
                self.left = BaseScriptElement.getIntElement(mask_dom, "mask_left", default=ReductionOptions.left)
                
                self.shapes = []
                shapes_dom_list = mask_dom.getElementsByTagName("Shapes")
                if len(shapes_dom_list)>0:
                    shapes_dom = shapes_dom_list[0]
                    for item in shapes_dom.getElementsByTagName("rect"):
                        x_min =  float(item.getAttribute("x_min"))
                        x_max =  float(item.getAttribute("x_max"))
                        y_min =  float(item.getAttribute("y_min"))
                        y_max =  float(item.getAttribute("y_max"))
                        self.shapes.append(ReductionOptions.RectangleMask(x_min, x_max, y_min, y_max))
                                
                self.detector_ids = BaseScriptElement.getIntList(mask_dom, "DetectorIDs", default=[])
                self.mask_file = BaseScriptElement.getStringElement(mask_dom, "mask_file")
                self.use_mask_file = BaseScriptElement.getBoolElement(mask_dom, "use_mask_file",
                                                                      default = ReductionOptions.use_mask_file)

        # Absolute scaling
        element_list = dom.getElementsByTagName("AbsScale")
        if len(element_list)>0: 
            scale_dom = element_list[0]

            self.manual_beam_diam = BaseScriptElement.getBoolElement(scale_dom, "manual_beam_diam",
                                                                     default = ReductionOptions.manual_beam_diam)
            self.scaling_factor = BaseScriptElement.getFloatElement(scale_dom, "scaling_factor", 
                                                                    default=ReductionOptions.scaling_factor)
            self.calculate_scale = BaseScriptElement.getBoolElement(scale_dom, "calculate_scale",
                                                                    default = ReductionOptions.calculate_scale)
            self.scaling_direct_file = BaseScriptElement.getStringElement(scale_dom, "scaling_direct_file")
            self.scaling_att_trans = BaseScriptElement.getFloatElement(scale_dom, "scaling_att_trans",
                                                                       default=ReductionOptions.scaling_att_trans)
            self.scaling_beam_diam = BaseScriptElement.getFloatElement(scale_dom, "scaling_beam_diam",
                                                                       default=ReductionOptions.scaling_beam_diam)