Ignore:
Timestamp:
Mar 1, 2010 4:45:10 PM (14 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:
abf6771
Parents:
6f59a98
Message:

create an invariant calculator only on compute invariant

File:
1 edited

Legend:

Unmodified
Added
Removed
  • invariantview/perspectives/invariant/invariant_panel.py

    rc128284 r272d91e  
    66import wx 
    77import sys 
     8 
     9from sans.invariant import invariant 
    810 
    911from sans.guiframe.utils import format_number, check_float 
     
    4749    ## Flag to tell the AUI manager to put this panel in the center pane 
    4850    CENTER_PANE = True 
    49     def __init__(self, parent, manager=None, invariant=None): 
     51    def __init__(self, parent, data=None, manager=None): 
    5052        wx.ScrolledWindow.__init__(self, parent, style= wx.FULL_REPAINT_ON_RESIZE ) 
    5153        #Font size  
     
    5355        #Object that receive status event 
    5456        self.parent = parent 
    55         self.manager = manager 
    56         self.invariant = invariant 
     57        #plug-in using this panel 
     58        self._manager = manager  
    5759        #Default power value 
    5860        self.power_law_exponant = 4  
    59         #Name of the data to display 
    60         self.data_name = "" 
     61        #Data uses for computation 
     62        self._data = data 
    6163        #Draw the panel 
    6264        self._do_layout() 
     
    6466        self.SetAutoLayout(True) 
    6567        self.Layout() 
     68     
     69    def set_data(self, data): 
     70        """ 
     71            Set the data 
     72        """ 
     73        self._data = data 
     74        #edit the panel 
     75        if self._data is not None: 
     76            data_name = self._data.name 
     77            data_qmin = min (self._data.x) 
     78            data_qmax = max (self._data.x) 
     79            data_range = "[%s - %s]"%(str(data_qmin), str(data_qmax)) 
     80             
     81        self.data_name_txt.SetLabel('Data : '+str(data_name)) 
     82        self.data_range_value_txt.SetLabel(str(data_range)) 
    6683        
    67     def set_invariant(self, invariant): 
    68         """ 
    69             set the value of the invariant  
    70         """ 
    71         self.invariant = invariant 
    72          
    73     def set_range(self, data_range ="[? - ?]"): 
    74         """ 
    75             Display the range of data 
    76         """ 
    77         self.data_range_value_txt.SetLabel(str(data_range)) 
    78          
    79     def set_data_name(self, data_name=""): 
    80         """ 
    81             set value for data 
    82         """ 
    83         self.data_name = str(data_name) 
    84         self.data_name_txt.SetLabel("Data : "+self.data_name) 
    85          
    86     def get_data(self): 
    87         """ 
    88             return data 
    89         """ 
    90         return self.data  
    91      
    9284    def set_manager(self, manager): 
    9385        """ 
    94             Define the manager of this panel  
    95         """ 
    96         self.manager = manager  
     86            set value for the manager 
     87        """ 
     88        self._manager = manager  
    9789         
    9890    def compute_invariant(self, event): 
     
    10092            compute invariant  
    10193        """ 
    102         #check if the panel has an invariant calculator 
    103         if self.invariant is None: 
    104             msg = "No invariant calculator available! Hint: Add data?" 
    105             wx.PostEvent(self.parent, StatusEvent(status= msg, type="stop")) 
    106             return  
    10794        #clear outputs textctrl  
    10895        self._reset_output() 
     
    114101            scale = 1 
    115102        if check_float(self.background_ctl) and check_float(self.scale_ctl): 
    116             
     103            inv = invariant.InvariantCalculator(data=self._data, 
     104                                      background=float(background), 
     105                                       scale=float(scale)) 
     106             
    117107            #Get the number of points to extrapolated 
    118108            npts_low = self.npts_low_ctl.GetValue() 
     
    150140                 
    151141            #Set the invariant calculator 
    152             self.invariant.set_extrapolation(range="low", npts=npts_low, 
     142            inv.set_extrapolation(range="low", npts=npts_low, 
    153143                                       function=function_low, power=power_low) 
    154             self.invariant.set_extrapolation(range="high", npts=npts_high, 
     144            inv.set_extrapolation(range="high", npts=npts_high, 
    155145                                       function=function_high, power=power_high) 
    156146            #Compute invariant 
    157147            try: 
    158                 qstar, qstar_err = self.invariant.get_qstar_with_error() 
     148                qstar, qstar_err = inv.get_qstar_with_error() 
    159149                self.invariant_ctl.SetValue(format_number(qstar)) 
    160150                self.invariant_err_ctl.SetValue(format_number(qstar)) 
    161                 check_float(self.invariant_ctl) 
    162                 check_float(self.invariant_err_ctl) 
    163151            except: 
    164152                msg= "Error occurs for invariant: %s"%sys.exc_value 
     
    167155            #Compute qstar extrapolated to low q range 
    168156            #Clear the previous extrapolated plot 
    169             
    170157            if low_q: 
    171158                try:  
    172                     qstar_low = self.invariant.get_qstar_low() 
     159                    qstar_low = inv.get_qstar_low() 
    173160                    self.invariant_low_ctl.SetValue(format_number(qstar_low)) 
    174                     check_float(self.invariant_low_ctl) 
    175161                    #plot data 
    176                     low_out_data, low_in_data = self.invariant.get_extra_data_low() 
    177                     theory_name_low = self.data_name+" Extra_low_Q" 
    178                     self.manager._plot_theory(data=low_out_data, 
    179                                                name=theory_name_low) 
    180                     data_name_low = self.data_name+"Fitted data for low_Q" 
    181                     self.manager._plot_data(data=low_in_data, 
    182                                             name=data_name_low) 
     162                    low_out_data, low_in_data = inv.get_extra_data_low() 
     163                    self._manager._plot_theory(reel_data=self._data, 
     164                                               extra_data=low_out_data, 
     165                                     name=self._data.name+" Extra_low_Q") 
     166                    self._manager._plot_data(reel_data=self._data, 
     167                                             extra_data=low_in_data,  
     168                                name=self._data.name+"Fitted data for low_Q") 
    183169                except: 
    184170                    msg= "Error occurs for low q invariant: %s"%sys.exc_value 
    185                     wx.PostEvent(self.parent, StatusEvent(status= msg, 
    186                                                            type="stop")) 
     171                    wx.PostEvent(self.parent, StatusEvent(status= msg, type="stop")) 
    187172            if high_q: 
    188173                try:  
    189                     qstar_high = self.invariant.get_qstar_high() 
     174                    qstar_high = inv.get_qstar_high() 
    190175                    self.invariant_high_ctl.SetValue(format_number(qstar_high)) 
    191                     check_float(self.invariant_high_ctl) 
    192176                    #plot data 
    193                     high_out_data, high_in_data = self.invariant.get_extra_data_high(q_end=Q_MAXIMUM_PLOT) 
    194                     theory_name_high = self.data_name + " Extra_high_Q" 
    195                     self.manager._plot_theory(data=high_out_data, 
    196                                                 name=theory_name_high) 
    197                     data_name_low = self.data_name + "Fitted data for high_Q" 
    198                     self.manager._plot_data(data=high_in_data, 
    199                                          name=data_name_low) 
     177                    high_out_data, high_in_data = inv.get_extra_data_high(q_end=Q_MAXIMUM_PLOT) 
     178                    self._manager._plot_theory(reel_data=self._data, 
     179                                               extra_data=high_out_data, 
     180                                     name=self._data.name+" Extra_high_Q") 
     181                    self._manager._plot_data(reel_data=self._data, 
     182                                             extra_data=high_in_data, 
     183                                 name=self._data.name+"Fitted data for high_Q") 
    200184                except: 
    201185                    msg= "Error occurs for high q invariant: %s"%sys.exc_value 
    202186                    wx.PostEvent(self.parent, StatusEvent(status= msg, type="stop")) 
    203187            try: 
    204                 qstar_total, qstar_total_err = self.invariant.get_qstar_with_error(extrapolation) 
     188                qstar_total, qstar_total_err = inv.get_qstar_with_error(extrapolation) 
    205189                self.invariant_total_ctl.SetValue(format_number(qstar_total)) 
    206190                self.invariant_total_err_ctl.SetValue(format_number(qstar_total)) 
     
    209193            except: 
    210194                msg= "Error occurs for total invariant: %s"%sys.exc_value 
    211                 wx.PostEvent(self.parent, StatusEvent(status= msg, type="stop")) 
    212                  
     195                wx.PostEvent(self.parent, StatusEvent(status= msg, type="stop"))   
     196             
     197            porod_const = self.porod_const_ctl.GetValue().lstrip().rstrip() 
     198            if porod_const == "": 
     199                porod_const = None 
     200            if not (porod_const is None): 
     201                if check_float(self.porod_const_ctl): 
     202                    porod_const = float(porod_const) 
     203                    try: 
     204                        v, dv = inv.get_volume_fraction_with_error(contrast=contrast) 
     205                        self.volume_ctl.SetValue(format_number(v)) 
     206                        self.volume_err_ctl.SetValue(format_number(dv)) 
     207                    except: 
     208                        msg= "Error occurs for volume fraction: %s"%sys.exc_value 
     209                        wx.PostEvent(self.parent, StatusEvent(status= msg, type="stop")) 
    213210            contrast = self.contrast_ctl.GetValue().lstrip().rstrip() 
    214             if not check_float(self.contrast_ctl): 
     211            if contrast == "": 
    215212                contrast = None 
    216             else: 
    217                 contrast = float(contrast) 
    218             porod_const = self.porod_const_ctl.GetValue().lstrip().rstrip() 
    219             if not check_float(self.porod_const_ctl): 
    220                 porod_const = None 
    221             else: 
    222                 porod_const = float(porod_const) 
    223             try: 
    224                 v, dv = self.invariant.get_volume_fraction_with_error(contrast=contrast) 
    225                 self.volume_ctl.SetValue(format_number(v)) 
    226                 self.volume_err_ctl.SetValue(format_number(dv)) 
    227                 check_float(self.volume_ctl) 
    228                 check_float(self.volume_err_ctl) 
    229             except: 
    230                 msg= "Error occurs for volume fraction: %s"%sys.exc_value 
    231                 wx.PostEvent(self.parent, StatusEvent(status= msg, type="stop")) 
    232             try: 
    233                 s, ds = self.invariant.get_surface_with_error(contrast=contrast, 
    234                                         porod_const=porod_const) 
    235                 self.surface_ctl.SetValue(format_number(s)) 
    236                 self.surface_err_ctl.SetValue(format_number(ds)) 
    237                 check_float(self.surface_ctl) 
    238                 check_float(self.surface_err_ctl) 
    239             except: 
    240                 msg= "Error occurs for surface: %s"%sys.exc_value 
    241                 wx.PostEvent(self.parent, StatusEvent(status= msg, type="stop")) 
    242                  
     213            if not (contrast is None): 
     214                if check_float(self.contrast_ctl): 
     215                    contrast = float(contrast) 
     216                    try: 
     217                        if not (porod_const is None): 
     218                            s, ds = inv.get_surface_with_error(contrast=contrast, 
     219                                                    porod_const=porod_const) 
     220                            self.surface_ctl.SetValue(format_number(s)) 
     221                            self.surface_err_ctl.SetValue(format_number(ds)) 
     222                    except: 
     223                        msg= "Error occurs for surface: %s"%sys.exc_value 
     224                        wx.PostEvent(self.parent, StatusEvent(status= msg, type="stop")) 
     225                         
    243226        else: 
    244227            msg= "invariant: Need float for background and scale" 
    245228            wx.PostEvent(self.parent, StatusEvent(status= msg, type="stop")) 
    246229            return 
    247          
    248      
     230   
    249231    def _reset_output(self): 
    250232        """ 
     
    285267        sizer3.SetMinSize((_STATICBOX_WIDTH, -1)) 
    286268        #---------inputs---------------- 
    287          
    288         self.data_name = "" 
     269        data_name = "" 
    289270        data_range = "[? - ?]" 
    290         self.data_name_txt = wx.StaticText(self, -1,"Data : "+str(self.data_name)) 
     271        if self._data is not None: 
     272            data_name = self._data.name 
     273            data_qmin = min (self._data.x) 
     274            data_qmax = max (self._data.x) 
     275            data_range = "[%s - %s]"%(str(data_qmin), str(data_qmax)) 
     276             
     277        self.data_name_txt = wx.StaticText(self, -1, 'Data : '+str(data_name)) 
    291278        data_range_txt = wx.StaticText(self, -1, "Range : ") 
    292279        self.data_range_value_txt = wx.StaticText(self, -1, str(data_range)) 
     
    309296        self.porod_const_ctl.SetToolTipString(str(msg_hint)) 
    310297        
    311          
    312         sizer_input.Add(self.data_name_txt, wx.LEFT, 5) 
    313         sizer_input.Add((20,20)) 
     298        sizer_input.Add(self.data_name_txt, 0, wx.LEFT, 5) 
     299        sizer_input.Add((10,10), 0, wx.LEFT, 5) 
    314300        sizer_input.Add(data_range_txt, 0, wx.LEFT, 10) 
    315301        sizer_input.Add(self.data_range_value_txt) 
     
    339325                                         (10, 10),style=wx.RB_GROUP) 
    340326        self.power_law_low = wx.RadioButton(self, -1, 'Power_law', (10, 10)) 
    341         #self.Bind(wx.EVT_RADIOBUTTON, self._set_dipers_Param, 
    342         #           id=self.guinier.GetId()) 
    343         #self.Bind(wx.EVT_RADIOBUTTON, self._set_dipers_Param, 
    344         #           id=self.power_law_law.GetId()) 
    345         #MAC needs SetValue 
    346327        self.guinier.SetValue(True) 
    347328         
     
    429410        extra_enable_hint = "Hint: Check any box to enable a specific extrapolation !" 
    430411        extra_enable_hint_txt= wx.StaticText(self, -1, extra_enable_hint ) 
    431         #enable_sizer = wx.BoxSizer(wx.HORIZONTAL) 
     412        
    432413        enable_sizer = wx.GridBagSizer(5,5) 
    433         #enable_sizer.Add(extra_hint_txt, 0, wx.ALL, 5) 
    434         #enable_sizer.Add(extra_range_value_txt, 0, wx.ALL, 5) 
    435          
     414        
    436415        iy = 0 
    437416        ix = 0 
     
    624603class InvariantDialog(wx.Dialog): 
    625604    def __init__(self, parent=None, id=1,graph=None, 
    626                  data=None, title="Invariant"): 
    627         wx.Dialog.__init__(self, parent, id, title, size=( PANEL_WIDTH, 
     605                 data=None, title="Invariant",base=None): 
     606        wx.Dialog.__init__(self, parent, id, title, size=(PANEL_WIDTH, 
    628607                                                             PANEL_HEIGHT)) 
    629         self.panel = InvariantPanel(self,invariant=None) 
     608        self.panel = InvariantPanel(self) 
    630609        self.Centre() 
    631610        self.Show(True) 
    632611         
    633612class InvariantWindow(wx.Frame): 
    634     def __init__(self, parent=None, id=1,  
    635                  data=None, title="Invariant",): 
    636          
    637         wx.Frame.__init__(self, parent, id, title, size=( PANEL_WIDTH, 
     613    def __init__(self, parent=None, id=1,graph=None,  
     614                 data=None, title="Invariant",base=None): 
     615         
     616        wx.Frame.__init__(self, parent, id, title, size=(PANEL_WIDTH, 
    638617                                                             PANEL_HEIGHT)) 
    639618         
    640         self.panel = InvariantPanel(self,invariant=None) 
     619        self.panel = InvariantPanel(self) 
    641620        self.Centre() 
    642621        self.Show(True) 
     
    650629         
    651630        return True 
    652         #wx.InitAllImageHandlers() 
    653         #dialog = InvariantDialog(None) 
    654         #if dialog.ShowModal() == wx.ID_OK: 
    655         #    pass 
    656         #dialog.Destroy() 
    657         #return 1 
    658     
     631       
    659632# end of class MyApp 
    660633 
Note: See TracChangeset for help on using the changeset viewer.