Changeset 66000ae in sasview for src/sas/sascalc/dataloader
- Timestamp:
- Sep 25, 2017 3:01:30 PM (7 years ago)
- 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, magnetic_scatt, release-4.2.2, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
- Children:
- fca1f50, 83db1cc
- Parents:
- dba8557 (diff), 72d3f1e (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - Location:
- src/sas/sascalc/dataloader
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/sascalc/dataloader/data_info.py
r17e257b5 rdeaa0c6 1176 1176 final_dataset.yaxis(data._yaxis, data._yunit) 1177 1177 final_dataset.zaxis(data._zaxis, data._zunit) 1178 final_dataset.x_bins = data.x_bins 1179 final_dataset.y_bins = data.y_bins 1178 if len(data.data.shape) == 2: 1179 n_rows, n_cols = data.data.shape 1180 final_dataset.y_bins = data.qy_data[0::int(n_cols)] 1181 final_dataset.x_bins = data.qx_data[:int(n_cols)] 1180 1182 else: 1181 1183 return_string = "Should Never Happen: _combine_data_info_with_plottable input is not a plottable1d or " + \ -
src/sas/sascalc/dataloader/file_reader_base_class.py
rae69c690 rdeaa0c6 167 167 dataset.x_bins = dataset.qx_data[:int(n_cols)] 168 168 dataset.data = dataset.data.flatten() 169 if len(dataset.data) > 0: 170 dataset.xmin = np.min(dataset.qx_data) 171 dataset.xmax = np.max(dataset.qx_data) 172 dataset.ymin = np.min(dataset.qy_data) 173 dataset.ymax = np.max(dataset.qx_data) 169 174 170 175 def format_unit(self, unit=None): … … 191 196 self.output = [] 192 197 193 def remove_empty_q_values(self, has_error_dx=False, has_error_dy=False, 194 has_error_dxl=False, has_error_dxw=False): 198 def data_cleanup(self): 199 """ 200 Clean up the data sets and refresh everything 201 :return: None 202 """ 203 self.remove_empty_q_values() 204 self.send_to_output() # Combine datasets with DataInfo 205 self.current_datainfo = DataInfo() # Reset DataInfo 206 207 def remove_empty_q_values(self): 195 208 """ 196 209 Remove any point where Q == 0 197 210 """ 198 x = self.current_dataset.x 199 self.current_dataset.x = self.current_dataset.x[x != 0] 200 self.current_dataset.y = self.current_dataset.y[x != 0] 201 if has_error_dy: 202 self.current_dataset.dy = self.current_dataset.dy[x != 0] 203 if has_error_dx: 204 self.current_dataset.dx = self.current_dataset.dx[x != 0] 205 if has_error_dxl: 206 self.current_dataset.dxl = self.current_dataset.dxl[x != 0] 207 if has_error_dxw: 208 self.current_dataset.dxw = self.current_dataset.dxw[x != 0] 211 if isinstance(self.current_dataset, plottable_1D): 212 # Booleans for resolutions 213 has_error_dx = self.current_dataset.dx is not None 214 has_error_dxl = self.current_dataset.dxl is not None 215 has_error_dxw = self.current_dataset.dxw is not None 216 has_error_dy = self.current_dataset.dy is not None 217 # Create arrays of zeros for non-existent resolutions 218 if has_error_dxw and not has_error_dxl: 219 array_size = self.current_dataset.dxw.size - 1 220 self.current_dataset.dxl = np.append(self.current_dataset.dxl, 221 np.zeros([array_size])) 222 has_error_dxl = True 223 elif has_error_dxl and not has_error_dxw: 224 array_size = self.current_dataset.dxl.size - 1 225 self.current_dataset.dxw = np.append(self.current_dataset.dxw, 226 np.zeros([array_size])) 227 has_error_dxw = True 228 elif not has_error_dxl and not has_error_dxw and not has_error_dx: 229 array_size = self.current_dataset.x.size - 1 230 self.current_dataset.dx = np.append(self.current_dataset.dx, 231 np.zeros([array_size])) 232 has_error_dx = True 233 if not has_error_dy: 234 array_size = self.current_dataset.y.size - 1 235 self.current_dataset.dy = np.append(self.current_dataset.dy, 236 np.zeros([array_size])) 237 has_error_dy = True 238 239 # Remove points where q = 0 240 x = self.current_dataset.x 241 self.current_dataset.x = self.current_dataset.x[x != 0] 242 self.current_dataset.y = self.current_dataset.y[x != 0] 243 if has_error_dy: 244 self.current_dataset.dy = self.current_dataset.dy[x != 0] 245 if has_error_dx: 246 self.current_dataset.dx = self.current_dataset.dx[x != 0] 247 if has_error_dxl: 248 self.current_dataset.dxl = self.current_dataset.dxl[x != 0] 249 if has_error_dxw: 250 self.current_dataset.dxw = self.current_dataset.dxw[x != 0] 251 elif isinstance(self.current_dataset, plottable_2D): 252 has_error_dqx = self.current_dataset.dqx_data is not None 253 has_error_dqy = self.current_dataset.dqy_data is not None 254 has_error_dy = self.current_dataset.err_data is not None 255 has_mask = self.current_dataset.mask is not None 256 x = self.current_dataset.qx_data 257 self.current_dataset.data = self.current_dataset.data[x != 0] 258 self.current_dataset.qx_data = self.current_dataset.qx_data[x != 0] 259 self.current_dataset.qy_data = self.current_dataset.qy_data[x != 0] 260 self.current_dataset.q_data = np.sqrt( 261 np.square(self.current_dataset.qx_data) + np.square( 262 self.current_dataset.qy_data)) 263 if has_error_dy: 264 self.current_dataset.err_data = self.current_dataset.err_data[x != 0] 265 if has_error_dqx: 266 self.current_dataset.dqx_data = self.current_dataset.dqx_data[x != 0] 267 if has_error_dqy: 268 self.current_dataset.dqy_data = self.current_dataset.dqy_data[x != 0] 269 if has_mask: 270 self.current_dataset.mask = self.current_dataset.mask[x != 0] 209 271 210 272 def reset_data_list(self, no_lines=0): -
src/sas/sascalc/dataloader/readers/abs_reader.py
rad92c5a rffb6474 109 109 # Sample thickness in mm 110 110 try: 111 value = float(line_toks[5] )111 value = float(line_toks[5][:-1]) 112 112 if self.has_converter and \ 113 113 self.current_datainfo.sample.thickness_unit != 'cm': … … 202 202 is_data_started = True 203 203 204 self.remove_empty_q_values( True, True)204 self.remove_empty_q_values() 205 205 206 206 # Sanity check -
src/sas/sascalc/dataloader/readers/ascii_reader.py
rf994e8b1 r7b07fbe 156 156 raise FileContentsException(msg) 157 157 158 self.remove_empty_q_values( has_error_dx, has_error_dy)158 self.remove_empty_q_values() 159 159 self.current_dataset.xaxis("\\rm{Q}", 'A^{-1}') 160 160 self.current_dataset.yaxis("\\rm{Intensity}", "cm^{-1}") -
src/sas/sascalc/dataloader/readers/cansas_reader.py
rae69c690 r62160509 104 104 xml_file = self.f_open.name 105 105 # We don't sure f_open since lxml handles opnening/closing files 106 if not self.f_open.closed:107 self.f_open.close()108 109 basename, _ = os.path.splitext(os.path.basename(xml_file))110 111 106 try: 112 107 # Raises FileContentsException 113 108 self.load_file_and_schema(xml_file, schema_path) 114 self.current_datainfo = DataInfo() 115 # Raises FileContentsException if file doesn't meet CanSAS schema 109 # Parse each SASentry 110 entry_list = self.xmlroot.xpath('/ns:SASroot/ns:SASentry', 111 namespaces={ 112 'ns': self.cansas_defaults.get( 113 "ns") 114 }) 116 115 self.is_cansas(self.extension) 117 self.invalid = False # If we reach this point then file must be valid CanSAS118 119 # Parse each SASentry120 entry_list = self.xmlroot.xpath('/ns:SASroot/ns:SASentry', namespaces={121 'ns': self.cansas_defaults.get("ns")122 })123 # Look for a SASentry124 self.names.append("SASentry")125 116 self.set_processing_instructions() 126 127 117 for entry in entry_list: 128 self.current_datainfo.filename = basename + self.extension129 self.current_datainfo.meta_data["loader"] = "CanSAS XML 1D"130 self.current_datainfo.meta_data[PREPROCESS] = self.processing_instructions131 118 self._parse_entry(entry) 132 119 self.data_cleanup() … … 150 137 invalid_xml = self.find_invalid_xml() 151 138 if invalid_xml != "": 139 basename, _ = os.path.splitext( 140 os.path.basename(self.f_open.name)) 152 141 invalid_xml = INVALID_XML.format(basename + self.extension) + invalid_xml 153 142 raise DataReaderException(invalid_xml) # Handled by base class … … 164 153 except Exception as e: # Convert all other exceptions to FileContentsExceptions 165 154 raise FileContentsException(e.message) 166 155 finally: 156 if not self.f_open.closed: 157 self.f_open.close() 167 158 168 159 def load_file_and_schema(self, xml_file, schema_path=""): … … 209 200 if not self._is_call_local() and not recurse: 210 201 self.reset_state() 202 if not recurse: 203 self.current_datainfo = DataInfo() 204 # Raises FileContentsException if file doesn't meet CanSAS schema 205 self.invalid = False 206 # Look for a SASentry 211 207 self.data = [] 212 self. current_datainfo = DataInfo()208 self.parent_class = "SASentry" 213 209 self.names.append("SASentry") 214 self.parent_class = "SASentry" 210 self.current_datainfo.meta_data["loader"] = "CanSAS XML 1D" 211 self.current_datainfo.meta_data[ 212 PREPROCESS] = self.processing_instructions 213 if self._is_call_local() and not recurse: 214 basename, _ = os.path.splitext(os.path.basename(self.f_open.name)) 215 self.current_datainfo.filename = basename + self.extension 215 216 # Create an empty dataset if no data has been passed to the reader 216 217 if self.current_dataset is None: 217 self.current_dataset = plottable_1D(np.empty(0), np.empty(0), 218 np.empty(0), np.empty(0)) 218 self._initialize_new_data_set(dom) 219 219 self.base_ns = "{" + CANSAS_NS.get(self.cansas_version).get("ns") + "}" 220 220 … … 228 228 tagname_original = tagname 229 229 # Skip this iteration when loading in save state information 230 if tagname == "fitting_plug_in" or tagname == "pr_inversion" or tagname == "invariant":230 if tagname in ["fitting_plug_in", "pr_inversion", "invariant", "corfunc"]: 231 231 continue 232 232 # Get where to store content … … 258 258 self._add_intermediate() 259 259 else: 260 # TODO: Clean this up to make it faster (fewer if/elifs) 260 261 if isinstance(self.current_dataset, plottable_2D): 261 262 data_point = node.text … … 502 503 self.sort_two_d_data() 503 504 self.reset_data_list() 504 empty = None 505 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 505 return self.output[0], None 522 506 523 507 def _is_call_local(self): … … 553 537 self.aperture = Aperture() 554 538 elif self.parent_class == 'SASdata': 555 self._check_for_empty_resolution()556 539 self.data.append(self.current_dataset) 557 540 … … 609 592 if 'unit' in attr and attr.get('unit') is not None: 610 593 try: 611 local_unit = attr['unit'] 594 unit = attr['unit'] 595 unit_list = unit.split("|") 596 if len(unit_list) > 1: 597 self.current_dataset.xaxis(unit_list[0].strip(), 598 unit_list[1].strip()) 599 local_unit = unit_list[1] 600 else: 601 local_unit = unit 612 602 unitname = self.ns_list.current_level.get("unit", "") 613 603 if "SASdetector" in self.names: … … 665 655 return node_value, value_unit 666 656 667 def _check_for_empty_resolution(self):668 """669 a method to check all resolution data sets are the same size as I and q670 """671 dql_exists = False672 dqw_exists = False673 dq_exists = False674 di_exists = False675 if self.current_dataset.dxl is not None:676 dql_exists = True677 if self.current_dataset.dxw is not None:678 dqw_exists = True679 if self.current_dataset.dx is not None:680 dq_exists = True681 if self.current_dataset.dy is not None:682 di_exists = True683 if dqw_exists and not dql_exists:684 array_size = self.current_dataset.dxw.size685 self.current_dataset.dxl = np.zeros(array_size)686 elif dql_exists and not dqw_exists:687 array_size = self.current_dataset.dxl.size688 self.current_dataset.dxw = np.zeros(array_size)689 elif not dql_exists and not dqw_exists and not dq_exists:690 array_size = self.current_dataset.x.size691 self.current_dataset.dx = np.append(self.current_dataset.dx,692 np.zeros([array_size]))693 if not di_exists:694 array_size = self.current_dataset.y.size695 self.current_dataset.dy = np.append(self.current_dataset.dy,696 np.zeros([array_size]))697 698 657 def _initialize_new_data_set(self, node=None): 699 658 if node is not None: -
src/sas/sascalc/dataloader/readers/__init__.py
r7a5d066 r488f3a5 1 1 # Method to associate extensions to default readers 2 2 from associations import read_associations 3 4 5 # Method to return the location of the XML settings file6 def get_data_path():7 """8 Return the location of the settings file for the data readers.9 """10 import os11 return os.path.dirname(__file__)
Note: See TracChangeset
for help on using the changeset viewer.