- Timestamp:
- Sep 25, 2017 11:51:21 AM (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:
- deaa0c6
- Parents:
- 1fa4f736
- Location:
- src/sas/sascalc/dataloader
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/sascalc/dataloader/file_reader_base_class.py
rae69c690 r7b07fbe 191 191 self.output = [] 192 192 193 def remove_empty_q_values(self, has_error_dx=False, has_error_dy=False, 194 has_error_dxl=False, has_error_dxw=False): 193 def data_cleanup(self): 194 """ 195 Clean up the data sets and refresh everything 196 :return: None 197 """ 198 self.remove_empty_q_values() 199 self.send_to_output() # Combine datasets with DataInfo 200 self.current_datainfo = DataInfo() # Reset DataInfo 201 202 def remove_empty_q_values(self): 195 203 """ 196 204 Remove any point where Q == 0 197 205 """ 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] 206 if isinstance(self.current_dataset, plottable_1D): 207 # Booleans for resolutions 208 has_error_dx = self.current_dataset.dx is not None 209 has_error_dxl = self.current_dataset.dxl is not None 210 has_error_dxw = self.current_dataset.dxw is not None 211 has_error_dy = self.current_dataset.dy is not None 212 # Create arrays of zeros for non-existent resolutions 213 if has_error_dxw and not has_error_dxl: 214 array_size = self.current_dataset.dxw.size - 1 215 self.current_dataset.dxl = np.append(self.current_dataset.dxl, 216 np.zeros([array_size])) 217 has_error_dxl = True 218 elif has_error_dxl and not has_error_dxw: 219 array_size = self.current_dataset.dxl.size - 1 220 self.current_dataset.dxw = np.append(self.current_dataset.dxw, 221 np.zeros([array_size])) 222 has_error_dxw = True 223 elif not has_error_dxl and not has_error_dxw and not has_error_dx: 224 array_size = self.current_dataset.x.size - 1 225 self.current_dataset.dx = np.append(self.current_dataset.dx, 226 np.zeros([array_size])) 227 has_error_dx = True 228 if not has_error_dy: 229 array_size = self.current_dataset.y.size - 1 230 self.current_dataset.dy = np.append(self.current_dataset.dy, 231 np.zeros([array_size])) 232 has_error_dy = True 233 234 # Remove points where q = 0 235 x = self.current_dataset.x 236 self.current_dataset.x = self.current_dataset.x[x != 0] 237 self.current_dataset.y = self.current_dataset.y[x != 0] 238 if has_error_dy: 239 self.current_dataset.dy = self.current_dataset.dy[x != 0] 240 if has_error_dx: 241 self.current_dataset.dx = self.current_dataset.dx[x != 0] 242 if has_error_dxl: 243 self.current_dataset.dxl = self.current_dataset.dxl[x != 0] 244 if has_error_dxw: 245 self.current_dataset.dxw = self.current_dataset.dxw[x != 0] 246 elif isinstance(self.current_dataset, plottable_2D): 247 has_error_dqx = self.current_dataset.dqx_data is not None 248 has_error_dqy = self.current_dataset.dqy_data is not None 249 has_error_dy = self.current_dataset.err_data is not None 250 has_mask = self.current_dataset.mask is not None 251 has_q_data = self.current_dataset.q_data is not None 252 x = self.current_dataset.qx_data 253 self.current_dataset.data = self.current_dataset.data[x != 0] 254 self.current_dataset.qx_data = self.current_dataset.qx_data[x != 0] 255 self.current_dataset.qy_data = self.current_dataset.qy_data[x != 0] 256 if has_error_dy: 257 self.current_dataset.err_data = self.current_dataset.err_data[x != 0] 258 if has_error_dqx: 259 self.current_dataset.dqx_data = self.current_dataset.dqx_data[x != 0] 260 if has_error_dqy: 261 self.current_dataset.dqy_data = self.current_dataset.dqy_data[x != 0] 262 if has_mask: 263 self.current_dataset.mask = self.current_dataset.mask[x != 0] 264 if has_q_data: 265 self.current_dataset.q_data = self.current_dataset.q_data[x != 0] 209 266 210 267 def reset_data_list(self, no_lines=0): -
src/sas/sascalc/dataloader/readers/abs_reader.py
rad92c5a r7b07fbe 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 r7b07fbe 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 … … 665 648 return node_value, value_unit 666 649 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 650 def _initialize_new_data_set(self, node=None): 699 651 if node is not None:
Note: See TracChangeset
for help on using the changeset viewer.