Changeset b3efb7d in sasview


Ignore:
Timestamp:
Feb 14, 2015 11:16:03 AM (8 years ago)
Author:
krzywon
Branches:
master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
10a483f
Parents:
b3133fd
Message:

Modified data loading error messages to be much more specific and
include information in the console log about the specific errors
generated.

The cansas reader is now loading non-standard units (ie counts), but
shows a specific error message about the issue.

Files:
6 edited

Legend:

Unmodified
Added
Removed
  • src/sas/data_util/nxsunit.py

    r79492222 rb3efb7d  
    128128    temperature = _build_metric_units('kelvin','K') 
    129129    temperature.update(_build_metric_units('Kelvin','K')) 
    130  
     130    temperature.update(_build_metric_units('Celcius', 'C')) 
     131    temperature.update(_build_metric_units('celcius', 'C')) 
     132     
    131133    charge = _build_metric_units('coulomb','C') 
    132134    charge.update({'microAmp*hour':0.0036}) 
     
    146148    """ 
    147149    Unit converter for NeXus style units. 
    148  
    149150    """ 
    150151    # Define the units, using both American and European spelling. 
  • src/sas/dataloader/data_info.py

    r79492222 rb3efb7d  
    338338    ## Transmission [float] [fraction] 
    339339    transmission = None 
    340     ## Temperature [float] [C] 
     340    ## Temperature [float] [No Default] 
    341341    temperature = None 
    342     temperature_unit = 'C' 
     342    temperature_unit = None 
    343343    ## Position [Vector] [mm] 
    344344    position = None 
  • src/sas/dataloader/readers/cansas_reader.py

    r79492222 rb3efb7d  
    307307        if 'unit' in attr and new_current_level.get('unit') is not None: 
    308308            try: 
     309                local_unit = attr['unit'] 
    309310                if isinstance(node_value, float) is False: 
    310311                    exec("node_value = float({0})".format(node_value)) 
     
    312313                unitname = new_current_level.get("unit") 
    313314                exec "default_unit = data1d.{0}".format(unitname) 
    314                 local_unit = attr['unit'] 
    315                 if local_unit.lower() != default_unit.lower() and \ 
    316                     local_unit is not None and local_unit.lower() != "none" \ 
    317                         and default_unit is not None: 
     315                if local_unit is not None and default_unit is not None and \ 
     316                        local_unit.lower() != default_unit.lower() \ 
     317                        and local_unit.lower() != "none": 
    318318                    if HAS_CONVERTER == True: 
    319                         try: 
    320                             ## Check local units - bad units raise KeyError 
    321                             Converter(local_unit) 
    322                             data_conv_q = Converter(attr['unit']) 
    323                             value_unit = default_unit 
    324                             i_string = "node_value = data_conv_q" 
    325                             i_string += "(node_value, units=data1d.{0})" 
    326                             exec i_string.format(unitname) 
    327                         except KeyError: 
    328                             err_msg = "CanSAS reader: could not convert " 
    329                             err_msg += "{0} unit {1}; " 
    330                             err_msg = err_msg.format(tagname, local_unit) 
    331                             intermediate = "err_msg += " + \ 
    332                                         "\"expecting [{1}]  {2}\"" + \ 
    333                                         ".format(data1d.{0}, " + \ 
    334                                         "sys.exc_info()[1])" 
    335                             exec intermediate.format(unitname, "{0}", "{1}") 
    336                             self.errors.append(err_msg) 
    337                             raise ValueError(err_msg) 
    338                         except: 
    339                             err_msg = \ 
    340                                 "CanSAS reader: could not convert the units" 
    341                             self.errors.append(err_msg) 
    342                             return 
     319                        ## Check local units - bad units raise KeyError 
     320                        data_conv_q = Converter(local_unit) 
     321                        value_unit = default_unit 
     322                        i_string = "node_value = data_conv_q" 
     323                        i_string += "(node_value, units=data1d.{0})" 
     324                        exec i_string.format(unitname) 
    343325                    else: 
    344326                        value_unit = local_unit 
    345                         err_msg = "CanSAS reader: unrecognized %s unit [%s];"\ 
    346                         % (node_value, default_unit) 
    347                         err_msg += " expecting [%s]" % local_unit 
     327                        err_msg = "Unit converter is not available.\n" 
    348328                        self.errors.append(err_msg) 
    349                         raise ValueError, err_msg 
    350329                else: 
    351330                    value_unit = local_unit 
     331            except KeyError: 
     332                err_msg = "CanSAS reader: unexpected " 
     333                err_msg += "\"{0}\" unit [{1}]; " 
     334                err_msg = err_msg.format(tagname, local_unit) 
     335                intermediate = "err_msg += " + \ 
     336                            "\"expecting [{1}]\"" + \ 
     337                            ".format(data1d.{0})" 
     338                exec intermediate.format(unitname, "{0}", "{1}") 
     339                self.errors.append(err_msg) 
     340                value_unit = local_unit 
    352341            except: 
    353                 err_msg = "CanSAS reader: could not convert " 
    354                 err_msg += "Q unit [%s]; " % attr['unit'] 
    355                 intermediate = "err_msg += \"expecting [%s]\n  %s\" % " + \ 
    356                             "(data1d.{0}, sys.exc_info()[1])" 
    357                 exec intermediate.format(unitname) 
     342                print sys.exc_info() 
     343                err_msg = "CanSAS reader: unknown error converting " 
     344                err_msg += "\"{0}\" unit [{1}]" 
     345                err_msg = err_msg.format(tagname, local_unit) 
    358346                self.errors.append(err_msg) 
    359                 raise ValueError, err_msg 
     347                value_unit = local_unit 
    360348        elif 'unit' in attr: 
    361349            value_unit = attr['unit'] 
     
    488476                                                        data1d, tagname) 
    489477                    cansas_attrib = \ 
    490                     cs_values.current_level.get("attributes").get(key) 
     478                        cs_values.current_level.get("attributes").get(key) 
    491479                    attrib_variable = cansas_attrib.get("variable") 
    492480                    if key == 'unit' and unit != '': 
  • src/sas/guiframe/gui_statusbar.py

    r79492222 rb3efb7d  
    315315        if msg == "error": 
    316316            e_msg = "Error(s) Occurred:\n" 
    317             e_msg += event.status 
     317            e_msg += "\t" + event.status + "\n\n" 
     318            e_msg += "Further information might be available in " 
     319            e_msg += "the Console log (bottom right corner)." 
    318320            wx.MessageBox(e_msg, style=wx.ICON_ERROR) 
    319321 
  • src/sas/guiframe/local_perspectives/data_loader/data_loader.py

    r7a04dbb rb3efb7d  
    171171                                  file) for file in os.listdir(path)] 
    172172    
     173    def _process_data_and_errors(self, item, p_file, output, message): 
     174        """ 
     175        Check to see if data set loaded with any errors. If so, append to 
     176            error message to be sure user knows the issue. 
     177        """ 
     178        data_error = False 
     179        for error_data in item.errors: 
     180            data_error = True 
     181            message += "\tError: {0}\n".format(error_data) 
     182        data = self.parent.create_gui_data(item, p_file) 
     183        output[data.id] = data 
     184        return output, message, data_error 
     185    
    173186    def get_data(self, path, format=None): 
    174187        """ 
     
    178191        output = {} 
    179192        any_error = False 
     193        data_error = False 
    180194        error_message = "" 
    181195        for p_file in path: 
    182196            info = "info" 
    183197            basename  = os.path.basename(p_file) 
    184             root, extension = os.path.splitext(basename) 
     198            _, extension = os.path.splitext(basename) 
    185199            if extension.lower() in EXTENSIONS: 
    186200                any_error = True 
     
    194208         
    195209            try: 
     210                message = "Loading Data... " + str(p_file) + "\n" 
     211                self.load_update(output=output, message=message, info=info) 
    196212                temp =  self.loader.load(p_file, format) 
    197213                if temp.__class__.__name__ == "list": 
    198214                    for item in temp: 
    199                         data = self.parent.create_gui_data(item, p_file) 
    200                         output[data.id] = data 
     215                        output, error_message, data_error = \ 
     216                            self._process_data_and_errors(item,  
     217                                                          p_file,  
     218                                                          output,  
     219                                                          error_message) 
    201220                else: 
    202                     data = self.parent.create_gui_data(temp, p_file) 
    203                     output[data.id] = data 
    204                 message = "Loading Data..." + str(p_file) + "\n" 
    205                 self.load_update(output=output, message=message, info=info) 
     221                    output, error_message, data_error = \ 
     222                            self._process_data_and_errors(temp,  
     223                                                          p_file,  
     224                                                          output,  
     225                                                          error_message) 
    206226            except: 
    207227                any_error = True 
    208                 if error_message == "": 
    209                      error = "Error: " + str(sys.exc_value) + "\n" 
    210                      error += "while loading Data: \n%s\n" % str(p_file) 
    211                      error_message = "The data file you selected could not be loaded.\n" 
    212                      error_message += "Make sure the content of your file" 
    213                      error_message += " is properly formatted.\n\n" 
    214                      error_message += "When contacting the DANSE team, mention the" 
    215                      error_message += " following:\n%s" % str(error) 
    216                 else: 
    217                      error_message += "%s\n"% str(p_file) 
    218                 info = "error" 
    219                 self.load_update(output=output, message=error_message,  
     228        if any_error or error_message != "": 
     229            if error_message == "": 
     230                error = "Error: " + str(sys.exc_value) + "\n" 
     231                error += "while loading Data: \n%s\n" % str(p_file) 
     232                error_message = "The data file you selected could not be loaded.\n" 
     233                error_message += "Make sure the content of your file" 
     234                error_message += " is properly formatted.\n\n" 
     235                error_message += "When contacting the DANSE team, mention the" 
     236                error_message += " following:\n%s" % str(error) 
     237            elif data_error: 
     238                base_message = "Errors occurred while loading {0}\n".format(p_file) 
     239                base_message += "The data file loaded but with errors.\n" 
     240                error_message = base_message + error_message 
     241            else: 
     242                error_message += "%s\n"% str(p_file) 
     243            info = "error" 
     244            self.load_update(output=output, message=error_message,  
    220245                                  info=info) 
    221246                 
    222         message = "Loading Data Complete! " 
     247        else: 
     248            message = "Loading Data Complete! " 
    223249        message += log_msg 
    224         if error_message != "": 
    225             info = 'error' 
    226250        self.load_complete(output=output, error_message=error_message, 
    227251                       message=message, path=path, info=info) 
  • test/sasdataloader/test/utest_abs_reader.py

    r35ec279 rb3efb7d  
    345345        self.assertEqual(self.data.filename, filename) 
    346346        # The followed should not have been loaded 
    347         self.assertEqual(self.data.sample.thickness, None) 
     347        self.assertEqual(self.data.sample.thickness, 0.00103) 
    348348        # This one should 
    349349        self.assertEqual(self.data.sample.transmission, 0.327) 
    350350         
    351351        self.assertEqual(self.data.meta_data['loader'], "CanSAS 1D") 
    352         self.assertEqual(len(self.data.errors), 1) 
     352        print self.data.errors 
     353        self.assertEqual(len(self.data.errors), 2) 
    353354         
    354355         
Note: See TracChangeset for help on using the changeset viewer.