Ignore:
Timestamp:
Jul 23, 2010 7:05:49 PM (14 years ago)
Author:
Jae Cho <jhjcho@…>
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:
a94c4e1
Parents:
4e9583c
Message:

added some report features and improved the savings: more to go

Location:
invariantview/perspectives/invariant
Files:
1 added
3 edited

Legend:

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

    r1e3610d rcb463b4  
    258258        :param state: State object 
    259259        """ 
    260          
    261260        try: 
    262261            if datainfo is None: 
    263262                raise RuntimeError, "invariant.set_state: datainfo parameter cannot be None in standalone mode" 
    264             datainfo.meta_data['invstate'].file = datainfo.meta_data['invstate'].file+"_copy" 
     263            datainfo.meta_data['invstate'].file = datainfo.meta_data['invstate'].file 
    265264            datainfo.name = datainfo.meta_data['invstate'].file 
    266265            datainfo.filename = datainfo.meta_data['invstate'].file 
     
    274273            # Make sure the user sees the invariant panel after loading 
    275274            self.parent.set_perspective(self.perspective) 
    276  
    277275            # set state 
    278             self.invariant_panel.set_state(state=temp_state,data=self.__data)                 
     276            self.invariant_panel.set_state(state=temp_state,data=self.__data)               
    279277 
    280278        except: 
  • invariantview/perspectives/invariant/invariant_panel.py

    r1a3a03b rcb463b4  
    205205            self.state = IState() 
    206206        else: 
     207             
    207208            if not self.set_current_data(data): 
    208209                return 
     
    211212 
    212213            num = self.state.saved_state['state_num'] 
    213             self.get_state_by_num(state_num=num) 
    214              
    215             if num >0 : 
     214             
     215            if num > 0 : 
    216216                self._undo_enable() 
    217217            if num < len(state.state_list)-1: 
    218218                self._redo_enable() 
    219219                 
    220              
    221220            # get bookmarks 
    222221            self.bookmark_num = len(self.state.bookmark_list) 
     222 
    223223            total_bookmark_num = self.bookmark_num+1 
    224224            for ind in range(1,total_bookmark_num): 
     
    229229                id = wx.NewId() 
    230230                self.popUpMenu.Append(id,name,str('')) 
    231                 wx.EVT_MENU(self, id, self._back_to_bookmark)   
     231                wx.EVT_MENU(self, id, self._back_to_bookmark)  
     232 
     233            self.get_state_by_num(state_num=str(num)) 
     234             
    232235            self._get_input_list()  
     236             
    233237            self.new_state = False  
    234  
     238             
    235239 
    236240    def get_background(self): 
     
    494498        elif event != None:  
    495499            self._set_compute_state(state='compute') 
     500            self.button_bookmark.Enable(True) 
    496501            msg= "\n\nStarting a new invariant computation..."             
    497502            wx.PostEvent(self.parent, StatusEvent(status=msg)) 
     503             
    498504 
    499505        if self._data is None or self.err_check_on_data(): 
     
    579585            self.state.timestamp= self._get_time_stamp() 
    580586            msg = self.state.__str__() 
     587            self.state.set_report_string() 
    581588            self.is_power_out = False 
    582589            wx.PostEvent(self.parent, StatusEvent(status = msg )) 
    583          
     590 
    584591        #enable the button_ok for more details 
    585592        self.button_details.Enable() 
    586          
    587593        self.button_details.SetFocus() 
    588594        if event != None:  
     595            self.button_report.Enable(True) 
    589596            wx.PostEvent(self.parent, StatusEvent(status = '\nFinished invariant computation...')) 
    590      
     597         
    591598    def undo(self,event=None): 
    592599        """ 
     
    594601         
    595602        : param event: undo button event 
    596          
    597603        """ 
    598604        if event != None: event.Skip() 
     
    612618        self._info_state_num() 
    613619         
    614  
    615620         
    616621    def redo(self,event=None): 
     
    619624         
    620625        : param event: redo button event 
    621          
    622626        """ 
    623627        if event != None: event.Skip() 
     
    636640        self._info_state_num() 
    637641         
     642    def report(self, event=None): 
     643        """ 
     644        Invoke report dialog panel 
     645         
     646        : param event: report button event 
     647        """ 
     648        from report_dialog import ReportDialog 
     649 
     650        report_string = self.state.report_str 
     651        dialog = ReportDialog(report_string, None, -1, "") 
     652        dialog.ShowModal() 
     653         
    638654    def get_state_by_num(self,state_num=None): 
    639655        """ 
     
    648664 
    649665        backup_state_list = copy.deepcopy(self.state.state_list) 
    650  
     666         
    651667        # get the previous state 
    652668        try: 
     
    656672        except : 
    657673            raise ValueError,  "No such state exists in history" 
    658  
     674         
    659675        # get the state at pre_compute_num 
    660676        comp_state = copy.deepcopy(self.state.state_list[current_compute_num]) 
     
    669685            except: 
    670686                pass 
    671              
     687           
    672688        self.compute_invariant(event=None) 
    673689        # set the input params at the state at pre_state_num 
     
    693709        self.state.saved_state = current_state 
    694710        self.state.state_num = state_num 
    695  
     711         
     712         
    696713         
    697714    def get_bookmark_by_num(self, num=None): 
     
    733750                pass 
    734751        self.state.saved_state = copy.deepcopy(current_state) 
    735  
     752        
    736753        self._enable_high_q_section(event=None) 
    737754        self._enable_low_q_section(event=None) 
     
    766783        self.button_undo.Disable() 
    767784        self.button_redo.Disable() 
     785        self.button_bookmark.Disable() 
     786        self.button_report.Disable() 
    768787        self.button_calculate.SetFocus() 
    769788        #self.SetupScrolling() 
     
    851870        self._redo_disable() 
    852871         
     872         
    853873    def _reset_state_list(self,data=None): 
    854874        """ 
     
    870890 
    871891        self.state.state_num = self.state.saved_state['state_num'] 
     892        self.state.timestamp = "('00:00:00', '00/00/0000')" 
     893 
    872894        # Put only the current state in the list 
    873895        self.state.state_list[str(self.state.state_num)] = self.state.clone_state()#copy.deepcopy(self.state.saved_state) 
     
    923945        self._undo_enable() 
    924946        self._redo_disable() 
     947        self.button_bookmark.Enable(True) 
     948        self.button_report.Disable() 
     949        
    925950         
    926951    def _on_out_text(self, event):      
     
    12691294        """ 
    12701295        if event != None:  
     1296            self.button_bookmark.Enable(True) 
     1297            self.button_report.Disable() 
    12711298            print "enable fit==>event!=None" 
    12721299 
     
    12851312        Disable or enable some button if the user enable low q extrapolation 
    12861313        """ 
    1287         #if event != None: self._set_compute_state() 
     1314        if event != None:  
     1315            self.button_bookmark.Enable(True) 
     1316            self.button_report.Disable() 
     1317             
    12881318        if self.enable_low_cbox.GetValue(): 
    12891319            self.npts_low_tcl.Enable() 
     
    13091339        Enable editing power law section at low q range 
    13101340        """ 
    1311         #if event != None: self._set_compute_state() 
     1341        if event != None:  
     1342            self.button_bookmark.Enable(True) 
     1343            self.button_report.Disable() 
    13121344        if self.guinier.GetValue(): 
    13131345            self.power_law_low.SetValue(False) 
     
    13991431        Enable and disable the power value editing 
    14001432        """ 
    1401         #if event != None: self._set_compute_state() 
     1433        if event != None:  
     1434            self.button_bookmark.Enable(True) 
     1435            self.button_report.Disable() 
    14021436        if self.fix_enable_high.IsEnabled(): 
    14031437            if self.fix_enable_high.GetValue(): 
     
    14131447        Disable or enable some button if the user enable high q extrapolation 
    14141448        """ 
    1415         #if event != None: self._set_compute_state() 
     1449        if event != None:  
     1450            self.button_bookmark.Enable(True) 
     1451            self.button_report.Disable() 
    14161452        if self.enable_high_cbox.GetValue(): 
    14171453            self.npts_high_tcl.Enable() 
     
    16681704        self.undo_png = os.path.join(path,"undo.png") 
    16691705        self.redo_png = os.path.join(path,"redo.png") 
     1706        self.bookmark_png = os.path.join(path,"bookmark.png") 
     1707        self.report_png = os.path.join(path,"report.png") 
    16701708        self.save_png = os.path.join(path,"save.png") 
    16711709        #undo button 
     
    16811719        self.Bind(wx.EVT_BUTTON, self.redo, id=id) 
    16821720        self.button_redo.Disable()    
     1721        #bookmark button 
     1722        id = wx.NewId() 
     1723        self.button_bookmark = wx.BitmapButton(self, id,wx.Bitmap(self.bookmark_png))#wx.Button(self, id, "Undo",size=(50,20)) 
     1724        self.button_bookmark.SetToolTipString("Bookmark: right-click on the panel to retrieve") 
     1725        self.Bind(wx.EVT_BUTTON, self._on_bookmark, id=id) 
     1726        #self.button_bookmark.Disable() 
     1727        #report button 
     1728        id = wx.NewId() 
     1729        self.button_report = wx.BitmapButton(self, id,wx.Bitmap(self.report_png))#wx.Button(self, id, "Redo",size=(50,20)) 
     1730        self.button_report.SetToolTipString("Report the result of the computation") 
     1731        self.Bind(wx.EVT_BUTTON, self.report, id=id) 
     1732        #self.button_report.Disable()    
    16831733        #save button 
    16841734        id = wx.NewId() 
     
    16871737        self.Bind(wx.EVT_BUTTON, self._on_save_button, id=id)    
    16881738        self.button_save.Disable()   
    1689         self.save_button_sizer.AddMany([((PANEL_WIDTH/1.5,20), 1 , wx.EXPAND|wx.ADJUST_MINSIZE,0), 
     1739        self.save_button_sizer.AddMany([((PANEL_WIDTH/2,20), 1 , wx.EXPAND|wx.ADJUST_MINSIZE,0), 
    16901740                                   (self.button_undo, 0 ,wx.LEFT|wx.ADJUST_MINSIZE, 10), 
    16911741                                   (self.button_redo, 0 ,wx.LEFT|wx.ADJUST_MINSIZE, 10), 
     1742                                   (self.button_bookmark, 0 ,wx.LEFT|wx.ADJUST_MINSIZE, 10), 
     1743                                   (self.button_report, 0 ,wx.LEFT|wx.ADJUST_MINSIZE, 10), 
    16921744                                   (self.button_save, 0 ,wx.LEFT|wx.ADJUST_MINSIZE, 10)])         
    16931745    def _do_layout(self): 
  • invariantview/perspectives/invariant/invariant_state.py

    r4e1c362 rcb463b4  
    4242bookmark_list = {} 
    4343# list of input parameters (will be filled up on panel init) used by __str__  
    44 input_list = {}    
     44input_list = {'background_tcl':0, 
     45        'scale_tcl':0, 
     46        'contrast_tcl':0, 
     47        'porod_constant_tcl':'', 
     48        'npts_low_tcl':0, 
     49        'npts_high_tcl':0, 
     50        'power_high_tcl':0, 
     51        'power_low_tcl': 0}   
    4552# list of output parameters (order sensitive) used by __str__     
    4653output_list = [["qstar_low",                  "Q* from low Q extrapolation [1/(cm*A)]"], 
     
    8491        self.compute_num = 0 
    8592        self.state_num = 0 
    86         self.timestamp = None 
     93        self.timestamp = "('00:00:00', '00/00/0000')" 
    8794        self.container = None 
    88          
     95        # report_html strings 
     96        import sans.perspectives.invariant as invariant 
     97        path = invariant.get_data_path(media='media') 
     98        path_report_html= os.path.join(path,"report_template.html") 
     99        html_template=open(path_report_html,"r") 
     100        self.template_str = html_template.read() 
     101        self.report_str = self.template_str 
     102        html_template.close() 
     103         
     104 
    89105         
    90106    def __str__(self): 
     
    199215        # Include warning msg 
    200216        state += "\n\nNote:\n" + self.container.warning_msg 
    201  
     217         
    202218        return state 
    203219 
     
    369385                            except: 
    370386                                exec "temp_state['%s'] = '%s'"% (item,val) 
    371  
    372387                             
    373388                    comp_entry = get_content('ns:comp_state', entry ) 
     
    416431                        self.set_saved_state(name=item, value=val) 
    417432 
    418  
    419              
     433    def set_report_string(self): 
     434        """ 
     435        Get the values (strings) from __str__ for report  
     436        """ 
     437        strings = self.__str__() 
     438     
     439        # default string values 
     440        for num in range (1,19): 
     441            exec "s_%s = 'NA'"% str(num) 
     442        lines = strings.split('\n') 
     443        # get all string values from __str__() 
     444        for line in range(0,len(lines)): 
     445            if line == 1: 
     446                s_1 = lines[1] 
     447            elif line == 2: 
     448                s_2 = lines[2] 
     449            else: 
     450                item = lines[line].split(':') 
     451                item[0] = item[0].strip() 
     452                if item[0]== "scale": 
     453                    s_3 = item[1] 
     454                elif item[0] == "porod constant": 
     455                    s_4 = item[1] 
     456                elif item[0] == "background": 
     457                    s_5 = item[1] 
     458                elif item[0] == "contrast": 
     459                    s_6 = item[1] 
     460                elif item[0] == "Extrapolation": 
     461                    extra = item[1].split(";") 
     462                    bool_0 = extra[0].split("=") 
     463                    bool_1 = extra[1].split("=") 
     464                    s_7 = " "+bool_0[0]+" = "+bool_0[1] 
     465                    s_8 = " "+bool_1[0]+" = "+bool_1[1] 
     466                elif item[0]=="npts low": 
     467                    s_9 = item[1] 
     468                elif item[0]=="npts high": 
     469                    s_10 = item[1] 
     470                elif item[0] == "volume fraction": 
     471                    s_17 = item[1] 
     472                elif item[0] == "specific surface": 
     473                    s_18 = item[1] 
     474                elif item[0].split("(")[0].strip()=="power high": 
     475                    s_11 = item[0]+" ="+item[1] 
     476                elif item[0].split("(")[0].strip()=="power low": 
     477                    s_12 = item[0]+" ="+item[1] 
     478                elif item[0].split("[")[0].strip()=="Q* from low Q extrapolation": 
     479                    s_13 = item[1] 
     480                elif item[0].split("[")[0].strip()=="Q* from data": 
     481                    s_14 = item[1] 
     482                elif item[0].split("[")[0].strip()=="Q* from high Q extrapolation": 
     483                    s_15 = item[1] 
     484                elif item[0].split("[")[0].strip()=="total Q*": 
     485                    s_16 = item[1] 
     486                else: 
     487                    continue 
     488 
     489        self.report_str = str(self.template_str)% (s_1,s_2,s_3,s_4,s_5,s_6,s_7,s_8,s_9,s_10,s_11,s_12,s_13,s_14,s_15,s_16,s_17,s_18) 
     490 
    420491    def set_saved_state(self, name, value): 
    421492        """ 
Note: See TracChangeset for help on using the changeset viewer.