Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/sas/sascalc/dataloader/readers/cansas_reader.py

    rae69c690 ra78a02f  
    130130                self.current_datainfo.meta_data[PREPROCESS] = self.processing_instructions 
    131131                self._parse_entry(entry) 
    132                 self.data_cleanup() 
     132                has_error_dx = self.current_dataset.dx is not None 
     133                has_error_dy = self.current_dataset.dy is not None 
     134                self.remove_empty_q_values(has_error_dx=has_error_dx, 
     135                    has_error_dy=has_error_dy) 
     136                self.send_to_output() # Combine datasets with DataInfo 
     137                self.current_datainfo = DataInfo() # Reset DataInfo 
    133138        except FileContentsException as fc_exc: 
    134139            # File doesn't meet schema - try loading with a less strict schema 
     
    149154                    self.load_file_and_schema(xml_file) # Reload strict schema so we can find where error are in file 
    150155                    invalid_xml = self.find_invalid_xml() 
    151                     if invalid_xml != "": 
    152                         invalid_xml = INVALID_XML.format(basename + self.extension) + invalid_xml 
    153                         raise DataReaderException(invalid_xml) # Handled by base class 
     156                    invalid_xml = INVALID_XML.format(basename + self.extension) + invalid_xml 
     157                    raise DataReaderException(invalid_xml) # Handled by base class 
    154158                except FileContentsException as fc_exc: 
    155159                    msg = "CanSAS Reader could not load the file {}".format(xml_file) 
     
    275279                # I and Q points 
    276280                elif tagname == 'I' and isinstance(self.current_dataset, plottable_1D): 
    277                     self.current_dataset.yaxis("Intensity", unit) 
     281                    unit_list = unit.split("|") 
     282                    if len(unit_list) > 1: 
     283                        self.current_dataset.yaxis(unit_list[0].strip(), 
     284                                                   unit_list[1].strip()) 
     285                    else: 
     286                        self.current_dataset.yaxis("Intensity", unit) 
    278287                    self.current_dataset.y = np.append(self.current_dataset.y, data_point) 
    279288                elif tagname == 'Idev' and isinstance(self.current_dataset, plottable_1D): 
    280289                    self.current_dataset.dy = np.append(self.current_dataset.dy, data_point) 
    281290                elif tagname == 'Q': 
    282                     self.current_dataset.xaxis("Q", unit) 
     291                    unit_list = unit.split("|") 
     292                    if len(unit_list) > 1: 
     293                        self.current_dataset.xaxis(unit_list[0].strip(), 
     294                                                   unit_list[1].strip()) 
     295                    else: 
     296                        self.current_dataset.xaxis("Q", unit) 
    283297                    self.current_dataset.x = np.append(self.current_dataset.x, data_point) 
    284298                elif tagname == 'Qdev': 
    285299                    self.current_dataset.dx = np.append(self.current_dataset.dx, data_point) 
    286300                elif tagname == 'dQw': 
    287                    self.current_dataset.dxw = np.append(self.current_dataset.dxw, data_point) 
     301                    if self.current_dataset.dxw is None: 
     302                        self.current_dataset.dxw = np.empty(0) 
     303                    self.current_dataset.dxw = np.append(self.current_dataset.dxw, data_point) 
    288304                elif tagname == 'dQl': 
     305                    if self.current_dataset.dxl is None: 
     306                        self.current_dataset.dxl = np.empty(0) 
    289307                    self.current_dataset.dxl = np.append(self.current_dataset.dxl, data_point) 
    290308                elif tagname == 'Qmean': 
     
    294312                elif tagname == 'Sesans': 
    295313                    self.current_datainfo.isSesans = bool(data_point) 
    296                     self.current_dataset.xaxis(attr.get('x_axis'), 
    297                                                 attr.get('x_unit')) 
    298                     self.current_dataset.yaxis(attr.get('y_axis'), 
    299                                                 attr.get('y_unit')) 
    300314                elif tagname == 'yacceptance': 
    301315                    self.current_datainfo.sample.yacceptance = (data_point, unit) 
     
    498512            for error in self.errors: 
    499513                self.current_datainfo.errors.add(error) 
    500             self.data_cleanup() 
    501             self.sort_one_d_data() 
    502             self.sort_two_d_data() 
    503             self.reset_data_list() 
     514            self.errors.clear() 
     515            self.send_to_output() 
    504516            empty = None 
    505517            return self.output[0], empty 
    506  
    507     def data_cleanup(self): 
    508         """ 
    509         Clean up the data sets and refresh everything 
    510         :return: None 
    511         """ 
    512         has_error_dx = self.current_dataset.dx is not None 
    513         has_error_dxl = self.current_dataset.dxl is not None 
    514         has_error_dxw = self.current_dataset.dxw is not None 
    515         has_error_dy = self.current_dataset.dy is not None 
    516         self.remove_empty_q_values(has_error_dx=has_error_dx, 
    517                                    has_error_dxl=has_error_dxl, 
    518                                    has_error_dxw=has_error_dxw, 
    519                                    has_error_dy=has_error_dy) 
    520         self.send_to_output()  # Combine datasets with DataInfo 
    521         self.current_datainfo = DataInfo()  # Reset DataInfo 
    522518 
    523519    def _is_call_local(self): 
     
    646642                    value_unit = local_unit 
    647643            except KeyError: 
    648                 # Do not throw an error for loading Sesans data in cansas xml 
    649                 # This is a temporary fix. 
    650                 if local_unit != "A" and local_unit != 'pol': 
    651                     err_msg = "CanSAS reader: unexpected " 
    652                     err_msg += "\"{0}\" unit [{1}]; " 
    653                     err_msg = err_msg.format(tagname, local_unit) 
    654                     err_msg += "expecting [{0}]".format(default_unit) 
     644                err_msg = "CanSAS reader: unexpected " 
     645                err_msg += "\"{0}\" unit [{1}]; " 
     646                err_msg = err_msg.format(tagname, local_unit) 
     647                err_msg += "expecting [{0}]".format(default_unit) 
    655648                value_unit = local_unit 
    656649            except: 
     
    682675            di_exists = True 
    683676        if dqw_exists and not dql_exists: 
    684             array_size = self.current_dataset.dxw.size 
    685             self.current_dataset.dxl = np.zeros(array_size) 
     677            array_size = self.current_dataset.dxw.size - 1 
     678            self.current_dataset.dxl = np.append(self.current_dataset.dxl, 
     679                                                 np.zeros([array_size])) 
    686680        elif dql_exists and not dqw_exists: 
    687             array_size = self.current_dataset.dxl.size 
    688             self.current_dataset.dxw = np.zeros(array_size) 
     681            array_size = self.current_dataset.dxl.size - 1 
     682            self.current_dataset.dxw = np.append(self.current_dataset.dxw, 
     683                                                 np.zeros([array_size])) 
    689684        elif not dql_exists and not dqw_exists and not dq_exists: 
    690             array_size = self.current_dataset.x.size 
     685            array_size = self.current_dataset.x.size - 1 
    691686            self.current_dataset.dx = np.append(self.current_dataset.dx, 
    692687                                                np.zeros([array_size])) 
    693688        if not di_exists: 
    694             array_size = self.current_dataset.y.size 
     689            array_size = self.current_dataset.y.size - 1 
    695690            self.current_dataset.dy = np.append(self.current_dataset.dy, 
    696691                                                np.zeros([array_size])) 
     
    862857            node.append(point) 
    863858            self.write_node(point, "Q", datainfo.x[i], 
    864                             {'unit': datainfo.x_unit}) 
     859                            {'unit': datainfo._xaxis + " | " + datainfo._xunit}) 
    865860            if len(datainfo.y) >= i: 
    866861                self.write_node(point, "I", datainfo.y[i], 
    867                                 {'unit': datainfo.y_unit}) 
     862                                {'unit': datainfo._yaxis + " | " + datainfo._yunit}) 
    868863            if datainfo.dy is not None and len(datainfo.dy) > i: 
    869864                self.write_node(point, "Idev", datainfo.dy[i], 
    870                                 {'unit': datainfo.y_unit}) 
     865                                {'unit': datainfo._yaxis + " | " + datainfo._yunit}) 
    871866            if datainfo.dx is not None and len(datainfo.dx) > i: 
    872867                self.write_node(point, "Qdev", datainfo.dx[i], 
    873                                 {'unit': datainfo.x_unit}) 
     868                                {'unit': datainfo._xaxis + " | " + datainfo._xunit}) 
    874869            if datainfo.dxw is not None and len(datainfo.dxw) > i: 
    875870                self.write_node(point, "dQw", datainfo.dxw[i], 
    876                                 {'unit': datainfo.x_unit}) 
     871                                {'unit': datainfo._xaxis + " | " + datainfo._xunit}) 
    877872            if datainfo.dxl is not None and len(datainfo.dxl) > i: 
    878873                self.write_node(point, "dQl", datainfo.dxl[i], 
    879                                 {'unit': datainfo.x_unit}) 
     874                                {'unit': datainfo._xaxis + " | " + datainfo._xunit}) 
    880875        if datainfo.isSesans: 
    881             sesans_attrib = {'x_axis': datainfo._xaxis, 
    882                              'y_axis': datainfo._yaxis, 
    883                              'x_unit': datainfo.x_unit, 
    884                              'y_unit': datainfo.y_unit} 
    885             sesans = self.create_element("Sesans", attrib=sesans_attrib) 
     876            sesans = self.create_element("Sesans") 
    886877            sesans.text = str(datainfo.isSesans) 
    887             entry_node.append(sesans) 
    888             self.write_node(entry_node, "yacceptance", datainfo.sample.yacceptance[0], 
     878            node.append(sesans) 
     879            self.write_node(node, "yacceptance", datainfo.sample.yacceptance[0], 
    889880                             {'unit': datainfo.sample.yacceptance[1]}) 
    890             self.write_node(entry_node, "zacceptance", datainfo.sample.zacceptance[0], 
     881            self.write_node(node, "zacceptance", datainfo.sample.zacceptance[0], 
    891882                             {'unit': datainfo.sample.zacceptance[1]}) 
    892883 
Note: See TracChangeset for help on using the changeset viewer.