Ignore:
Timestamp:
Dec 11, 2008 6:04:28 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:
f39511b
Parents:
b2c3225
Message:

small changes circular averaging

File:
1 edited

Legend:

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

    r768656e r2d107b8  
    1818from sans.guicomm.events import StatusEvent ,NewPlotEvent 
    1919 
     20 
     21from SlicerParameters import SlicerEvent 
    2022from binder import BindArtist 
     23(InternalEvent, EVT_INTERNAL)   = wx.lib.newevent.NewEvent() 
    2124#from SlicerParameters import SlicerEvent 
    2225#(InternalEvent, EVT_INTERNAL)   = wx.lib.newevent.NewEvent() 
     
    375378        self.slicer_z = 5 
    376379        self.slicer = None 
    377         #self.parent.Bind(EVT_INTERNAL, self._onEVT_INTERNAL) 
     380        self.parent.Bind(EVT_INTERNAL, self._onEVT_INTERNAL) 
    378381        self.axes_frozen = False 
    379382        ## Graph         
     
    457460         
    458461        id = wx.NewId() 
    459         slicerpop.Append(id, '&Sector') 
    460         wx.EVT_MENU(self, id, self.onSector)  
    461          
    462          
     462        slicerpop.Append(id, '&Sector Q') 
     463        wx.EVT_MENU(self, id, self.onSectorQ)  
     464         
     465        id = wx.NewId() 
     466        slicerpop.Append(id, '&Sector Phi') 
     467        wx.EVT_MENU(self, id, self.onSectorPhi)  
    463468       
    464469         
     
    524529        #self.slicer.update() 
    525530        self.draw() 
     531         
     532         
     533    def _getEmptySlicerEvent(self): 
     534        return SlicerEvent(type=None, 
     535                           params=None, 
     536                           obj_class=None) 
     537    def _onEVT_INTERNAL(self, event): 
     538        """ 
     539            I don't understand why Unbind followed by a Bind 
     540            using a modified self.slicer doesn't work. 
     541            For now, I post a clear event followed by 
     542            a new slicer event... 
     543        """ 
     544        self._setSlicer(event.slicer) 
     545             
     546    def _setSlicer(self, slicer): 
     547        # Clear current slicer 
     548        #printEVT("Plotter2D._setSlicer %s" % slicer) 
     549         
     550        if not self.slicer == None:   
     551            self.slicer.clear()             
     552             
     553        self.slicer_z += 1 
     554        self.slicer = slicer(self, self.subplot, zorder=self.slicer_z) 
     555        self.subplot.set_ylim(-self.qmax, self.qmax) 
     556        self.subplot.set_xlim(-self.qmax, self.qmax) 
     557        self.update() 
     558        self.slicer.update() 
     559         
     560        # Post slicer event 
     561        event = self._getEmptySlicerEvent() 
     562        event.type = self.slicer.__class__.__name__ 
     563        event.obj_class = self.slicer.__class__ 
     564        event.params = self.slicer.get_params() 
     565        wx.PostEvent(self.parent, event) 
     566 
    526567    def onCircular(self, event): 
    527568        """ 
    528             perform circular averaging 
    529         """ 
     569            perform circular averaging on Data2D 
     570        """ 
     571         
    530572        from DataLoader.manipulations import CircularAverage 
    531     def onSector(self, event): 
    532         """ 
    533             Perform sector averaging 
     573        Circle = CircularAverage( r_min= -self.qmax, r_max= self.qmax, bin_width=0.001) 
     574        circ = Circle(self.data2D) 
     575        from sans.guiframe.dataFitting import Data1D 
     576        if hasattr(circ,"dxl"): 
     577            dxl= circ.dxl 
     578        else: 
     579            dxl= None 
     580        if hasattr(circ,"dxw"): 
     581            dxw= circ.dxw 
     582        else: 
     583            dxw= None 
     584             
     585        new_plot = Data1D(x=circ.x,y=circ.y,dy=circ.dy,dxl=dxl,dxw=dxw) 
     586        new_plot.name = "Circ avg "+ self.data2D.name 
     587        new_plot.source=self.data2D.source 
     588        new_plot.info=self.data2D.info 
     589        new_plot.interactive = True 
     590        #print "loader output.detector",output.source 
     591        new_plot.detector =self.data2D.detector 
     592         
     593        # If the data file does not tell us what the axes are, just assume... 
     594        new_plot.xaxis("\\rm{q}","A^{-1}") 
     595        new_plot.yaxis("\\rm{Intensity} ","cm^{-1}") 
     596        new_plot.group_id = "Circ avg "+ self.data2D.name 
     597        self.scale = 'log' 
     598        wx.PostEvent(self.parent, NewPlotEvent(plot=new_plot, title=new_plot.name)) 
     599         
     600         
     601         
     602    def onSectorQ(self, event): 
     603        """ 
     604            Perform sector averaging on Q 
     605        """ 
     606        from SectorSlicer import SectorInteractorQ 
     607               
     608        self.slicer_z += 1 
     609        self.slicer = SectorInteractorQ(self, self.subplot, zorder=self.slicer_z) 
     610        self.subplot.set_ylim(-self.qmax, self.qmax) 
     611        self.subplot.set_xlim(-self.qmax, self.qmax) 
     612        self.update() 
     613        self.slicer.update() 
     614         
     615         
     616    def onSectorPhi(self, event): 
     617        """ 
     618            Perform sector averaging on Phi 
    534619        """ 
    535620        from SectorSlicer import SectorInteractor 
     
    544629        
    545630    def onClearSlicer(self, event): 
    546         print "on clear"   
    547          
     631        """ 
     632            Clear the slicer on the plot 
     633        """ 
     634        if not self.slicer==None: 
     635            self.slicer.clear() 
     636            self.subplot.figure.canvas.draw() 
     637            self.slicer = None 
     638         
     639            # Post slicer None event 
     640            event = self._getEmptySlicerEvent() 
     641            wx.PostEvent(self.parent, event) 
    548642           
    549643    def _onEditDetector(self, event): 
     
    553647    def _onToggleScale(self, event): 
    554648        """ 
    555             toggle axis and replot image 
     649            toggle pixel scale and replot image 
    556650        """ 
    557651        if self.scale == 'log': 
     
    562656                   self.ymax_2D,self.zmin_2D ,self.zmax_2D ) 
    563657        wx.PostEvent(self.parent, StatusEvent(status="Image is in %s scale"%self.scale)) 
     658         
     659         
     660         
     661         
     662         
    564663         
    565664class View1DModelPanel2D( View1DPanel2D): 
Note: See TracChangeset for help on using the changeset viewer.