Ignore:
Timestamp:
Aug 26, 2011 9:34:27 AM (13 years ago)
Author:
Gervaise Alina <gervyh@…>
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:
6ff97c5
Parents:
57f537a
Message:

create a virtual data for empty fitpage

File:
1 edited

Legend:

Unmodified
Added
Removed
  • fittingview/src/sans/perspectives/fitting/basepage.py

    rb8ff610 recf26e1  
    88import math 
    99import string 
     10from wx.lib.scrolledpanel import ScrolledPanel 
    1011from sans.guiframe.panel_base import PanelBase 
    11 from wx.lib.scrolledpanel import ScrolledPanel 
    1212from sans.guiframe.utils import format_number,check_float 
    1313from sans.guiframe.events import PanelOnFocusEvent 
    1414from sans.guiframe.events import StatusEvent 
    1515from sans.guiframe.events import AppendBookmarkEvent 
     16from sans.guiframe.dataFitting import Data2D 
     17from sans.guiframe.dataFitting import Data1D 
     18from sans.guiframe.dataFitting import check_data_validity 
     19from sans.dataloader.data_info import Detector 
     20from sans.dataloader.data_info import Source 
    1621import pagestate 
    1722from pagestate import PageState 
     23 
    1824(PageInfoEvent, EVT_PAGE_INFO)   = wx.lib.newevent.NewEvent() 
    1925(PreviousStateEvent, EVT_PREVIOUS_STATE)   = wx.lib.newevent.NewEvent() 
     
    6268         ## current model 
    6369        self.model = None 
     70        self.index_model = None 
    6471        ## data 
    6572        self.data = None 
     
    6774        self.data_list = [] 
    6875        self.mask = None 
    69         self.uid = None 
     76        self.uid = wx.NewId() 
    7077        #Q range for data set 
    7178        self.qmin_data_set = None 
     
    148155        ## dictionary of saved state 
    149156        self.saved_states = {}  
     157        #create a default data for an empty panel 
     158        self.create_default_data() 
    150159        ## Create context menu for page 
    151160        self.popUpMenu = wx.Menu() 
     
    178187        self.set_layout() 
    179188     
     189    def set_index_model(self, index): 
     190        """ 
     191        Index related to this page 
     192        """ 
     193        self.index_model = index 
     194         
     195    def create_default_data(self): 
     196        """ 
     197        Given the user selection, creates a 1D or 2D data  
     198        Only when the page is on theory mode. 
     199        """ 
     200        if self.enable2D and not check_data_validity(self.data): 
     201            self._create_default_2d_data() 
     202        else: 
     203            self._create_default_1d_data() 
     204         
     205             
     206    def _create_default_1d_data(self): 
     207        """ 
     208        Create default data for fitting perspective  
     209        Only when the page is on theory mode. 
     210        :warning: This data is never plotted. 
     211         
     212        """ 
     213        x = numpy.linspace(start=self.qmin_x, stop=self.qmax_x,  
     214                           num=self.npts_x, endpoint=True) 
     215        self.data = Data1D(x=x) 
     216        self.data.xaxis('\\rm{Q}',"A^{-1}") 
     217        self.data.yaxis('\\rm{Intensity}', "cm^{-1}") 
     218        self.data.is_data = False 
     219        self.data.id = str(self.uid) + " data"  
     220        self.data.group_id = str(self.uid) + " Model1D"  
     221        
     222    def _create_default_2d_data(self): 
     223        """ 
     224        Create 2D data by default 
     225        Only when the page is on theory mode. 
     226        :warning: This data is never plotted. 
     227        """ 
     228        self.data = Data2D() 
     229        qmax = self.qmax_x 
     230        self.data.xaxis('\\rm{Q_{x}}', 'A^{-1}') 
     231        self.data.yaxis('\\rm{Q_{y}}', 'A^{-1}') 
     232        self.data.is_data = False 
     233        self.data.id = str(self.uid) + " data"  
     234        self.data.group_id = str(self.uid) + " Model2D"  
     235        ## Default values     
     236        self.data.detector.append(Detector())   
     237        index = len(self.data.detector) - 1 
     238        self.data.detector[index].distance = 8000   # mm         
     239        self.data.source.wavelength= 6         # A       
     240        self.data.detector[index].pixel_size.x = 5  # mm 
     241        self.data.detector[index].pixel_size.y = 5  # mm 
     242        self.data.detector[index].beam_center.x = qmax 
     243        self.data.detector[index].beam_center.y = qmax 
     244        ## create x_bins and y_bins of the model 2D 
     245        pixel_width_x = self.data.detector[index].pixel_size.x 
     246        pixel_width_y = self.data.detector[index].pixel_size.y 
     247        center_x = self.data.detector[index].beam_center.x/pixel_width_x 
     248        center_y = self.data.detector[index].beam_center.y/pixel_width_y 
     249        # theory default: assume the beam  
     250        #center is located at the center of sqr detector 
     251        xmax = self.qmax_x 
     252        xmin = -self.qmin_x 
     253        ymax = self.qmax_x 
     254        ymin = -self.qmin_x 
     255        qstep = self.npts_x 
     256        x = numpy.linspace(start=xmin, stop=xmax, num=qstep, endpoint=True)   
     257        y = numpy.linspace(start=ymin, stop=ymax, num=qstep, endpoint=True) 
     258        ## use data info instead 
     259        new_x = numpy.tile(x, (len(y), 1)) 
     260        new_y = numpy.tile(y, (len(x), 1)) 
     261        new_y = new_y.swapaxes(0,1) 
     262        # all data reuire now in 1d array 
     263        qx_data = new_x.flatten() 
     264        qy_data = new_y.flatten() 
     265        q_data = numpy.sqrt(qx_data*qx_data + qy_data*qy_data) 
     266        # set all True (standing for unmasked) as default 
     267        mask = numpy.ones(len(qx_data), dtype=bool) 
     268        # calculate the range of qx and qy: this way, 
     269        # it is a little more independent 
     270        x_size = xmax - xmin 
     271        y_size = ymax - ymin 
     272        # store x and y bin centers in q space 
     273        x_bins  = x 
     274        y_bins  = y  
     275        # bin size: x- & y-directions 
     276        xstep = x_size/len(x_bins-1) 
     277        ystep = y_size/len(y_bins-1) 
     278        self.data.detector.append(Detector())          
     279        self.data.source = Source() 
     280        self.data.data = numpy.ones(len(qx_data)) 
     281        self.data.err_data = numpy.ones(len(mask)) 
     282        self.data.qx_data = qx_data  
     283        self.data.qy_data = qy_data   
     284        self.data.q_data = q_data  
     285        self.data.mask = mask             
     286        self.data.x_bins = x_bins   
     287        self.data.y_bins = y_bins    
     288        # max and min taking account of the bin sizes 
     289        self.data.xmin = xmin  
     290        self.data.xmax = xmax 
     291        self.data.ymin = ymin  
     292        self.data.ymax = ymax  
     293         
    180294    def on_set_focus(self, event): 
    181295        """ 
     
    12891403                if is_2Ddata: self.btEditMask.Enable(True) 
    12901404            if is_modified and self.fitrange: 
    1291                 if self.data == None: 
    1292                     # Theory case: need to get npts value to draw 
    1293                     self.npts_x = float(self.Npts_total.GetValue()) 
     1405                #if self.data == None: 
     1406                # Theory case: need to get npts value to draw 
     1407                self.npts_x = float(self.Npts_total.GetValue()) 
     1408                self.create_default_data() 
    12941409                self.state_change= True 
    12951410                self._draw_model()  
     
    13411456                        self._manager.set_smearer(smearer=temp_smearer, 
    13421457                                                  uid=self.uid, 
     1458                                                  fid=self.data.id, 
    13431459                                                     qmin=float(self.qmin_x), 
    13441460                                                      qmax=float(self.qmax_x), 
     1461                            enable_smearer=not self.disable_smearer.GetValue(), 
    13451462                                                      draw=False) 
    13461463                elif not self._is_2D(): 
     
    13481465                                              qmin=float(self.qmin_x), 
    13491466                                              uid=self.uid,  
     1467                                              fid=self.data.id, 
    13501468                                                 qmax= float(self.qmax_x), 
     1469                            enable_smearer=not self.disable_smearer.GetValue(), 
    13511470                                                 draw=False) 
    13521471                    if self.data != None: 
     
    16541773                                    qmin=float(self.qmin_x),  
    16551774                                    qmax=float(self.qmax_x), 
    1656                                     qstep= float(self.npts_x), 
    16571775                                    page_id=self.uid, 
    16581776                                    toggle_mode_on=toggle_mode_on,  
     
    16761794        sld_data.name = 'SLD' 
    16771795        sld_data.axes = self.sld_axes 
    1678         self.panel = SLDPanel(self, data=sld_data,axes =self.sld_axes,id =-1 ) 
     1796        self.panel = SLDPanel(self, data=sld_data, axes =self.sld_axes,id =-1) 
    16791797        self.panel.ShowModal()     
    16801798         
     
    18271945        self.state_change = False 
    18281946        #Draw the model for a different range 
     1947        self.create_default_data() 
    18291948        self._draw_model() 
    18301949                    
     
    18832002        self.state_change= False 
    18842003        #Draw the model for a different range 
     2004        self.create_default_data() 
    18852005        self._draw_model() 
    18862006                    
Note: See TracChangeset for help on using the changeset viewer.