Ignore:
Timestamp:
Dec 15, 2008 7:07:21 PM (16 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:
cd84dca
Parents:
d250f7d
Message:

working on slicer parameter panel

Location:
guiframe/local_perspectives/plotting
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • guiframe/local_perspectives/plotting/Arc.py

    rb98db8c re8c96f5  
    2929        self.theta1=theta1 
    3030        self.theta2=theta2 
    31        
     31        self.radius= r 
    3232        [self.inner_circle] = self.axes.plot([],[], 
    3333                                      linestyle='-', marker='', 
     
    5858        return radius 
    5959         
    60     def update(self,theta1=None,theta2=None): 
     60    def update(self,theta1=None,theta2=None, nbins=None, r=None): 
    6161        """ 
    6262        Draw the new roughness on the graph. 
     
    6969        if theta2 !=None: 
    7070            self.theta2= theta2 
     71         
    7172        print "ring update theta1 theta2", math.degrees(self.theta1), math.degrees(self.theta2) 
    7273        while self.theta2 < self.theta1: self.theta2 += 2*math.pi 
    73         npts = int((self.theta2 - self.theta1)/(math.pi/120)) 
     74         
    7475         
    7576         
    7677             
    77              
     78        if nbins!=None: 
     79            self.npts =nbins 
     80        else: 
     81            npts = int((self.theta2 - self.theta1)/(math.pi/120))    
    7882        for i in range(self.npts): 
    7983             
    8084            phi =(self.theta2-self.theta1)/(self.npts-1)*i +self.theta1 
    8185            #delta= phi1-phi 
    82             r=  math.sqrt(math.pow(self._inner_mouse_x, 2)+math.pow(self._inner_mouse_y, 2)) 
    83             xval = 1.0*r*math.cos(phi)  
    84             yval = 1.0*r*math.sin(phi)  
    85             #xval = 1.0*self._inner_mouse_x*math.cos(phi)  
    86             #yval = 1.0*self._inner_mouse_x*math.sin(phi) 
    87            
    88             
     86            if r ==None: 
     87                self.radius=  math.sqrt(math.pow(self._inner_mouse_x, 2)+math.pow(self._inner_mouse_y, 2)) 
     88            else: 
     89                self.radius= r 
     90             
     91            xval = 1.0*self.radius*math.cos(phi)  
     92            yval = 1.0*self.radius*math.sin(phi)  
     93             
    8994            x.append(xval) 
    9095            y.append(yval) 
     
    9398        self.inner_circle.set_data(x, y)  
    9499         
    95         """ 
    96         r=  math.sqrt(math.pow(self._inner_mouse_x, 2)+math.pow(self._inner_mouse_y, 2)) 
    97         x1=  r*math.cos(self.theta1) 
    98         y1= r*math.sin(self.theta1) 
    99         """ 
    100         #x1= self._inner_mouse_x*math.cos(self.theta1) 
    101         #y1= self._inner_mouse_x*math.sin(self.theta1) 
    102         #x2= r2*math.cos(self.theta1) 
    103         #y2= r2*math.sin(self.theta1) 
    104         
    105     
     100       
    106101    def save(self, ev): 
    107102        """ 
     
    109104        can restore on Esc. 
    110105        """ 
    111         #self._inner_save_x = self._inner_mouse_x 
    112         #self._inner_save_y = self._inner_mouse_y 
    113         self._inner_save_x = ev.xdata 
    114         self._inner_save_y = ev.ydata 
    115         print "save value",self._inner_save_x ,self._inner_save_y 
     106        self._inner_save_x = self._inner_mouse_x 
     107        self._inner_save_y = self._inner_mouse_y 
     108        #self._inner_save_x = ev.xdata 
     109        #self._inner_save_y = ev.ydata 
     110         
    116111        self.base.freeze_axes() 
    117112 
    118113    def moveend(self, ev): 
    119114        self.has_move= False 
     115         
     116        event = SlicerParameters.SlicerParameterEvent() 
     117        event.type = self.__class__.__name__ 
     118        event.params = self.get_params() 
     119        print "in arc moveend params",self.get_params() 
     120        #wx.PostEvent(self.base.base.parent, event) 
     121         
    120122        self.base.moveend(ev) 
    121123             
     
    131133        Process move to a new position, making sure that the move is allowed. 
    132134        """ 
    133         print "ring move x, y", x,y 
     135        #print "ring move x, y", x,y 
    134136        self._inner_mouse_x = x 
    135137        self._inner_mouse_y = y 
     
    137139        self.base.base.update() 
    138140         
    139     def set_cursor(self, x, y): 
    140         self.move(x, y, None) 
    141         self.update() 
     141    def set_cursor(self,radius, phi_min, phi_max,nbins): 
     142         
     143        self.theta1= phi_min 
     144        self.theta2= phi_max 
     145        self.update(nbins=nbins, r=radius) 
    142146         
    143147         
    144148    def get_params(self): 
    145149        params = {} 
    146         params["radius"] = self._inner_mouse_x 
     150        params["radius"] = self.radius 
     151        params["theta1"] = self.theta1 
     152        params["theta2"] = self.theta2 
    147153        return params 
    148154     
  • guiframe/local_perspectives/plotting/DataPanel.py

    r356aea78 re8c96f5  
    2828DEFAULT_QSTEP = 0.001 
    2929DEFAULT_BEAM = 0.005 
    30  
     30BIN_WIDTH =1 
    3131import pylab 
    3232 
     
    482482         
    483483        id = wx.NewId() 
    484         slicerpop.Append(id, '&Edit Parameters') 
    485         wx.EVT_MENU(self, id, self._onEditDetector)  
     484        slicerpop.Append(id, '&Edit Slicer Parameters') 
     485        wx.EVT_MENU(self, id, self._onEditSlicer)  
    486486         
    487487        slicerpop.AppendSeparator() 
     
    580580         
    581581        from DataLoader.manipulations import CircularAverage 
    582         Circle = CircularAverage( r_min= -self.qmax, r_max= self.qmax, bin_width=0.001) 
     582        #Circle = CircularAverage( r_min= -self.qmax, r_max= self.qmax, bin_width=BIN_WIDTH ) 
     583        Circle = CircularAverage( r_min= -1, r_max= 1, bin_width=0.001 ) 
    583584        circ = Circle(self.data2D) 
    584585        from sans.guiframe.dataFitting import Data1D 
     
    608609         
    609610         
     611    def _onEditSlicer(self, event): 
     612        if self.slicer !=None: 
     613            from SlicerParameters import SlicerParameterPanel 
     614            dialog = SlicerParameterPanel(self.parent, -1, "Slicer Parameters") 
     615            dialog.set_slicer(self.slicer.__class__.__name__, 
     616                            self.slicer.get_params()) 
     617            if dialog.ShowModal() == wx.ID_OK: 
     618                dialog.Destroy()  
    610619         
    611620    def onSectorQ(self, event): 
  • guiframe/local_perspectives/plotting/Edge.py

    rb98db8c re8c96f5  
    6464         
    6565         
    66     def get_radius(self): 
     66    def get_angle(self): 
    6767        return self.theta 
    6868         
    69     def update(self,r1=None, r2=None, theta_right=None, theta_left=None): 
     69    def update(self,r1=None, r2=None, theta=None): 
    7070        """ 
    7171        Draw the new roughness on the graph. 
     
    7575        if r2!=None: 
    7676            self.r2=r2 
    77         """ 
    78         self.theta_left=theta_left 
    79         self.theta_right=theta_right 
    80         if r1 !=None: 
    81             self.r1=r1 
    82         if r2!=None: 
    83             self.r2=r2 
    84         if theta_right!=None: 
    85             if theta_right < self.theta: 
    86                 self.move_stop=True 
    87             else: 
    88                 self.move_stop=False 
    89         if theta_left !=None: 
    90             if theta_left > self.theta: 
    91                 self.move_stop=True 
    92             else: 
    93                 self.move_stop=False 
    94         if theta_left ==None and theta_right==None: 
    95             self.move_stop=True 
    96         """ 
    97         #print "in the edge theta_right theta_left",theta_right,theta_left,self.theta 
     77        if theta !=None: 
     78            self.theta= theta 
     79        
     80        print "in the edge r1, r2",self.r1,self.r2,math.degrees(self.theta) 
    9881        x1= self.r1*math.cos(self.theta) 
    9982        y1= self.r1*math.sin(self.theta) 
     
    10992        can restore on Esc. 
    11093        """ 
    111         self.save_theta= self.theta 
     94        self.save_theta= math.atan2(ev.y,ev.x) 
     95        #self.save_theta= self.theta 
    11296        self.base.freeze_axes() 
    11397    
     
    126110        Process move to a new position, making sure that the move is allowed. 
    127111        """ 
    128         #print "on move theta left , theta right",self.theta_left,self.theta_right 
    129         theta= math.atan2(y,x) 
    130         """print "on move theta left , theta right",self.theta_left,self.theta_right,theta 
    131             if self.theta_left !=None: 
    132                 if self.theta_left >= theta: 
    133                     print "went hier" 
    134                         self.move_stop= True 
    135                 if self.theta_right !=None: 
    136                     if self.theta_right <= theta: 
    137                         self.move_stop= True 
    138             
    139             self.move_stop= True 
    140             if self.move_stop: 
    141          """ 
     112         
    142113        self.theta= math.atan2(y,x) 
    143114        self.has_move= True 
     
    145116        self.base.base.update() 
    146117         
    147     def set_cursor(self, x, y): 
    148         self.move(x, y, None) 
     118    def set_cursor(self,r_min, r_max, theta): 
     119        self.theta= theta 
     120        self.r1= r_min 
     121        self.r2=r_max 
    149122        self.update() 
    150123         
     
    154127        params["radius1"] = self.r1 
    155128        params["radius2"] = self.r2 
     129        params["theta"] = self.theta 
    156130        return params 
    157131     
    158132    def set_params(self, params): 
     133        print "when here set curcor arc" 
    159134 
    160135        x1 = params["radius1"]  
    161136        x2 = params["radius2"]  
    162         self.set_cursor(x, self._inner_mouse_y) 
     137        theta= params["theta"] 
     138        self.set_cursor(x1, x2, theta) 
    163139         
    164140     
  • guiframe/local_perspectives/plotting/SectorSlicer.py

    rb98db8c re8c96f5  
    4848        #self.outer_circle.set_cursor(self.base.qmax/1.8, 0) 
    4949        from Edge import RadiusInteractor 
    50         self.inner_radius= RadiusInteractor(self, self.base.subplot, zorder=zorder+1, 
     50        self.right_edge= RadiusInteractor(self, self.base.subplot, zorder=zorder+1, 
    5151                                             arc1=self.inner_circle, 
    5252                                             arc2=self.outer_circle, 
    5353                                            theta=theta1) 
    54         self.outer_radius= RadiusInteractor(self, self.base.subplot, zorder=zorder+1, 
     54        self.left_edge= RadiusInteractor(self, self.base.subplot, zorder=zorder+1, 
    5555                                             arc1=self.inner_circle, 
    5656                                             arc2=self.outer_circle, 
     
    5959        self._post_data() 
    6060        # Bind to slice parameter events 
    61         #self.base.parent.Bind(SlicerParameters.EVT_SLICER_PARS, self._onEVT_SLICER_PARS) 
     61        self.base.parent.Bind(SlicerParameters.EVT_SLICER_PARS, self._onEVT_SLICER_PARS) 
    6262 
    6363 
     
    9393        self.outer_circle.clear() 
    9494        self.inner_circle.clear() 
    95         self.inner_radius.clear() 
    96         self.outer_radius.clear() 
     95        self.right_edge.clear() 
     96        self.left_edge.clear() 
    9797        #self.base.connect.disconnect() 
    98         #self.base.parent.Unbind(SlicerParameters.EVT_SLICER_PARS) 
     98        self.base.parent.Unbind(SlicerParameters.EVT_SLICER_PARS) 
    9999         
    100100    def update(self): 
     
    109109            r1=self.inner_circle.get_radius() 
    110110            r2=self.outer_circle.get_radius() 
    111             self.inner_radius.update(r1,r2) 
    112             self.outer_radius.update(r1,r2) 
     111            self.right_edge.update(r1,r2) 
     112            self.left_edge.update(r1,r2) 
    113113        if self.outer_circle.has_move:     
    114114            print "outer circle has moved"  
     
    116116            r1=self.inner_circle.get_radius() 
    117117            r2=self.outer_circle.get_radius() 
    118             self.inner_radius.update(r1,r2) 
    119             self.outer_radius.update(r1,r2) 
    120         if self.inner_radius.has_move: 
    121             print "inner radius has moved" 
    122             self.inner_radius.update(theta_left=self.outer_radius.get_radius()) 
    123             self.inner_circle.update(theta1=self.inner_radius.get_radius(), theta2=None) 
    124             self.outer_circle.update(theta1=self.inner_radius.get_radius(), theta2=None) 
    125         if  self.outer_radius.has_move: 
    126              print "outer radius has moved" 
    127              self.outer_radius.update(theta_right=self.inner_radius.get_radius()) 
    128              self.inner_circle.update(theta1=None, theta2=self.outer_radius.get_radius()) 
    129              self.outer_circle.update(theta1=None, theta2=self.outer_radius.get_radius()) 
     118            self.left_edge.update(r1,r2) 
     119            self.right_edge.update(r1,r2) 
     120        if self.right_edge.has_move: 
     121            print "right edge has moved" 
     122            self.right_edge.update() 
     123            self.inner_circle.update(theta1=self.right_edge.get_angle(), theta2=None) 
     124            self.outer_circle.update(theta1=self.right_edge.get_angle(), theta2=None) 
     125        if  self.left_edge.has_move: 
     126            print "left Edge has moved" 
     127            self.left_edge.update() 
     128            self.inner_circle.update(theta1=None, theta2=self.left_edge.get_angle()) 
     129            self.outer_circle.update(theta1=None, theta2=self.left_edge.get_angle()) 
    130130              
    131131         
     
    138138        self.inner_circle.save(ev) 
    139139        self.outer_circle.save(ev) 
     140        self.right_edge.save(ev) 
     141        self.left_edge.save(ev) 
     142         
    140143    def _post_data(self): 
    141144        pass 
     145     
    142146    def post_data(self,new_sector ): 
    143147        """ post data averaging in Q""" 
     
    148152            rmin=self.outer_circle.get_radius() 
    149153            rmax=self.inner_circle.get_radius() 
    150         if self.inner_radius.get_radius() < self.outer_radius.get_radius(): 
    151             phimin=self.inner_radius.get_radius() 
    152             phimax=self.outer_radius.get_radius() 
    153         else: 
    154             phimin=self.outer_radius.get_radius() 
    155             phimax=self.inner_radius.get_radius() 
     154        if self.right_edge.get_angle() < self.left_edge.get_angle(): 
     155            phimin=self.right_edge.get_angle() 
     156            phimax=self.left_edge.get_angle() 
     157        else: 
     158            phimin=self.left_edge.get_angle() 
     159            phimax=self.right_edge.get_angle() 
    156160             
    157161        print "phimin, phimax, rmin ,rmax",math.degrees(phimin), math.degrees(phimax), rmin ,rmax 
     
    190194         
    191195    def moveend(self, ev): 
    192         self.base.thaw_axes() 
    193          
    194         # Post paramters 
     196        #self.base.thaw_axes() 
     197         
     198         # Post paramters 
    195199        event = SlicerParameters.SlicerParameterEvent() 
    196200        event.type = self.__class__.__name__ 
    197201        event.params = self.get_params() 
     202        print "main moveend ", event.params 
    198203        wx.PostEvent(self.base.parent, event) 
    199  
    200204        self._post_data() 
    201205             
     
    205209        """ 
    206210        self.inner_circle.restore() 
    207         #self.outer_circle.restore() 
     211        self.outer_circle.restore() 
     212        self.right_edge.restore() 
     213        self.left_edge.restore() 
    208214 
    209215    def move(self, x, y, ev): 
     
    218224    def get_params(self): 
    219225        params = {} 
    220         params["inner_radius"] = self.inner_circle._inner_mouse_x 
    221         params["outer_radius"] = self.outer_circle._inner_mouse_x 
    222         params["phi_min"] = self.inner_radius.get_radius() 
    223         params["phi_max"] = self.inner_radius.get_radius() 
     226        params["r_min"] = self.inner_circle.get_radius() 
     227        params["r_max"] = self.outer_circle.get_radius() 
     228        params["phi_min"] = self.right_edge.get_angle() 
     229        params["phi_max"] = self.left_edge.get_angle() 
    224230        params["nbins"] = self.nbins 
    225231        return params 
    226232     
    227233    def set_params(self, params): 
    228          
    229         inner = params["inner_radius"]  
    230         outer = params["outer_radius"]  
     234        print "setparams on main slicer ",params 
     235        inner = params["r_min"]  
     236        outer = params["r_max"]  
    231237        phi_min= params["phi_min"] 
    232         phi_min=params["phi_max"] 
     238        phi_max=params["phi_max"] 
    233239        self.nbins = int(params["nbins"]) 
    234240         
    235241         
    236         self.inner_circle.set_cursor(inner, self.inner_circle._inner_mouse_y) 
    237         self.outer_circle.set_cursor(outer, self.outer_circle._inner_mouse_y) 
    238         self.inner_radius.set_cursor(inner, self.inner_circle._inner_mouse_y) 
    239         self.outer_radius.set_cursor(outer, self.outer_circle._inner_mouse_y) 
     242        self.inner_circle.set_cursor(inner, phi_min, phi_max,self.nbins) 
     243        self.outer_circle.set_cursor(outer,  phi_min, phi_max, self.nbins) 
     244        self.right_edge.set_cursor(inner, outer, phi_min) 
     245        self.left_edge.set_cursor(inner, outer, phi_max) 
    240246        self._post_data() 
    241247         
  • guiframe/local_perspectives/plotting/SlicerParameters.py

    rb06ef8c re8c96f5  
    1010(SlicerParameterEvent, EVT_SLICER_PARS)   = wx.lib.newevent.NewEvent() 
    1111 
    12 class SlicerParameterPanel(wx.Panel): 
     12def format_number(value, high=False): 
     13    """ 
     14        Return a float in a standardized, human-readable formatted string  
     15    """ 
     16    try:  
     17        value = float(value) 
     18    except: 
     19        return "NaN" 
     20     
     21    if high: 
     22        return "%-6.4g" % value 
     23    else: 
     24        return "%-5.3g" % value 
     25class SlicerParameterPanel(wx.Dialog): 
    1326    #TODO: show units 
    1427    #TODO: order parameters properly 
    1528     
    16     def __init__(self, parent, *args, **kwargs): 
    17         wx.Panel.__init__(self, parent, *args, **kwargs) 
     29    def __init__(self, parent, id, title): 
     30        wx.Dialog.__init__(self, parent, id, title, size=(400, 350)) 
    1831        self.params = {} 
    1932        self.parent = parent 
     
    3043        self.parent.Bind(EVT_SLICER, self.onEVT_SLICER) 
    3144        self.parent.Bind(EVT_SLICER_PARS, self.onParamChange) 
     45         
     46        
    3247 
    3348    def onEVT_SLICER(self, event): 
     
    3954        """ 
    4055        event.Skip() 
     56        print "on event slicer parameters" 
    4157        if event.obj_class==None: 
    4258            self.set_slicer(None, None) 
     
    4864            Rebuild the panel 
    4965        """ 
     66         
    5067        self.bck.Clear(True)   
    5168        self.type = type   
     
    7491                 
    7592                 
    76                 ctl.SetValue(str(params[item])) 
     93                ctl.SetValue(format_number(str(params[item]))) 
    7794                self.Bind(wx.EVT_TEXT_ENTER, self.onTextEnter) 
    7895                ctl.Bind(wx.EVT_KILL_FOCUS, self.onTextEnter) 
     
    113130            event = SlicerParameterEvent(type=self.type, params=params) 
    114131            wx.PostEvent(self.parent, event) 
     132             
     133  
     134        
     135 
    115136         
Note: See TracChangeset for help on using the changeset viewer.