Changeset 6300dfe in sasview for src/sas/sasgui/perspectives
- Timestamp:
- Aug 23, 2017 8:05:45 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:
- f0a16d5
- Parents:
- 367a31c (diff), f001bc9 (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/sasgui/perspectives
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/sasgui/perspectives/file_converter/converter_panel.py
red9f872 r19296dc 24 24 from sas.sascalc.file_converter.otoko_loader import OTOKOLoader 25 25 from sas.sascalc.file_converter.bsl_loader import BSLLoader 26 from sas.sascalc.file_converter.ascii2d_loader import ASCII2DLoader 26 27 from sas.sascalc.file_converter.nxcansas_writer import NXcanSASWriter 27 28 from sas.sascalc.dataloader.data_info import Detector … … 35 36 _STATICBOX_WIDTH = 410 36 37 _BOX_WIDTH = 200 37 PANEL_SIZE = 48038 PANEL_SIZE = 520 38 39 FONT_VARIANT = 0 39 40 else: … … 41 42 _STATICBOX_WIDTH = 430 42 43 _BOX_WIDTH = 200 43 PANEL_SIZE = 5 0044 PANEL_SIZE = 540 44 45 FONT_VARIANT = 1 45 46 … … 352 353 w.write(frame_data, output_path) 353 354 355 def convert_2d_data(self, dataset): 356 metadata = self.get_metadata() 357 for key, value in metadata.iteritems(): 358 setattr(dataset[0], key, value) 359 360 w = NXcanSASWriter() 361 w.write(dataset, self.output.GetPath()) 362 354 363 def on_convert(self, event): 355 364 """Called when the Convert button is clicked""" … … 367 376 qdata, iqdata = self.extract_otoko_data(self.q_input.GetPath()) 368 377 self.convert_1d_data(qdata, iqdata) 378 elif self.data_type == 'ascii2d': 379 loader = ASCII2DLoader(self.iq_input.GetPath()) 380 data = loader.load() 381 dataset = [data] # ASCII 2D only ever contains 1 frame 382 self.convert_2d_data(dataset) 369 383 else: # self.data_type == 'bsl' 370 384 dataset = self.extract_bsl_data(self.iq_input.GetPath()) … … 372 386 # Cancelled by user 373 387 return 374 375 metadata = self.get_metadata() 376 for key, value in metadata.iteritems(): 377 setattr(dataset[0], key, value) 378 379 w = NXcanSASWriter() 380 w.write(dataset, self.output.GetPath()) 388 self.convert_2d_data(dataset) 389 381 390 except Exception as ex: 382 391 msg = str(ex) … … 399 408 def validate_inputs(self): 400 409 msg = "You must select a" 401 if self.q_input.GetPath() == '' and self.data_type != 'bsl': 410 if self.q_input.GetPath() == '' and self.data_type != 'bsl' \ 411 and self.data_type != 'ascii2d': 402 412 msg += " Q Axis input file." 403 413 elif self.iq_input.GetPath() == '': … … 472 482 dtype = event.GetEventObject().GetName() 473 483 self.data_type = dtype 474 if dtype == 'bsl' :484 if dtype == 'bsl' or dtype == 'ascii2d': 475 485 self.q_input.SetPath("") 476 486 self.q_input.Disable() … … 500 510 501 511 instructions = ( 502 "Select linked single column 1D ASCII files containing the Q-axis and " 503 "Intensity-axis data, or 1D BSL/OTOKO files, or a 2D BSL/OTOKO file, " 504 "then choose where to save the converted file, and click Convert.\n" 505 "1D ASCII and BSL/OTOKO files can be converted to CanSAS (XML) or " 506 "NXcanSAS (HDF5) formats. 2D BSL/OTOKO files can only be converted to " 507 "the NXcanSAS format.\n" 508 "Metadata can be optionally added for the CanSAS XML format." 512 "If converting a 1D dataset, select linked single-column ASCII files " 513 "containing the Q-axis and intensity-axis data, or a 1D BSL/OTOKO file." 514 " If converting 2D data, select an ASCII file in the ISIS 2D file " 515 "format, or a 2D BSL/OTOKO file. Choose where to save the converted " 516 "file and click convert.\n" 517 "One dimensional ASCII and BSL/OTOKO files can be converted to CanSAS " 518 "(XML) or NXcanSAS (HDF5) formats. Two dimensional datasets can only be" 519 " converted to the NXcanSAS format.\n" 520 "Metadata can also be optionally added to the output file." 509 521 ) 510 522 … … 526 538 wx.ALIGN_CENTER_VERTICAL, 5) 527 539 radio_sizer = wx.BoxSizer(wx.HORIZONTAL) 528 ascii_btn = wx.RadioButton(self, -1, "ASCII ", name="ascii",540 ascii_btn = wx.RadioButton(self, -1, "ASCII 1D", name="ascii", 529 541 style=wx.RB_GROUP) 530 542 ascii_btn.Bind(wx.EVT_RADIOBUTTON, self.datatype_changed) 531 543 radio_sizer.Add(ascii_btn) 544 ascii2d_btn = wx.RadioButton(self, -1, "ASCII 2D", name="ascii2d") 545 ascii2d_btn.Bind(wx.EVT_RADIOBUTTON, self.datatype_changed) 546 radio_sizer.Add(ascii2d_btn) 532 547 otoko_btn = wx.RadioButton(self, -1, "BSL 1D", name="otoko") 533 548 otoko_btn.Bind(wx.EVT_RADIOBUTTON, self.datatype_changed) 534 549 radio_sizer.Add(otoko_btn) 535 input_grid.Add(radio_sizer, (y,1), (1,1), wx.ALL, 5)536 550 bsl_btn = wx.RadioButton(self, -1, "BSL 2D", name="bsl") 537 551 bsl_btn.Bind(wx.EVT_RADIOBUTTON, self.datatype_changed) 538 552 radio_sizer.Add(bsl_btn) 553 input_grid.Add(radio_sizer, (y,1), (1,1), wx.ALL, 5) 539 554 y += 1 540 555 … … 549 564 y += 1 550 565 551 iq_label = wx.StaticText(self, -1, "Intensity -AxisData: ")566 iq_label = wx.StaticText(self, -1, "Intensity Data: ") 552 567 input_grid.Add(iq_label, (y,0), (1,1), wx.ALIGN_CENTER_VERTICAL, 5) 553 568 … … 647 662 648 663 def __init__(self, parent=None, title='File Converter', base=None, 649 manager=None, size=(PANEL_SIZE * 1.05, PANEL_SIZE / 1.1),664 manager=None, size=(PANEL_SIZE * 0.96, PANEL_SIZE * 0.9), 650 665 *args, **kwargs): 651 666 kwargs['title'] = title -
src/sas/sasgui/perspectives/file_converter/file_converter.py
r463e7ffc r94e3572 25 25 Returns a set of menu entries 26 26 """ 27 help_txt = "Convert single column ASCII data to CanSAS format"27 help_txt = "Convert ASCII or BSL/OTOKO data to CanSAS or NXcanSAS formats" 28 28 return [("File Converter", help_txt, self.on_file_converter)] 29 29 -
src/sas/sasgui/perspectives/file_converter/media/file_converter_help.rst
rd73998c r59decb81 18 18 * Single-column ASCII data, with lines that end without any delimiter, 19 19 or with a comma or semi-colon delimiter 20 * 2D `ISIS ASCII formatted 21 <http://www.isis.stfc.ac.uk/instruments/loq/software/ 22 colette-ascii-file-format-descriptions9808.pdf>`_ data 20 23 * `1D BSL/OTOKO format 21 24 <http://www.diamond.ac.uk/Beamlines/Soft-Condensed-Matter/small-angle/ … … 36 39 37 40 1) Select the files containing your Q-axis and Intensity-axis data 38 2) Choose whether the files are in ASCII , 1D BSL/OTOKO or 2D BSL/OTOKO format41 2) Choose whether the files are in ASCII 1D, ASCII 2D, 1D BSL/OTOKO or 2D BSL/OTOKO format 39 42 3) Choose where you would like to save the converted file 40 43 4) Optionally, input some metadata such as sample size, detector name, etc … … 47 50 file, a dialog will appear asking which frames you would like converted. You 48 51 may enter a start frame, end frame & increment, and all frames in that subset 49 will be converted. For example, entering 0, 50 and 10 will convert frames 0, 52 will be converted. For example, entering 0, 50 and 10 will convert frames 0, 50 53 10, 20, 30, 40 & 50. 51 54 … … 56 59 single file, so there is an option in the *Select Frame* dialog to output each 57 60 frame to its own file. The single file option will produce one file with 58 multiple `<SASdata>` elements. The multiple file option will output a separate 59 file with one `<SASdata>` element for each frame. The frame number will also be 61 multiple `<SASdata>` elements. The multiple file option will output a separate 62 file with one `<SASdata>` element for each frame. The frame number will also be 60 63 appended to the file name. 61 64 62 The multiple file option is not available when exporting to NXcanSAS because 65 The multiple file option is not available when exporting to NXcanSAS because 63 66 the HDF5 format is more efficient at handling large amounts of data. 64 67 -
src/sas/sasgui/perspectives/fitting/basepage.py
r914c49d5 r367a31c 15 15 import traceback 16 16 17 from Queue import Queue 18 from threading import Thread 17 19 from collections import defaultdict 18 20 from wx.lib.scrolledpanel import ScrolledPanel … … 241 243 self.set_layout() 242 244 245 # Setting up a thread for the fitting 246 self.threaded_draw_queue = Queue() 247 248 self.draw_worker_thread = Thread(target = self._threaded_draw_worker, 249 args = (self.threaded_draw_queue,)) 250 self.draw_worker_thread.setDaemon(True) 251 self.draw_worker_thread.start() 252 253 # And a home for the thread submission times 254 self.last_time_fit_submitted = 0.00 255 243 256 def set_index_model(self, index): 244 257 """ … … 1693 1706 :param chisqr: update chisqr value [bool] 1694 1707 """ 1695 wx.CallAfter(self._draw_model_after, update_chisqr, source) 1708 # Get the time 1709 current_time = time.time() 1710 1711 # When loading we slam a number of fits through here 1712 # let's filter these out to start with 1713 if current_time > (self.last_time_fit_submitted + 0.1): 1714 # Submitting the rest 1715 self.threaded_draw_queue.put([update_chisqr, source]) 1716 else: 1717 pass 1718 1719 self.last_time_fit_submitted = current_time 1720 1721 def _threaded_draw_worker(self, threaded_draw_queue): 1722 while True: 1723 # Check to see is a manager is running and a calc is running 1724 if ((self._manager.calc_1D is not None 1725 and self._manager.calc_1D.isrunning()) or 1726 (self._manager.calc_2D is not None 1727 and self._manager.calc_2D.isrunning())): 1728 # If a manager is running a calculation 1729 # then trim the queue 1730 if self.threaded_draw_queue.qsize() > 1: 1731 for loopIter in range(threaded_draw_queue.qsize() - 1): 1732 dump = self.threaded_draw_queue.get() 1733 self.threaded_draw_queue.task_done() 1734 else: 1735 # Otherwise, just run 1736 input_variables = threaded_draw_queue.get() 1737 self._draw_model_after(input_variables[0], input_variables[1]) 1738 event = StatusEvent(status="Computation is in progress...", 1739 type="progress") 1740 wx.PostEvent(self._manager.parent, event) 1741 threaded_draw_queue.task_done() 1696 1742 1697 1743 def _draw_model_after(self, update_chisqr=True, source='model'): … … 1716 1762 toggle_mode_on = self.model_view.IsEnabled() 1717 1763 is_2d = self._is_2D() 1764 1718 1765 self._manager.draw_model(self.model, 1719 1766 data=self.data,
Note: See TracChangeset
for help on using the changeset viewer.