Changes in / [f7bc948:51a4d78] in sasview
- Location:
- src/sas
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/sascalc/dataloader/data_info.py
r1b1a1c1 r7988501 25 25 import numpy 26 26 import math 27 28 class plottable_sesans1D(object):29 """30 SESANS is a place holder for 1D SESANS plottables.31 32 #TODO: This was directly copied from the plottables_1D. Modified Somewhat.33 #Class has been updated.34 """35 # The presence of these should be mutually36 # exclusive with the presence of Qdev (dx)37 x = None38 y = None39 lam = None40 dx = None41 dy = None42 dlam = None43 ## Slit smearing length44 dxl = None45 ## Slit smearing width46 dxw = None47 48 # Units49 _xaxis = ''50 _xunit = ''51 _yaxis = ''52 _yunit = ''53 54 def __init__(self, x, y, lam, dx=None, dy=None, dlam=None):55 # print "SESANS plottable working"56 self.x = numpy.asarray(x)57 self.y = numpy.asarray(y)58 self.lam = numpy.asarray(lam)59 if dx is not None:60 self.dx = numpy.asarray(dx)61 if dy is not None:62 self.dy = numpy.asarray(dy)63 if dlam is not None:64 self.dlam = numpy.asarray(dlam)65 66 def xaxis(self, label, unit):67 """68 set the x axis label and unit69 """70 self._xaxis = label71 self._xunit = unit72 73 def yaxis(self, label, unit):74 """75 set the y axis label and unit76 """77 self._yaxis = label78 self._yunit = unit79 80 27 81 28 class plottable_1D(object): … … 94 41 dxw = None 95 42 43 ## SESANS specific params (wavelengths for spin echo length calculation) 44 45 lam = None 46 dlam = None 47 96 48 # Units 97 49 _xaxis = '' … … 100 52 _yunit = '' 101 53 102 def __init__(self, x, y, dx=None, dy=None, dxl=None, dxw=None ):54 def __init__(self, x, y, dx=None, dy=None, dxl=None, dxw=None, lam=None, dlam=None): 103 55 self.x = numpy.asarray(x) 104 56 self.y = numpy.asarray(y) … … 111 63 if dxw is not None: 112 64 self.dxw = numpy.asarray(dxw) 65 if lam is not None: 66 self.lam = numpy.asarray(lam) 67 if dlam is not None: 68 self.dlam = numpy.asarray(dlam) 113 69 114 70 def xaxis(self, label, unit): … … 736 692 return self._perform_union(other) 737 693 738 class SESANSData1D(plottable_sesans1D, DataInfo): 739 """ 740 SESANS 1D data class 741 """ 742 x_unit = 'nm' 743 y_unit = 'pol' 744 745 def __init__(self, x=None, y=None, lam=None, dx=None, dy=None, dlam=None): 694 class Data1D(plottable_1D, DataInfo): 695 """ 696 1D data class 697 """ 698 if plottable_1D.lam is None: # This means it's SANS data! 699 x_unit = '1/A' 700 y_unit = '1/cm' 701 elif plottable_1D.lam is not None: # This means it's SESANS data! 702 x_unit = 'A' 703 y_unit = 'pol' 704 else: # and if it's neither, you get punished! 705 raise(TypeError,'This is neither SANS nor SESANS data, what the hell are you doing??') 706 707 def __init__(self, x=None, y=None, dx=None, dy=None, lam=None, dlam=None): 746 708 DataInfo.__init__(self) 747 plottable_sesans1D.__init__(self, x, y, lam, dx, dy, dlam) 709 plottable_1D.__init__(self, x, y, dx, dy,None, None, lam, dlam) 710 if self.lam is None: # This means the lam param was not detected in the data: it's SANS data! 711 x_unit = '1/A' 712 y_unit = '1/cm' 713 elif self.lam is not None: # This means lam was detected (should be an empty ndarray): it's SESANS data! 714 x_unit = 'A' 715 y_unit = 'pol' 716 else: # and if it's neither, you get punished! 717 raise(TypeError,'This is neither SANS nor SESANS data, what the hell are you doing??') 748 718 749 719 def __str__(self): … … 759 729 return _str 760 730 761 def clone_without_data(self, length=0, clone=None):762 """763 Clone the current object, without copying the data (which764 will be filled out by a subsequent operation).765 The data arrays will be initialized to zero.766 767 :param length: length of the data array to be initialized768 :param clone: if provided, the data will be copied to clone769 """770 from copy import deepcopy771 if clone is None or not issubclass(clone.__class__, Data1D):772 x = numpy.zeros(length)773 dx = numpy.zeros(length)774 y = numpy.zeros(length)775 dy = numpy.zeros(length)776 clone = Data1D(x, y, dx=dx, dy=dy)777 778 clone.title = self.title779 clone.run = self.run780 clone.filename = self.filename781 clone.instrument = self.instrument782 clone.notes = deepcopy(self.notes)783 clone.process = deepcopy(self.process)784 clone.detector = deepcopy(self.detector)785 clone.sample = deepcopy(self.sample)786 clone.source = deepcopy(self.source)787 clone.collimation = deepcopy(self.collimation)788 clone.trans_spectrum = deepcopy(self.trans_spectrum)789 clone.meta_data = deepcopy(self.meta_data)790 clone.errors = deepcopy(self.errors)791 792 return clone793 794 class Data1D(plottable_1D, DataInfo):795 """796 1D data class797 """798 x_unit = '1/A'799 y_unit = '1/cm'800 801 def __init__(self, x, y, dx=None, dy=None):802 DataInfo.__init__(self)803 plottable_1D.__init__(self, x, y, dx, dy)804 805 def __str__(self):806 """807 Nice printout808 """809 _str = "%s\n" % DataInfo.__str__(self)810 _str += "Data:\n"811 _str += " Type: %s\n" % self.__class__.__name__812 _str += " X-axis: %s\t[%s]\n" % (self._xaxis, self._xunit)813 _str += " Y-axis: %s\t[%s]\n" % (self._yaxis, self._yunit)814 _str += " Length: %g\n" % len(self.x)815 return _str816 817 731 def is_slit_smeared(self): 818 732 """ … … 843 757 y = numpy.zeros(length) 844 758 dy = numpy.zeros(length) 845 clone = Data1D(x, y, dx=dx, dy=dy) 759 lam = numpy.zeros(length) 760 dlam = numpy.zeros(length) 761 clone = Data1D(x, y, lam=lam, dx=dx, dy=dy, dlam=dlam ) 846 762 847 763 clone.title = self.title -
src/sas/sascalc/dataloader/readers/sesans_reader.py
r1c0e3b0 r1b82623 8 8 import numpy 9 9 import os 10 from sas.sascalc.dataloader.data_info import SESANSData1D10 from sas.sascalc.dataloader.data_info import Data1D 11 11 12 12 # Check whether we have a converter available … … 84 84 tdx = numpy.zeros(0) 85 85 # print "all good" 86 output = SESANSData1D(x=x, y=y, lam=lam, dy=dy, dx=dx, dlam=dlam)86 output = Data1D(x=x, y=y, lam=lam, dy=dy, dx=dx, dlam=dlam) 87 87 # print output 88 88 self.filename = output.filename = basename -
src/sas/sascalc/fit/AbstractFitEngine.py
rfc18690 r7988501 131 131 a way to get residuals from data. 132 132 """ 133 def __init__(self, x, y, dx=None, dy=None, smearer=None, data=None ):133 def __init__(self, x, y, dx=None, dy=None, smearer=None, data=None, lam=None, dlam=None): 134 134 """ 135 135 :param smearer: is an object of class QSmearer or SlitSmearer … … 152 152 153 153 """ 154 Data1D.__init__(self, x=x, y=y, dx=dx, dy=dy )154 Data1D.__init__(self, x=x, y=y, dx=dx, dy=dy, lam=lam,dlam=dlam) 155 155 self.num_points = len(x) 156 156 self.sas_data = data -
src/sas/sascalc/fit/BumpsFitting.py
rb699768 r7988501 26 26 from bumps import parameter 27 27 from bumps.fitproblem import FitProblem 28 29 28 30 29 from sas.sascalc.fit.AbstractFitEngine import FitEngine -
src/sas/sasgui/guiframe/dataFitting.py
r9b6d62d r7988501 17 17 """ 18 18 """ 19 def __init__(self, x=None, y=None, dx=None, dy=None ):19 def __init__(self, x=None, y=None, dx=None, dy=None, lam=None, dlam=None): 20 20 """ 21 21 """ … … 24 24 if y is None: 25 25 y = [] 26 PlotData1D.__init__(self, x, y, dx, dy)27 LoadData1D.__init__(self, x, y, dx, dy)26 PlotData1D.__init__(self, x, y, lam, dx, dy, dlam) 27 LoadData1D.__init__(self, x, y, lam, dx, dy, dlam) 28 28 self.id = None 29 29 self.list_group_id = [] … … 68 68 # First, check the data compatibility 69 69 dy, dy_other = self._validity_check(other) 70 result = Data1D(x=[], y=[], dx=None, dy=None)70 result = Data1D(x=[], y=[], lam=[], dx=None, dy=None, dlam=None) 71 71 result.clone_without_data(length=len(self.x), clone=self) 72 72 result.copy_from_datainfo(data1d=self) … … 115 115 # First, check the data compatibility 116 116 self._validity_check_union(other) 117 result = Data1D(x=[], y=[], dx=None, dy=None)117 result = Data1D(x=[], y=[], lam=[], dx=None, dy=None, dlam=None) 118 118 tot_length = len(self.x) + len(other.x) 119 119 result = self.clone_without_data(length=tot_length, clone=result) 120 if self.dlam == None or other.dlam is None: 121 result.dlam = None 122 else: 123 result.dlam = numpy.zeros(tot_length) 120 124 if self.dy == None or other.dy is None: 121 125 result.dy = None … … 141 145 result.y = numpy.append(self.y, other.y) 142 146 result.y = result.y[ind] 147 result.lam = numpy.append(self.lam, other.lam) 148 result.lam = result.lam[ind] 149 if result.dlam != None: 150 result.dlam = numpy.append(self.dlam, other.dlam) 151 result.dlam = result.dlam[ind] 143 152 if result.dy != None: 144 153 result.dy = numpy.append(self.dy, other.dy) … … 260 269 # First, check the data compatibility 261 270 self._validity_check_union(other) 262 result = Data1D(x=[], y=[], dx=None, dy=None)271 result = Data1D(x=[], y=[], lam=[], dx=None, dy=None, dlam=[]) 263 272 tot_length = len(self.x)+len(other.x) 264 273 result.clone_without_data(length=tot_length, clone=self) 274 if self.dlam == None or other.dlam is None: 275 result.dlam = None 276 else: 277 result.dlam = numpy.zeros(tot_length) 265 278 if self.dy == None or other.dy is None: 266 279 result.dy = None … … 285 298 result.y = numpy.append(self.y, other.y) 286 299 result.y = result.y[ind] 300 result.lam = numpy.append(self.lam, other.lam) 301 result.lam = result.lam[ind] 287 302 if result.dy != None: 288 303 result.dy = numpy.append(self.dy, other.dy) -
src/sas/sasgui/perspectives/fitting/basepage.py
re28f34d r7988501 142 142 self.theory_qmin_x = None 143 143 self.theory_qmax_x = None 144 self.cb1 = None 144 145 self.btEditMask = None 145 146 self.btFit = None … … 280 281 num=self.npts_x, endpoint=True) 281 282 self.data = Data1D(x=x) 282 self.data.xaxis('\\rm{Q}', "A^{-1}") 283 self.data.yaxis('\\rm{Intensity}', "cm^{-1}") 283 #self.data.xaxis('\\rm{Q}', "A^{-1}") 284 self.data.xaxis('\\rm{X}', "") 285 #self.data.yaxis('\\rm{Intensity}', "cm^{-1}") 286 self.data.yaxis('\\rm{Y}', "") 284 287 self.data.is_data = False 285 288 self.data.id = str(self.uid) + " data" … … 306 309 num=self.npts_x, endpoint=True, base=10.0) 307 310 self.data = Data1D(x=x) 308 self.data.xaxis('\\rm{Q}', "A^{-1}") 309 self.data.yaxis('\\rm{Intensity}', "cm^{-1}") 311 #self.data.xaxis('\\rm{Q}', "A^{-1}") 312 #self.data.yaxis('\\rm{Intensity}', "cm^{-1}") 313 self.data.xaxis('\\rm{X}', "") 314 self.data.yaxis('\\rm{Y}', "") 310 315 self.data.is_data = False 311 316 self.data.id = str(self.uid) + " data" … … 426 431 self.sizer2 = wx.BoxSizer(wx.VERTICAL) 427 432 self.sizer3 = wx.BoxSizer(wx.VERTICAL) 433 self.sizerTrafo = wx.BoxSizer(wx.VERTICAL) 428 434 self.sizer4 = wx.BoxSizer(wx.VERTICAL) 429 435 self.sizer5 = wx.BoxSizer(wx.VERTICAL) … … 434 440 self.sizer2.SetMinSize((PANEL_WIDTH, -1)) 435 441 self.sizer3.SetMinSize((PANEL_WIDTH, -1)) 442 self.sizerTrafo.SetMinSize((PANEL_WIDTH, -1)) 436 443 self.sizer4.SetMinSize((PANEL_WIDTH, -1)) 437 444 self.sizer5.SetMinSize((PANEL_WIDTH, -1)) … … 442 449 self.vbox.Add(self.sizer2) 443 450 self.vbox.Add(self.sizer3) 451 self.vbox.Add(self.sizerTrafo) 444 452 self.vbox.Add(self.sizer4) 445 453 self.vbox.Add(self.sizer5) … … 1113 1121 # set data, etc. from the state 1114 1122 # reset page between theory and fitting from bookmarking 1123 #if state.data == None: 1124 # data = None 1125 #else: 1115 1126 data = state.data 1116 1127 … … 1138 1149 self.disp_cb_dict = state.disp_cb_dict 1139 1150 self.disp_list = state.disp_list 1151 1152 ## set the state of the radio box 1153 #self.shape_rbutton.SetValue(state.shape_rbutton) 1154 #self.shape_indep_rbutton.SetValue(state.shape_indep_rbutton) 1155 #self.struct_rbutton.SetValue(state.struct_rbutton) 1156 #self.plugin_rbutton.SetValue(state.plugin_rbutton) 1140 1157 1141 1158 ## fill model combobox … … 1193 1210 else: 1194 1211 self.model_view.SetLabel("1D Mode") 1212 1213 ## set the select all check box to the a given state 1214 self.cb1.SetValue(state.cb1) 1195 1215 1196 1216 ## reset state of checkbox,textcrtl and regular parameters value … … 1323 1343 logging.error(traceback.format_exc()) 1324 1344 1345 # Make sure the check box updated when all checked 1346 if self.cb1.GetValue(): 1347 self.select_all_param(None) 1348 1325 1349 def _selectDlg(self): 1326 1350 """ … … 1420 1444 else: 1421 1445 self.fitrange = False 1446 1447 if not self.data.is_data: 1448 is_modified = True 1422 1449 1423 1450 ## if any value is modify draw model with new value … … 1436 1463 self._draw_model() 1437 1464 self.Refresh() 1438 1439 logging.info("is_modified flag set to %g",is_modified)1440 1465 return is_modified 1441 1466 … … 2452 2477 item[2].Enable() 2453 2478 2454 # Make sure the check box updated 2455 self.get_all_checked_params() 2479 # Make sure the check box updated when all checked 2480 if self.cb1.GetValue(): 2481 #self.select_all_param(None) 2482 self.get_all_checked_params() 2456 2483 2457 2484 # update params … … 3598 3625 call back for model selection if implemented 3599 3626 """ 3627 def select_all_param(self, event): 3628 """ 3629 set to true or false all checkBox if implemented 3630 """ 3600 3631 def get_weight_flag(self): 3601 3632 """ -
src/sas/sasgui/perspectives/fitting/fitpage.py
r4c3be25 r7988501 55 55 self.weightbt_string = None 56 56 self.m_name = None 57 # transform implementation 58 self._fill_Trafo_sizer() 59 # self.Trafobt_string() 57 60 # get smear info from data 58 61 self._get_smear_info() … … 92 95 self.parent.on_set_focus(event) 93 96 self.on_tap_focus() 97 98 def onTrafo(self, event): 99 """ 100 On Trafo radio button event, sets the Trafobt_string 101 """ 102 self.Trafobt_string = event.GetEventObject().GetLabelText() 103 self._set_Trafo() 104 105 def _fill_Trafo_sizer(self): 106 107 title = "Transform" 108 box_description_trafo = wx.StaticBox(self, wx.ID_ANY, str(title)) 109 box_description_trafo.SetForegroundColour(wx.BLUE) 110 #boxsizer_trafo = wx.StaticBoxSizer(box_description_trafo, wx.VERTICAL) 111 boxsizer_trafo = wx.StaticBoxSizer(box_description_trafo, wx.HORIZONTAL) 112 #sizer_trafo = wx.StaticBoxSizer(box_description_trafo, wx.HORIZONTAL) 113 #weighting_set_box = wx.StaticBox(self, wx.ID_ANY, 114 # 'Select the type of SESANS analysis') 115 116 #sizer_weighting = wx.BoxSizer(wx.HORIZONTAL) 117 # weighting_box.SetMinSize((_DATA_BOX_WIDTH, 60)) 118 119 #For every radio button (each statement x3): 120 self.no_transform = wx.RadioButton(self, wx.ID_ANY, 121 'None', style=wx.RB_GROUP) 122 123 #self.Bind(wx.EVT_RADIOBUTTON, self.onTrafo, 124 # id=self.no_transform.GetId()) 125 self.hankel = wx.RadioButton(self, wx.ID_ANY, 126 'Hankel') 127 #self.Bind(wx.EVT_RADIOBUTTON, self.onTrafo, 128 # id=self.hankel.GetId()) 129 self.cosine = wx.RadioButton(self, wx.ID_ANY, 130 'Cosine') 131 #self.Bind(wx.EVT_RADIOBUTTON, self.onTrafo, 132 # id=self.cosine.GetId()) 133 134 #Not sure about this (only once though) 135 self.no_transform.SetValue(True) 136 137 #For every radio button (each statement x3): 138 boxsizer_trafo.Add(self.no_transform, 0, wx.LEFT, 10) 139 boxsizer_trafo.Add((14, 10)) 140 boxsizer_trafo.Add(self.hankel) 141 boxsizer_trafo.Add((14, 10)) 142 boxsizer_trafo.Add(self.cosine) 143 boxsizer_trafo.Add((14, 10)) 144 #Default for weighting is False, but these need to be on by default! 145 self.no_transform.Enable(True) 146 147 #Not sure about this (only once though) 148 #weighting_box.Add(sizer_trafo) 149 150 self.sizerTrafo.Clear(True) 151 self.sizerTrafo.Add(boxsizer_trafo, 0, wx.EXPAND | wx.ALL, 10) 152 #self.sizerTrafo.Add(sizer_trafo, 0, wx.EXPAND | wx.ALL, 10) 153 self.sizerTrafo.Layout() 94 154 95 155 def _fill_data_sizer(self): … … 624 684 ## fill a sizer with the combobox to select dispersion type 625 685 model_disp = wx.StaticText(self, wx.ID_ANY, 'Function') 626 CHECK_STATE = False686 CHECK_STATE = self.cb1.GetValue() 627 687 628 688 ix = 0 … … 969 1029 self.state.model = self.model.clone() 970 1030 ## save state into 1031 self.state.cb1 = self.cb1.GetValue() 971 1032 self._copy_parameters_state(self.parameters, self.state.parameters) 972 1033 self._copy_parameters_state(self.orientation_params_disp, … … 979 1040 StatusEvent(status=" Selected Distribution: Gaussian")) 980 1041 #Fill the list of fittable parameters 1042 #self.select_all_param(event=None) 981 1043 self.get_all_checked_params() 982 1044 self.Layout() … … 2693 2755 self._manager.set_param2fit(self.uid, param2fit) 2694 2756 2757 def select_all_param(self, event): 2758 """ 2759 set to true or false all checkBox given the main checkbox value cb1 2760 """ 2761 self.param_toFit = [] 2762 if self.parameters != []: 2763 if self.cb1.GetValue(): 2764 for item in self.parameters: 2765 if item[0].IsShown(): 2766 ## for data2D select all to fit 2767 if self.data.__class__.__name__ == "Data2D" or \ 2768 self.enable2D: 2769 item[0].SetValue(True) 2770 self.param_toFit.append(item) 2771 else: 2772 ## for 1D all parameters except orientation 2773 if not item in self.orientation_params: 2774 item[0].SetValue(True) 2775 self.param_toFit.append(item) 2776 else: 2777 item[0].SetValue(False) 2778 #if len(self.fittable_param)>0: 2779 for item in self.fittable_param: 2780 if item[0].IsShown(): 2781 if self.data.__class__.__name__ == "Data2D" or \ 2782 self.enable2D: 2783 item[0].SetValue(True) 2784 self.param_toFit.append(item) 2785 try: 2786 if len(self.values[item[1]]) > 0: 2787 item[0].SetValue(False) 2788 except: 2789 pass 2790 2791 else: 2792 ## for 1D all parameters except orientation 2793 if not item in self.orientation_params_disp: 2794 item[0].SetValue(True) 2795 self.param_toFit.append(item) 2796 try: 2797 if len(self.values[item[1]]) > 0: 2798 item[0].SetValue(False) 2799 except: 2800 pass 2801 else: 2802 item[0].SetValue(False) 2803 2804 else: 2805 for item in self.parameters: 2806 item[0].SetValue(False) 2807 for item in self.fittable_param: 2808 item[0].SetValue(False) 2809 self.param_toFit = [] 2810 2811 self.save_current_state_fit() 2812 2813 if event != None: 2814 #self._undo.Enable(True) 2815 ## post state to fit panel 2816 event = PageInfoEvent(page=self) 2817 wx.PostEvent(self.parent, event) 2818 param2fit = [] 2819 for item in self.param_toFit: 2820 if item[0] and item[0].IsShown(): 2821 param2fit.append(item[1]) 2822 self.parent._manager.set_param2fit(self.uid, param2fit) 2823 2695 2824 def select_param(self, event): 2696 2825 """ … … 2739 2868 if len(self.fittable_param) > 0: 2740 2869 len_orient_para *= 2 2870 #Set the value of checkbox that selected every checkbox or not 2871 if len(self.parameters) + len(self.fittable_param) - len_orient_para \ 2872 == len(self.param_toFit): 2873 self.cb1.SetValue(True) 2874 else: 2875 self.cb1.SetValue(False) 2741 2876 2742 2877 self.save_current_state_fit() … … 2840 2975 iy = 0 2841 2976 ix = 0 2842 sizer.Add(wx.StaticText(self, wx.ID_ANY, 'Parameter'), 2843 (iy, ix), (1, 1), wx.EXPAND | wx.ADJUST_MINSIZE, 0) 2977 select_text = "Select All" 2978 self.cb1 = wx.CheckBox(self, wx.ID_ANY, str(select_text), (10, 10)) 2979 wx.EVT_CHECKBOX(self, self.cb1.GetId(), self.select_all_param) 2980 self.cb1.SetToolTipString("To check/uncheck all the boxes below.") 2981 self.cb1.SetValue(True) 2982 2983 sizer.Add(self.cb1, (iy, ix), (1, 1), \ 2984 wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 5) 2844 2985 ix += 1 2845 2986 self.text2_2 = wx.StaticText(self, wx.ID_ANY, 'Value') … … 2868 3009 self.text2_4.Hide() 2869 3010 2870 CHECK_STATE = False3011 CHECK_STATE = self.cb1.GetValue() 2871 3012 for item in keys: 2872 3013 -
src/sas/sasgui/plottools/plottables.py
r8abd96d r7988501 1022 1022 """ 1023 1023 1024 def __init__(self, x, y, dx=None, dy=None):1024 def __init__(self, x, y, lam=None, dx=None, dy=None, dlam=None): 1025 1025 """ 1026 1026 Draw points specified by x[i],y[i] in the current color/symbol. … … 1036 1036 self.x = x 1037 1037 self.y = y 1038 self.lam = lam 1038 1039 self.dx = dx 1039 1040 self.dy = dy 1041 self.dlam = dlam 1040 1042 self.source = None 1041 1043 self.detector = None
Note: See TracChangeset
for help on using the changeset viewer.