Changeset e20870bc in sasview for src/sas/qtgui/Plotting/Slicers


Ignore:
Timestamp:
Jun 27, 2018 5:33:52 AM (6 years ago)
Author:
Piotr Rozyczko <rozyczko@…>
Branches:
ESS_GUI, 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
Children:
b1a7a81
Parents:
c5e0d84
git-author:
Piotr Rozyczko <rozyczko@…> (05/31/18 07:15:47)
git-committer:
Piotr Rozyczko <rozyczko@…> (06/27/18 05:33:52)
Message:

Masking dialog for fitting

Location:
src/sas/qtgui/Plotting/Slicers
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • src/sas/qtgui/Plotting/Slicers/AnnulusSlicer.py

    r4992ff2 re20870bc  
    382382        self.set_cursor(x, self._inner_mouse_y) 
    383383 
    384 class CircularMask(BaseInteractor): 
    385     """ 
    386      Draw a ring Given a radius 
    387     """ 
    388     def __init__(self, base, axes, color='grey', zorder=3, side=None): 
    389         """ 
    390         :param: the color of the line that defined the ring 
    391         :param r: the radius of the ring 
    392         :param sign: the direction of motion the the marker 
    393         """ 
    394         BaseInteractor.__init__(self, base, axes, color=color) 
    395         self.markers = [] 
    396         self.axes = axes 
    397         self.base = base 
    398         self.is_inside = side 
    399         self.qmax = min(numpy.fabs(self.base.data.xmax), 
    400                         numpy.fabs(self.base.data.xmin))  # must be positive 
    401         self.connect = self.base.connect 
    402  
    403         # Cursor position of Rings (Left(-1) or Right(1)) 
    404         self.xmaxd = self.base.data.xmax 
    405         self.xmind = self.base.data.xmin 
    406  
    407         if (self.xmaxd + self.xmind) > 0: 
    408             self.sign = 1 
    409         else: 
    410             self.sign = -1 
    411         # Inner circle 
    412         self.outer_circle = RingInteractor(self, self.axes, 'blue', 
    413                                            zorder=zorder + 1, r=self.qmax / 1.8, 
    414                                            sign=self.sign) 
    415         self.outer_circle.qmax = self.qmax * 1.2 
    416         self.update() 
    417         self._post_data() 
    418  
    419     def set_layer(self, n): 
    420         """ 
    421         Allow adding plot to the same panel 
    422         :param n: the number of layer 
    423         """ 
    424         self.layernum = n 
    425         self.update() 
    426  
    427     def clear(self): 
    428         """ 
    429         Clear the slicer and all connected events related to this slicer 
    430         """ 
    431         self.clear_markers() 
    432         self.outer_circle.clear() 
    433         self.base.connect.clearall() 
    434  
    435     def update(self): 
    436         """ 
    437         Respond to changes in the model by recalculating the profiles and 
    438         resetting the widgets. 
    439         """ 
    440         # Update locations 
    441         self.outer_circle.update() 
    442         self._post_data() 
    443         out = self._post_data() 
    444         return out 
    445  
    446     def save(self, ev): 
    447         """ 
    448         Remember the roughness for this layer and the next so that we 
    449         can restore on Esc. 
    450         """ 
    451         self.outer_circle.save(ev) 
    452  
    453     def _post_data(self): 
    454         """ 
    455         Uses annulus parameters to plot averaged data into 1D data. 
    456  
    457         :param nbins: the number of points to plot 
    458  
    459         """ 
    460         # Data to average 
    461         data = self.base.data 
    462  
    463         # If we have no data, just return 
    464         if data is None: 
    465             return 
    466         mask = data.mask 
    467         from sas.sascalc.dataloader.manipulations import Ringcut 
    468  
    469         rmin = 0 
    470         rmax = numpy.fabs(self.outer_circle.get_radius()) 
    471  
    472         # Create the data1D Q average of data2D 
    473         mask = Ringcut(r_min=rmin, r_max=rmax) 
    474  
    475         if self.is_inside: 
    476             out = (mask(data) == False) 
    477         else: 
    478             out = (mask(data)) 
    479         return out 
    480  
    481  
    482     def moveend(self, ev): 
    483         """ 
    484         Called when any dragging motion ends. 
    485         Post an event (type =SlicerParameterEvent) 
    486         to plotter 2D with a copy  slicer parameters 
    487         Call  _post_data method 
    488         """ 
    489         self.base.thaw_axes() 
    490         # create a 1D data plot 
    491         self._post_data() 
    492  
    493     def restore(self): 
    494         """ 
    495         Restore the roughness for this layer. 
    496         """ 
    497         self.outer_circle.restore() 
    498  
    499     def move(self, x, y, ev): 
    500         """ 
    501         Process move to a new position, making sure that the move is allowed. 
    502         """ 
    503         pass 
    504  
    505     def set_cursor(self, x, y): 
    506         pass 
    507  
    508     def getParams(self): 
    509         """ 
    510         Store a copy of values of parameters of the slicer into a dictionary. 
    511  
    512         :return params: the dictionary created 
    513  
    514         """ 
    515         params = {} 
    516         params["outer_radius"] = numpy.fabs(self.outer_circle._inner_mouse_x) 
    517         return params 
    518  
    519     def setParams(self, params): 
    520         """ 
    521         Receive a dictionary and reset the slicer with values contained 
    522         in the values of the dictionary. 
    523  
    524         :param params: a dictionary containing name of slicer parameters and 
    525             values the user assigned to the slicer. 
    526         """ 
    527         outer = numpy.fabs(params["outer_radius"]) 
    528         # Update the picture 
    529         self.outer_circle.set_cursor(outer, self.outer_circle._inner_mouse_y) 
    530         # Post the data given the nbins entered by the user 
    531         self._post_data() 
    532  
    533     def draw(self): 
    534         self.base.update() 
    535  
     384 
  • src/sas/qtgui/Plotting/Slicers/Arc.py

    • Property mode changed from 100755 to 100644
    rd744767 re20870bc  
    22    Arc slicer for 2D data 
    33""" 
    4 import math 
     4import numpy as np 
    55 
    6 from .BaseInteractor import BaseInteractor 
     6from sas.qtgui.Plotting.Slicers.BaseInteractor import BaseInteractor 
    77 
    88class ArcInteractor(BaseInteractor): 
     
    1111    """ 
    1212    def __init__(self, base, axes, color='black', zorder=5, r=1.0, 
    13                  theta1=math.pi / 8, theta2=math.pi / 4): 
     13                 theta1=np.pi / 8, theta2=np.pi / 4): 
    1414        BaseInteractor.__init__(self, base, axes, color=color) 
    1515        self.markers = [] 
     
    5555            Return arc radius 
    5656        """ 
    57         radius = math.sqrt(math.pow(self._mouse_x, 2) + \ 
    58                            math.pow(self._mouse_y, 2)) 
     57        radius = np.sqrt(np.power(self._mouse_x, 2) + \ 
     58                           np.power(self._mouse_y, 2)) 
    5959        return radius 
    6060 
     
    7575            self.theta2 = theta2 
    7676        while self.theta2 < self.theta1: 
    77             self.theta2 += (2 * math.pi) 
    78         while self.theta2 >= (self.theta1 + 2 * math.pi): 
    79             self.theta2 -= (2 * math.pi) 
    80         npts = int((self.theta2 - self.theta1) / (math.pi / 120)) 
     77            self.theta2 += (2 * np.pi) 
     78        while self.theta2 >= (self.theta1 + 2 * np.pi): 
     79            self.theta2 -= (2 * np.pi) 
     80        npts = int((self.theta2 - self.theta1) / (np.pi / 120)) 
    8181 
    8282        if r is None: 
    83             self.radius = math.sqrt(math.pow(self._mouse_x, 2) + \ 
    84                                      math.pow(self._mouse_y, 2)) 
     83            self.radius = np.sqrt(np.power(self._mouse_x, 2) + \ 
     84                                     np.power(self._mouse_y, 2)) 
    8585        else: 
    8686            self.radius = r 
    8787        for i in range(self.npts): 
    8888            phi = (self.theta2 - self.theta1) / (self.npts - 1) * i + self.theta1 
    89             xval = 1.0 * self.radius * math.cos(phi) 
    90             yval = 1.0 * self.radius * math.sin(phi) 
     89            xval = 1.0 * self.radius * np.cos(phi) 
     90            yval = 1.0 * self.radius * np.sin(phi) 
    9191 
    9292            x.append(xval) 
  • src/sas/qtgui/Plotting/Slicers/AzimutSlicer.py

    • Property mode changed from 100755 to 100644
    rb3e8629 re20870bc  
    44# TODO: NEED MAJOR REFACTOR 
    55# 
    6 import math 
    7 from .BaseInteractor import BaseInteractor 
     6import numpy as np 
     7from sas.qtgui.Plotting.Slicers.Arc import ArcInteractor 
     8from sas.qtgui.Plotting.Slicers.RadiusInteractor import RadiusInteractor 
     9from sas.qtgui.Plotting.Slicers.BaseInteractor import BaseInteractor 
    810 
    911class SectorInteractor(BaseInteractor): 
     
    2224        # # Number of points on the plot 
    2325        self.nbins = 20 
    24         theta1 = 2 * math.pi / 3 
    25         theta2 = -2 * math.pi / 3 
     26        theta1 = 2 * np.pi / 3 
     27        theta2 = -2 * np.pi / 3 
    2628 
    2729        # Inner circle 
    28         from .Arc import ArcInteractor 
    2930        self.inner_circle = ArcInteractor(self, self.base.subplot, 
    3031                                          zorder=zorder, 
     
    4041        self.outer_circle.qmax = self.qmax * 1.2 
    4142        # self.outer_circle.set_cursor(self.base.qmax/1.8, 0) 
    42         from Edge import RadiusInteractor 
    4343        self.right_edge = RadiusInteractor(self, self.base.subplot, 
    4444                                           zorder=zorder + 1, 
     
    132132            phimin = self.left_edge.get_angle() 
    133133            phimax = self.right_edge.get_angle() 
    134         # print "phimin, phimax, rmin ,rmax",math.degrees(phimin), 
    135         # math.degrees(phimax), rmin ,rmax 
    136         # from sas.sascalc.dataloader.manipulations import SectorQ 
    137134 
    138135        sect = new_sector(r_min=rmin, r_max=rmax, 
  • src/sas/qtgui/Plotting/Slicers/BoxSlicer.py

    r4992ff2 re20870bc  
    11import numpy 
    22 
    3 from .BaseInteractor import BaseInteractor 
     3from sas.qtgui.Plotting.Slicers.BaseInteractor import BaseInteractor 
    44from sas.qtgui.Plotting.PlotterData import Data1D 
    55import sas.qtgui.Utilities.GuiUtils as GuiUtils 
  • src/sas/qtgui/Plotting/Slicers/BoxSum.py

    rfbfc488 re20870bc  
    88from sas.qtgui.Utilities.GuiUtils import formatNumber, toDouble 
    99 
    10 from .BaseInteractor import BaseInteractor 
     10from sas.qtgui.Plotting.Slicers.BaseInteractor import BaseInteractor 
    1111from sas.sascalc.dataloader.manipulations import Boxavg 
    1212from sas.sascalc.dataloader.manipulations import Boxsum 
  • src/sas/qtgui/Plotting/Slicers/SectorSlicer.py

    rd6b8a1d re20870bc  
    55import logging 
    66 
    7 from .BaseInteractor import BaseInteractor 
     7from sas.qtgui.Plotting.Slicers.BaseInteractor import BaseInteractor 
    88from sas.qtgui.Plotting.PlotterData import Data1D 
    99import sas.qtgui.Utilities.GuiUtils as GuiUtils 
     
    283283        self.markers = [] 
    284284        self.axes = axes 
     285        self.color = color 
    285286        # compute the value of the angle between the current line and 
    286287        # the x-axis 
     
    438439        if self.phi > numpy.pi: 
    439440            self.phi = 2 * numpy.pi - numpy.fabs(self.theta2 - self.theta) 
    440         self.base.base.update() 
     441        #self.base.base.update() 
     442        self.base.update() 
    441443 
    442444    def set_cursor(self, x, y): 
     
    464466 
    465467        self.markers = [] 
     468        self.color = color 
    466469        self.axes = axes 
    467470        self.save_theta = theta 
     
    541544        self.theta = numpy.arctan2(y, x) 
    542545        self.has_move = True 
    543         self.base.base.update() 
     546        #self.base.base.update() 
     547        self.base.update() 
    544548 
    545549    def set_cursor(self, x, y): 
Note: See TracChangeset for help on using the changeset viewer.