def __init__(self): wx.Frame.__init__(self, None, title="Selena", size=(1700, 1000)) topSplitter = wx.SplitterWindow(self) vSplitter = wx.SplitterWindow(topSplitter) self.lateralPanel = LateralPanel(vSplitter) self.imagePanel = ImagePanel(vSplitter) vSplitter.SplitVertically(self.lateralPanel, self.imagePanel) vSplitter.SetMinimumPaneSize(400) self.menuPanel = MenuPanel(topSplitter) topSplitter.SplitHorizontally(self.menuPanel, vSplitter) topSplitter.SetMinimumPaneSize(120) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(topSplitter, 1, wx.EXPAND) self.SetSizer(sizer) self.menuPanel.ShowMenuPanel() self.lateralPanel.ShowMenuPanel() """ self.timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.TimeInterval, self.timer) self.timer.Start(1000) """ self.Bind(wx.EVT_BUTTON, self.OnButtonClickAbrir, self.menuPanel.AbrirButton()) self.Bind(wx.EVT_BUTTON, self.OnButtonClickFiltrar, self.menuPanel.FiltrarButton())
class MainFrame(wx.Frame): #################################################################### #INIT #################################################################### def __init__(self): wx.Frame.__init__(self, None) self.InitGUI() #################################################################### #GUI #################################################################### def InitGUI(self): #INIT SIZER self.sizer = wx.BoxSizer(wx.VERTICAL) self.imagePanel = ImagePanel(self) self.sizer.Add(self.imagePanel, 1, wx.EXPAND) self.SetSizer(self.sizer) #INIT IMAGE PANEL self.imagePanel.SetFocus() self.imagePanel.SetConfig(ImagePanel.ZOOM_SIZE) #set config mask self.imagePanel.Bind(wx.EVT_CHAR, self.OnKey) self.image = wx.Image(IMAGE_FILE, wx.BITMAP_TYPE_ANY) self.imagePanel.SetImage(self.image) #CONFIGURE FRAME icon = wx.Icon(ICON, wx.BITMAP_TYPE_PNG) self.SetIcon(icon) self.SetTitle('ImagePanel Example') self.Centre() self.SetSize((500, 500)) self.Bind(wx.EVT_SIZE, self.OnSize) self.Bind(wx.EVT_ICONIZE, self.OnSize) self.Show() #################################################################### #EVENTS #################################################################### def OnKey(self, e): try: { 314: self.OnLeftScroll, 316: self.OnRightScroll, 315: self.OnUpScroll, 317: self.OnDownScroll, 45: self.OnShrink, 43: self.OnEnlarge, 350: self.OnToggleFullScreen, 27: self.OnExitFullScreen }[e.GetKeyCode()](e) except KeyError: msg = "The key %d hasn't an assigned function" print msg % e.GetKeyCode() except TypeError, inst: print inst.args[0] except Exception, inst: print inst.args
def __init__(self, *args, **kwds): # begin wxGlade: CopyDialog.__init__ kwds["style"] = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX | wx.THICK_FRAME wx.Dialog.__init__(self, *args, **kwds) self.headerlbl = wx.TextCtrl(self, -1, "These files will be copied for date <date>:", style=wx.NO_BORDER) self.splitter = wx.SplitterWindow(self, -1, style=wx.SP_3D | wx.SP_BORDER) self.filelst = wx.ListCtrl(self.splitter, -1, style=wx.LC_REPORT | wx.SUNKEN_BORDER) self.previewpane = ImagePanel(self.splitter, -1) self.destlbl = wx.StaticText(self, -1, "Dest. Folder") self.destvalue = wx.TextCtrl(self, -1, "") self.namelbl = wx.StaticText(self, -1, "Name Pattern") self.namevalue = wx.TextCtrl(self, -1, "", style=wx.TE_PROCESS_ENTER) self.spacepanel1 = wx.Panel(self, -1) self.cancelbtn = wx.Button(self, wx.ID_CANCEL, "") self.neverbtn = wx.Button(self, -1, "&Never") self.okbtn = wx.Button(self, wx.ID_OK, "") self.gauge = wx.Gauge(self, -1, 100, style=wx.GA_HORIZONTAL | wx.GA_SMOOTH) self.__set_properties() self.__do_layout() self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.evt_filelst_select, self.filelst) self.Bind(wx.EVT_SPLITTER_SASH_POS_CHANGED, self.evt_splitter_resize, self.splitter) self.Bind(wx.EVT_TEXT_ENTER, self.evt_nameenter, self.namevalue) self.Bind(wx.EVT_BUTTON, self.evt_cancelbtn, self.cancelbtn) self.Bind(wx.EVT_BUTTON, self.evt_neverbtn, self.neverbtn) self.Bind(wx.EVT_BUTTON, self.evt_okbtn, self.okbtn) # end wxGlade self.Bind(wx.EVT_SIZE, self.evt_splitter_resize, self) self.handler = None self.date = None
def InitGUI(self): #INIT SIZER self.sizer = wx.BoxSizer(wx.VERTICAL) self.imagePanel = ImagePanel(self) self.sizer.Add(self.imagePanel, 1, wx.EXPAND) self.SetSizer(self.sizer) #INIT IMAGE PANEL self.imagePanel.SetFocus() self.imagePanel.SetConfig(ImagePanel.ZOOM_SIZE) #set config mask self.imagePanel.Bind(wx.EVT_CHAR, self.OnKey) self.image = wx.Image(IMAGE_FILE, wx.BITMAP_TYPE_ANY) self.imagePanel.SetImage(self.image) #CONFIGURE FRAME icon = wx.Icon(ICON, wx.BITMAP_TYPE_PNG) self.SetIcon(icon) self.SetTitle('ImagePanel Example') self.Centre() self.SetSize((500, 500)) self.Bind(wx.EVT_SIZE, self.OnSize) self.Bind(wx.EVT_ICONIZE, self.OnSize) self.Show()
def __init__(self,Yield): """Create a PELvis frame Keyword arguments: Yield -- A function to give control back to the main event loop """ wx.Frame.__init__(self,None,wx.ID_ANY,"PEL Visualizer") self.data = PelFile() self.Yield = Yield self.mask = np.ones((128,16),dtype=np.bool) #Create items in the frame self.yPanel = GraphPanel(self,(2,8),64,GraphPanel.VERTICAL) self.xPanel = GraphPanel(self,(8,2),64,GraphPanel.INVERTED) self.colorbar = ColorBarPanel(self,cm.jet) self.opPanel = PelvisOptionPanel(self) self.posPanel = PositionPanel(self) self.imPanel = ImagePanel(self,self.posPanel.set, self.opPanel.setPosMin,self.opPanel.setPosMax) self.specDlg = SpectrumDialog(self) self.cmp = None #color map self.imageSaveDialog=wx.FileDialog(self,"Choose graphics file",wildcard="Portable Network Graphic (png)|*.PNG|Windows Bitmap (bmp)|*.BMP|Joint Photographic Experts Group (jpg)|*.JPG|Portable Network Monocrome (pnm)|*.PNM|Tagged Image File Format (tif)|*.TIF|Archaic, useless format (pcx)|*.PCX",style=wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT) self.update = self.updateSingle#update the image self.updateData = self.updateSingleData#update the data in the image #Create the menu menubar = wx.MenuBar() filemenu = wx.Menu() editmenu = wx.Menu() scalemenu = wx.Menu() analysismenu = wx.Menu() noisemenu = wx.Menu() #populate the menu filemenu.Append(self.ID_OPEN,"&Open\tCtrl-O"," Open a PEL file") filemenu.Append(self.ID_OPENTWO,"&Polarized Set"," Open two PEL files") filemenu.Append(self.ID_SAVE,"&Save\tCtrl-S"," Save an image file") filemenu.Append(self.ID_SPECTRUM,"Spectrum"," View the TOF spectrum") filemenu.Append(self.ID_IMAGE_ARRAY,"&Export Images..."," Save a series of TOF snapshots") filemenu.Append(self.ID_EXIT,"&Quit\tCtrl-Q"," Quit") editmenu.Append(self.ID_COPY,"&Copy\tCtrl-c","Copy the current image to the clipboard") scalemenu.Append(self.ID_GREY,"Greyscale\tCtrl-G","Monochrome images") scalemenu.Append(self.ID_HUEVAL,"Hue and Value\tCtrl-H","Scaled Rainbow Images") scalemenu.Append(self.ID_SPECTRAL,"spectral","Uses spectrum of light") scalemenu.Append(self.ID_PICKER,"Map Picker..."," Select from the full list of colormaps") analysismenu.Append(self.ID_POLAR,"Check Polarization\tCtrl-P","2d plot of polarization data") analysismenu.Append(self.ID_FLIPPING,"Check Flipping Ratio\tCtrl-F","2d plot of spin up over spin down") analysismenu.Append(self.ID_SPIN_UP,"View Spin Up State\tCtrl-U","2d plot of spin up") analysismenu.Append(self.ID_SPIN_DOWN,"View Spin Down State\tCtrl-D","2d plot of spin down") noisemenu.Append(self.ID_FLAT,"&Load Flat"," Load a blank run for background subtraction") noisemenu.Append(self.ID_FAKEFLAT,"Si&mulate Flat"," Drop out background within the same image") noisemenu.Append(self.ID_ROD,"Region of &Disinterest"," Drop out background within the same image") noisemenu.Append(self.ID_EXPORT_ROI,"Export ROI"," Export a binary file corresponding to where the data is above the minimum intensity.") noisemenu.Append(self.ID_IMPORT_ROI,"Import ROI"," Add another exclusion mask.") #Bind events to the menu self.Connect(self.ID_EXIT,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnExit) self.Connect(self.ID_OPEN,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnOpen) self.Connect(self.ID_OPENTWO,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnOpenSet) self.Connect(self.ID_SAVE,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnSave) self.Connect(self.ID_SPECTRUM,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnSpectrum) self.Connect(self.ID_IMAGE_ARRAY,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnImageArray) self.Connect(self.ID_GREY,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnGrey) self.Connect(self.ID_HUEVAL,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnHueVal) self.Connect(self.ID_SPECTRAL,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnSpectral) self.Connect(self.ID_PICKER,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnPicker) self.Connect(self.ID_POLAR,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnPolar) self.Connect(self.ID_FLIPPING,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnFlipping) self.Connect(self.ID_SPIN_UP,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnAnalysisSpinUp) self.Connect(self.ID_SPIN_DOWN,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnAnalysisSpinDown) self.Connect(self.ID_FLAT,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnFlat) self.Connect(self.ID_FAKEFLAT,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnFakeFlat) self.Connect(self.ID_ROD,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnROD) self.Connect(self.ID_EXPORT_ROI,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnExportROI) self.Connect(self.ID_IMPORT_ROI,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnImportROI) self.Connect(self.ID_COPY,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnCopy) menubar.Append(filemenu,"&File") menubar.Append(editmenu,"&Edit") menubar.Append(scalemenu,"&Color") menubar.Append(analysismenu,"&Analysis") menubar.Append(noisemenu,"&Noise") self.SetMenuBar(menubar) #arrange window sizer = wx.GridBagSizer() sizer.Add(self.colorbar,pos=wx.GBPosition(0,9),span=wx.GBSpan(9,1)) sizer.Add(self.imPanel,pos=wx.GBPosition(0,1),span=wx.GBSpan(8,8)) sizer.Add(self.yPanel,pos=wx.GBPosition(0,0),span=wx.GBSpan(8,1)) sizer.Add(self.xPanel,pos=wx.GBPosition(8,1),span=wx.GBSpan(1,8)) sizer.Add(self.opPanel,pos=wx.GBPosition(0,10),span=wx.GBSpan(8,1),flag=wx.EXPAND) sizer.Add(self.posPanel,pos=wx.GBPosition(8,0),flag=wx.EXPAND) self.progress = wx.Gauge(self,range=1000) sizer.Add(self.progress,pos=wx.GBPosition(9,0),span=wx.GBSpan(1,11),flag=wx.EXPAND) updateButton = wx.Button(self,-1,"Update") updateButton.Bind(wx.EVT_BUTTON,self.OnUpdateButton) sizer.Add(updateButton,flag=wx.EXPAND,pos=wx.GBPosition(8,10)) self.data = self.makePel() self.flatrun = None#background data sizer.SetSizeHints(self) self.SetSizer(sizer) self.Show(True)
class PelvisFrame(wx.Frame): """The main application window for PELvis""" #Menu ID constants ID_OPEN = 100 ID_OPENTWO = 110 ID_SAVE = 130 ID_SPECTRUM=140 ID_IMAGE_ARRAY=160 ID_EXIT = 190 ID_GREY = 200 ID_HUEVAL = 220 ID_SPECTRAL = 230 ID_PICKER = 290 ID_POLAR = 300 ID_FLIPPING = 310 ID_SPIN_UP = 320 ID_SPIN_DOWN = 330 ID_FLAT = 420 ID_FAKEFLAT = 430 ID_ROD = 440 ID_EXPORT_ROI = 450 ID_IMPORT_ROI = 460 ID_COPY = 500 def __init__(self,Yield): """Create a PELvis frame Keyword arguments: Yield -- A function to give control back to the main event loop """ wx.Frame.__init__(self,None,wx.ID_ANY,"PEL Visualizer") self.data = PelFile() self.Yield = Yield self.mask = np.ones((128,16),dtype=np.bool) #Create items in the frame self.yPanel = GraphPanel(self,(2,8),64,GraphPanel.VERTICAL) self.xPanel = GraphPanel(self,(8,2),64,GraphPanel.INVERTED) self.colorbar = ColorBarPanel(self,cm.jet) self.opPanel = PelvisOptionPanel(self) self.posPanel = PositionPanel(self) self.imPanel = ImagePanel(self,self.posPanel.set, self.opPanel.setPosMin,self.opPanel.setPosMax) self.specDlg = SpectrumDialog(self) self.cmp = None #color map self.imageSaveDialog=wx.FileDialog(self,"Choose graphics file",wildcard="Portable Network Graphic (png)|*.PNG|Windows Bitmap (bmp)|*.BMP|Joint Photographic Experts Group (jpg)|*.JPG|Portable Network Monocrome (pnm)|*.PNM|Tagged Image File Format (tif)|*.TIF|Archaic, useless format (pcx)|*.PCX",style=wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT) self.update = self.updateSingle#update the image self.updateData = self.updateSingleData#update the data in the image #Create the menu menubar = wx.MenuBar() filemenu = wx.Menu() editmenu = wx.Menu() scalemenu = wx.Menu() analysismenu = wx.Menu() noisemenu = wx.Menu() #populate the menu filemenu.Append(self.ID_OPEN,"&Open\tCtrl-O"," Open a PEL file") filemenu.Append(self.ID_OPENTWO,"&Polarized Set"," Open two PEL files") filemenu.Append(self.ID_SAVE,"&Save\tCtrl-S"," Save an image file") filemenu.Append(self.ID_SPECTRUM,"Spectrum"," View the TOF spectrum") filemenu.Append(self.ID_IMAGE_ARRAY,"&Export Images..."," Save a series of TOF snapshots") filemenu.Append(self.ID_EXIT,"&Quit\tCtrl-Q"," Quit") editmenu.Append(self.ID_COPY,"&Copy\tCtrl-c","Copy the current image to the clipboard") scalemenu.Append(self.ID_GREY,"Greyscale\tCtrl-G","Monochrome images") scalemenu.Append(self.ID_HUEVAL,"Hue and Value\tCtrl-H","Scaled Rainbow Images") scalemenu.Append(self.ID_SPECTRAL,"spectral","Uses spectrum of light") scalemenu.Append(self.ID_PICKER,"Map Picker..."," Select from the full list of colormaps") analysismenu.Append(self.ID_POLAR,"Check Polarization\tCtrl-P","2d plot of polarization data") analysismenu.Append(self.ID_FLIPPING,"Check Flipping Ratio\tCtrl-F","2d plot of spin up over spin down") analysismenu.Append(self.ID_SPIN_UP,"View Spin Up State\tCtrl-U","2d plot of spin up") analysismenu.Append(self.ID_SPIN_DOWN,"View Spin Down State\tCtrl-D","2d plot of spin down") noisemenu.Append(self.ID_FLAT,"&Load Flat"," Load a blank run for background subtraction") noisemenu.Append(self.ID_FAKEFLAT,"Si&mulate Flat"," Drop out background within the same image") noisemenu.Append(self.ID_ROD,"Region of &Disinterest"," Drop out background within the same image") noisemenu.Append(self.ID_EXPORT_ROI,"Export ROI"," Export a binary file corresponding to where the data is above the minimum intensity.") noisemenu.Append(self.ID_IMPORT_ROI,"Import ROI"," Add another exclusion mask.") #Bind events to the menu self.Connect(self.ID_EXIT,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnExit) self.Connect(self.ID_OPEN,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnOpen) self.Connect(self.ID_OPENTWO,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnOpenSet) self.Connect(self.ID_SAVE,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnSave) self.Connect(self.ID_SPECTRUM,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnSpectrum) self.Connect(self.ID_IMAGE_ARRAY,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnImageArray) self.Connect(self.ID_GREY,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnGrey) self.Connect(self.ID_HUEVAL,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnHueVal) self.Connect(self.ID_SPECTRAL,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnSpectral) self.Connect(self.ID_PICKER,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnPicker) self.Connect(self.ID_POLAR,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnPolar) self.Connect(self.ID_FLIPPING,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnFlipping) self.Connect(self.ID_SPIN_UP,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnAnalysisSpinUp) self.Connect(self.ID_SPIN_DOWN,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnAnalysisSpinDown) self.Connect(self.ID_FLAT,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnFlat) self.Connect(self.ID_FAKEFLAT,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnFakeFlat) self.Connect(self.ID_ROD,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnROD) self.Connect(self.ID_EXPORT_ROI,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnExportROI) self.Connect(self.ID_IMPORT_ROI,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnImportROI) self.Connect(self.ID_COPY,-1,wx.wxEVT_COMMAND_MENU_SELECTED,self.OnCopy) menubar.Append(filemenu,"&File") menubar.Append(editmenu,"&Edit") menubar.Append(scalemenu,"&Color") menubar.Append(analysismenu,"&Analysis") menubar.Append(noisemenu,"&Noise") self.SetMenuBar(menubar) #arrange window sizer = wx.GridBagSizer() sizer.Add(self.colorbar,pos=wx.GBPosition(0,9),span=wx.GBSpan(9,1)) sizer.Add(self.imPanel,pos=wx.GBPosition(0,1),span=wx.GBSpan(8,8)) sizer.Add(self.yPanel,pos=wx.GBPosition(0,0),span=wx.GBSpan(8,1)) sizer.Add(self.xPanel,pos=wx.GBPosition(8,1),span=wx.GBSpan(1,8)) sizer.Add(self.opPanel,pos=wx.GBPosition(0,10),span=wx.GBSpan(8,1),flag=wx.EXPAND) sizer.Add(self.posPanel,pos=wx.GBPosition(8,0),flag=wx.EXPAND) self.progress = wx.Gauge(self,range=1000) sizer.Add(self.progress,pos=wx.GBPosition(9,0),span=wx.GBSpan(1,11),flag=wx.EXPAND) updateButton = wx.Button(self,-1,"Update") updateButton.Bind(wx.EVT_BUTTON,self.OnUpdateButton) sizer.Add(updateButton,flag=wx.EXPAND,pos=wx.GBPosition(8,10)) self.data = self.makePel() self.flatrun = None#background data sizer.SetSizeHints(self) self.SetSizer(sizer) self.Show(True) def makePel(self): """Create a blank Pel object for loading detector data""" data = PelFile() def statusfunc(x): self.progress.SetValue(x) self.Yield() data.statusfunc = statusfunc return data def loadPel(self,message): """Load a .pel file and its monitor data. Keyword arguments: message -- The title for the load file dialog. """ dlg=wx.FileDialog(self,message,wildcard="He3 data|*neutron_event.dat|Preformatted Histograms|*.npy",style=wx.FD_OPEN) if dlg.ShowModal()==wx.ID_OK: # self.SetCursor(wx.CURSOR_WAIT) path = dlg.GetPath() if path[-3:] == "dat": data = self.makePel() data.readfileimage(path) elif path[-3:] == "npy": data = np.load(path) # self.SetCursor(wx.CURSOR_ARROW) else: return (None,None) mon = MonFile(path[:-17]+"bmon_histo.dat") return (data,mon) def OnImageArray(self,event): """Exports the 2d detector image by wavelength""" dlg = self.imageSaveDialog if dlg.ShowModal()==wx.ID_OK: path=dlg.GetPath() ext = path[-4:] path = path[:-4] (lmin,lmax) = self.opPanel.getLambdaRange() for i in range(lmin,lmax): file=path+("%03i"%i)+ext self.opPanel.setLambdaRange(0.1*i,0.1*(i+1)) self.updateData() self.update() self.imPanel.saveImage(file) self.progress.SetValue(1000*(i-lmin)/(lmax-lmin)) self.Yield() self.opPanel.setLambdaRange(lmin*0.1,lmax*0.1) self.updateData() self.progress.SetValue(0) def loadNormPel(self,message): """Load a .pel file, normalize it by monitor, and subtract background""" (data,mon) = self.loadPel(message) if isinstance(data,PelFile): data = np.asarray(data.make3d(),np.float32) if mon is None: return (data,1) if self.flatrun != None: flatrun = np.load(self.flatrun) self.flatrun.seek(0) flatrun *= mon.time data -= flatrun spec = mon.spec monsum = np.sum(spec) print("Integrated monitor counts: " + str(monsum)) data /= monsum return (data,np.sum(mon.spec)) # def getLambdaRange(self): # try: # lmin = int(float(self.lambdaMin.GetValue())*10) # except ValueError: # lmin = 0 # try: # lmax = int(float(self.lambdaMax.GetValue())*10) # except ValueError: # lmax = 200 # return (lmin,lmax) def updateSingleData(self,event=None): """Update changes in wavelength on a single file""" print("Make 2d") (lmin,lmax) = self.opPanel.getLambdaRange() self.flatdata = np.sum(self.data[:,:,lmin:lmax],2) self.update() def updateDataFlip(self,event=None): """Update changes in wavelength for flipping ratios""" (lmin,lmax) = self.opPanel.getLambdaRange() (u3d,d3d)=self.data u = np.sum(u3d[:,:,lmin:lmax],2) d = np.sum(d3d[:,:,lmin:lmax],2) self.flatdata = u/(d+1e-6) self.update() def updateDataPolar(self,event=None): """Update changes in wavelength for polarizations""" (lmin,lmax) = self.opPanel.getLambdaRange() (u3d,d3d)=self.data u = np.sum(u3d[:,:,lmin:lmax],2) d = np.sum(d3d[:,:,lmin:lmax],2) self.flatdata = (u-d)/(u+d+1e-6) self.update() def updateDataUp(self,event=None): """Update changes in wavelength for the spin up state""" (lmin,lmax) = self.opPanel.getLambdaRange() (u3d,_)=self.data self.flatdata = np.sum(u3d[:,:,lmin:lmax],2) self.update() def updateDataDown(self,event=None): """Update changes in wavelength for the spin down state""" (lmin,lmax) = self.opPanel.getLambdaRange() (_,d3d)=self.data self.flatdata = np.sum(d3d[:,:,lmin:lmax],2) self.update() def updateSingle(self,event=None): """Update the 2D data for the region of interest and intensity""" (vMin,vMax) = self.opPanel.getIntensityRange() (xMin,xMax,yMin,yMax) = self.opPanel.getRoi() data = self.flatdata[:,:] #Mask to zero during the summing parts data[np.logical_not(self.mask)] = 0 self.posPanel.data = data self.posPanel.setRange(xMin,yMin,xMax,yMax) x=np.arange(128,0,-1) y=np.sum(data[:,xMin:xMax],axis=1) self.yPanel.SetPlot(x,y) #handle the x-plot x=np.arange(0,16,1) y=np.sum(data[yMin:yMax,:],axis=0) self.xPanel.SetPlot(x,y) if vMin is None: vMin = np.min(data) if vMax is None: vMax = np.max(data) self.colorbar.setRange(vMin,vMax) self.colorbar.update() #mask to vmin for the plotting data[np.logical_not(self.mask)] = vMin self.imPanel.update(self.flatdata,vMin,vMax) def OnUpdateButton(self,event): """Refresh the data when the user pushes the "Update" button""" #This function is needed for wxWidgets to allow #for dynamically changing the bound function self.updateData(event) def OnOpen(self,event): """Load a single .pel file for display""" data,scale = self.loadNormPel("Choose the Pel File to Open") if data is None: return self.data = data self.scale = scale self.progress.SetValue(0) self.specDlg.setMode("up") self.updateData = self.updateSingleData self.update = self.updateSingle self.updateData() def OnOpenSet(self,event): """Load a spin flip measurement for display""" if self.loadUpAndDown(): self.OnPolar(event) def OnFlat(self,event): """Load a blank run for background subtraction""" (data,mon) = self.loadPel("Choose a Blank Run") if data == None: return if isinstance(data,PelFile): flatrun = data.make3d() elif isinstance(data,np.ndarray): flatrun = data flatrun = np.sum(flatrun,axis=2) flatrun /= RESOLUTION flatrun /= float(mon.time) flatrun = np.expand_dims(flatrun,2) self.flatrun = TemporaryFile() np.save(self.flatrun,flatrun) self.flatrun.seek(0) self.progress.SetValue(0) def OnFakeFlat(self,event): """Create a fake background run from outside the region of interest.""" (xMin,xMax,yMin,yMax)=self.opPanel.getRoi() totarea = 512*512 centarea = (yMax-yMin)*(xMax-xMin) backgroundarea = totarea-centarea if type(self.data) is tuple: (u,d)=self.data totu = np.sum(u) totd = np.sum(d) centu = np.sum(u[yMin:yMax,xMin:xMax,:]) centd = np.sum(d[yMin:yMax,xMin:xMax,:]) backgroundu = totu-centu backgroundd = totd-centd backgroundrateu = backgroundu/backgroundarea backgroundrated = backgroundd/backgroundarea backgroundrateu /= (RESOLUTION + 1) #normalize against the wavelengths backgroundrated /= (RESOLUTION + 1) #normalize against the wavelengths ###Stupid Memory Errors del self.data u -= backgroundrateu d -= backgroundrated ### self.data=(u,d) else: d=self.data tot = np.sum(d) cent = np.sum(d[yMin:yMax,xMin:xMax,:]) background = tot-cent backgroundrate = background/backgroundarea backgroundrate /= (RESOLUTION + 1) #normalize against the wavelengths self.data-=backgroundrate self.updateData() #Subtract out the region of disinterest def OnROD(self,event): """Take the region of interest as background noise""" (xMin,xMax,yMin,yMax)=self.opPanel.getRoi() area = (yMax-yMin)*(xMax-xMin) if type(self.data) is tuple: u,d=self.data del self.data totu = np.sum(np.sum(u[yMin:yMax,xMin:xMax,:],axis=0),axis=0) totd = np.sum(np.sum(d[yMin:yMax,xMin:xMax,:],axis=0),axis=0) totu /= area totd /= area u -= totu d -= totd self.data=(u,d) else: d=self.data totd = np.sum(np.sum(d[yMin:yMax,xMin:xMax,:],axis=0),axis=0) #totd = np.atleast_3d(totd) totd /= area #print(totd.shape) #print(self.data.shape) self.data -= totd self.updateData() def OnExportROI(self,event): """Save a file containing a map of where the current data image is greater than vmin""" vMin,_ = self.opPanel.getIntensityRange() mask = self.flatdata > vMin # (vMin,vMax) = self.opPanel.getIntensityRange()# # (xMin,xMax,yMin,yMax) = self.opPanel.getRoi()# # (lMin,lMax) = self.opPanel.getLambdaRange()# # (lMin,lMax) = (lMin/10,lMax/10)# # mask = [["xMin",xMin], ["xMax",xMax], ["yMin",yMin], ["yMax",yMax], \ # ["lMin",lMin], ["lMax",lMax], ["vMin",vMin], ["vMax",vMax]]# dlg = wx.FileDialog(self, "Where to save the mask file?", wildcard="Numpy dump (npy)|*.npy|Text (dat)|*.dat", style=wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT) if dlg.ShowModal()==wx.ID_OK: path=dlg.GetPath() ext = path[-4:] if ext == ".dat": np.savetxt(path,mask,fmt="%d") else: np.save(path,mask) def OnImportROI(self,event): """Adds another mask to the current system mask""" dlg = wx.FileDialog(self, "Which Mask File?", wildcard="Numpy dump (npy)|*.npy|Text (dat)|*.dat", style=wx.FD_OPEN) time.sleep(.1) if dlg.ShowModal()==wx.ID_OK: path = dlg.GetPath() ext = path[-4:] if ext == ".dat": newmask = np.loadtxt(path,dtype=np.bool) newmask=dict(newmask)# else: newmask = np.load(path) self.mask = np.logical_and(self.mask,newmask) #self.opPanel.setPosMin(newmask["xMin"],newmask["yMin"])# #self.opPanel.setPosMax(newmask["xMax"],newmask["yMax"])# #self.opPanel.setLambdaRange(newmask["lMin"],newmask["lMax"])# #self.opPanel.setIntensityRange(newmask["vMin"],newmask["vMax"])# self.updateData() def OnSave(self,event): """Save the current 2D image to a file""" print("OnSave") # dlg=wx.FileDialog(self,"Choose graphics file",wildcard="Windows Bitmap (bmp)|*.BMP|Portable Network Graphic (png)|*.PNG|Joint Photographic Experts Group (jpg)|*.JPG|Portable Network Monocrome (pnm)|*.PNM|Tagged Image File Format (tif)|*.TIF|Archaic, useless format (pcx)|*.PCX",style=wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT) dlg = self.imageSaveDialog if dlg.ShowModal()==wx.ID_OK: self.imPanel.saveImage(dlg.GetPath()) def OnSpectrum(self,event): """Display a plot of the region of interest versus wavelength""" print("OnSpectrum") (xMin,xMax,yMin,yMax)=self.opPanel.getRoi() if type(self.data) is tuple: u3d,d3d = self.data u3d = u3d[:,:,:] d3d = d3d[:,:,:] u3d[np.logical_not(self.mask)] = 0 d3d[np.logical_not(self.mask)] = 0 u = np.sum(np.sum(u3d[yMin:yMax,xMin:xMax],0),0) d = np.sum(np.sum(d3d[yMin:yMax,xMin:xMax],0),0) uscale,dscale = self.scale self.specDlg.setScale(uscale,dscale) self.specDlg.setData(u,d) else: copy = self.data[:,:,:] copy[np.logical_not(self.mask)] = 0 u = np.sum(np.sum(copy[yMin:yMax,xMin:xMax],0),0) # u *= self.scale self.specDlg.setScale(self.scale) self.specDlg.setData(u) self.specDlg.setIntensityRange(self.opPanel.getIntensityRange()) self.specDlg.Show() def OnGrey(self,event): """Set the colormap to gray""" self.imPanel.cmap = cm.gray self.colorbar.setCmap(cm.gray) self.update() def OnHueVal(self,event): """Set the colormap to a rainbow""" self.imPanel.cmap = cm.jet self.colorbar.setCmap(cm.jet) self.update() def OnSpectral(self,event): """Set the colormap to the spectral map""" self.imPanel.cmap = cm.spectral self.colorbar.setCmap(cm.spectral) self.update() def OnPicker(self,event): """Let the user pick a color map from a list""" if self.cmp is None: self.cmp = ColorMapPicker(self,self.setColorMap) self.cmp.Show() def setColorMap(self,cmap): """Changes to the given colormap""" self.imPanel.cmap = cmap self.colorbar.setCmap(cmap) self.update() def OnExit(self,event): """Quit the program""" self.Close() def loadUpAndDown(self): """Read in spin flip data""" u3d,uscale = self.loadNormPel("Spin Up State") if u3d is None: return False del self.data d3d,dscale = self.loadNormPel("Spin Down State") self.data = (u3d,d3d) self.scale = (uscale,dscale) return True def OnPolar(self,event): """Display neutron polarization""" print("OnPolar") self.specDlg.setMode("polar") self.updateData = self.updateDataPolar self.update = self.updateSingle self.updateData() def OnFlipping(self,event): """Display the flipping ratio""" print("OnFlip") self.specDlg.setMode("flipping") self.updateData = self.updateDataFlip self.update = self.updateSingle self.updateData() def OnAnalysisSpinUp(self,event): """Display the Spin Up data""" print("OnSpinUp") self.specDlg.setMode("up") self.updateData = self.updateDataUp self.update = self.updateSingle self.updateData() def OnAnalysisSpinDown(self,event): """Display the Spin Down data""" print("OnSpinDown") self.specDlg.setMode("down") self.updateData = self.updateDataDown self.update = self.updateSingle self.updateData() def OnCopy(self,event): """Copy the image to a clipboard""" self.imPanel.copyToClipboard()
class CopyDialog(wx.Dialog): """ Shows the filelist, asks user for folder and shows previews. """ def __init__(self, *args, **kwds): # begin wxGlade: CopyDialog.__init__ kwds["style"] = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX | wx.THICK_FRAME wx.Dialog.__init__(self, *args, **kwds) self.headerlbl = wx.TextCtrl(self, -1, "These files will be copied for date <date>:", style=wx.NO_BORDER) self.splitter = wx.SplitterWindow(self, -1, style=wx.SP_3D | wx.SP_BORDER) self.filelst = wx.ListCtrl(self.splitter, -1, style=wx.LC_REPORT | wx.SUNKEN_BORDER) self.previewpane = ImagePanel(self.splitter, -1) self.destlbl = wx.StaticText(self, -1, "Dest. Folder") self.destvalue = wx.TextCtrl(self, -1, "") self.namelbl = wx.StaticText(self, -1, "Name Pattern") self.namevalue = wx.TextCtrl(self, -1, "", style=wx.TE_PROCESS_ENTER) self.spacepanel1 = wx.Panel(self, -1) self.cancelbtn = wx.Button(self, wx.ID_CANCEL, "") self.neverbtn = wx.Button(self, -1, "&Never") self.okbtn = wx.Button(self, wx.ID_OK, "") self.gauge = wx.Gauge(self, -1, 100, style=wx.GA_HORIZONTAL | wx.GA_SMOOTH) self.__set_properties() self.__do_layout() self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.evt_filelst_select, self.filelst) self.Bind(wx.EVT_SPLITTER_SASH_POS_CHANGED, self.evt_splitter_resize, self.splitter) self.Bind(wx.EVT_TEXT_ENTER, self.evt_nameenter, self.namevalue) self.Bind(wx.EVT_BUTTON, self.evt_cancelbtn, self.cancelbtn) self.Bind(wx.EVT_BUTTON, self.evt_neverbtn, self.neverbtn) self.Bind(wx.EVT_BUTTON, self.evt_okbtn, self.okbtn) # end wxGlade self.Bind(wx.EVT_SIZE, self.evt_splitter_resize, self) self.handler = None self.date = None def __set_properties(self): # begin wxGlade: CopyDialog.__set_properties self.SetTitle("Copy Files") self.SetSize((786, 620)) self.headerlbl.SetMinSize((300, 27)) self.filelst.SetMinSize((393, 473)) self.destlbl.SetMinSize((100, 17)) self.destvalue.SetMinSize((300, 27)) self.destvalue.Enable(False) self.namelbl.SetMinSize((100, 17)) self.namevalue.SetMinSize((300, 27)) self.cancelbtn.SetMinSize((70, 29)) self.neverbtn.SetMinSize((85, 29)) self.okbtn.SetMinSize((100, 29)) self.gauge.SetMinSize((100, 28)) # end wxGlade def __do_layout(self): # begin wxGlade: CopyDialog.__do_layout sizer_1 = wx.BoxSizer(wx.VERTICAL) sizer_6 = wx.BoxSizer(wx.HORIZONTAL) sizer_5 = wx.BoxSizer(wx.HORIZONTAL) sizer_4 = wx.BoxSizer(wx.HORIZONTAL) sizer_3 = wx.BoxSizer(wx.HORIZONTAL) sizer_2 = wx.BoxSizer(wx.HORIZONTAL) sizer_2.Add(self.headerlbl, 1, wx.ALL, 4) sizer_1.Add(sizer_2, 0, wx.EXPAND, 0) self.splitter.SplitVertically(self.filelst, self.previewpane) sizer_1.Add(self.splitter, 1, wx.EXPAND, 0) sizer_3.Add(self.destlbl, 0, wx.ALL | wx.ALIGN_RIGHT, 8) sizer_3.Add(self.destvalue, 1, wx.ALL, 4) sizer_1.Add(sizer_3, 0, wx.EXPAND, 0) sizer_4.Add(self.namelbl, 0, wx.ALL | wx.ALIGN_RIGHT, 8) sizer_4.Add(self.namevalue, 1, wx.ALL, 4) sizer_1.Add(sizer_4, 0, wx.EXPAND, 0) sizer_5.Add(self.spacepanel1, 1, wx.EXPAND, 0) sizer_5.Add(self.cancelbtn, 0, wx.ALL, 4) sizer_5.Add(self.neverbtn, 0, wx.ALL, 4) sizer_5.Add(self.okbtn, 0, wx.ALL, 4) sizer_1.Add(sizer_5, 0, wx.EXPAND, 0) sizer_6.Add(self.gauge, 1, wx.EXPAND, 0) sizer_1.Add(sizer_6, 0, wx.EXPAND, 0) self.SetSizer(sizer_1) self.Layout() # end wxGlade def setconfig(self, config, date, files, handler, done, total): """ This gets all the configuration values and configures the UI. """ self.date = date text = self.headerlbl.GetValue() text = text.replace("<date>", "%s (%d of %d)" % (date, done, total)) self.headerlbl.SetValue(text) self.destvalue.SetValue(config.destvalue) self.namevalue.SetValue(config.foldernamevalue.replace("<date>", date)) self.filelst.InsertColumn(0, "Name", width=wx.LIST_AUTOSIZE) for i in files.keys(): self.filelst.InsertStringItem(100, i) self.filelst.SetColumnWidth(0, width=wx.LIST_AUTOSIZE) self.handler = handler def setprogress(self, value): self.gauge.SetValue(value*self.gauge.GetRange()) wx.Yield() def showprogess(self, show=True): self.gauge.Show(show) wx.Yield() def evt_splitter_resize(self, event): # wxGlade: CopyDialog.<event_handler> """ Resizes the preview pane. """ idx = self.filelst.GetFirstSelected() if idx != -1: self.previewpane.display(self.filelst.GetItemText(idx)) event.Skip() def evt_filelst_select(self, event): # wxGlade: CopyDialog.<event_handler> """ Sets new picture to preview pane. """ idx = self.filelst.GetFirstSelected() if idx != -1: self.previewpane.display(self.filelst.GetItemText(idx)) event.Skip() def evt_cancelbtn(self, event): # wxGlade: CopyDialog.<event_handler> """ Closes the window. """ self.Destroy() def evt_okbtn(self, event): # wxGlade: CopyDialog.<event_handler> """ Calls back the handler to actually copy the pictures. """ self.handler(self.date, self.namevalue.GetValue(), True) self.Destroy() def evt_neverbtn(self, event): # wxGlade: CopyDialog.<event_handler> """ Calls back the handler to mark the file as never. """ self.handler(self.date, self.namevalue.GetValue(), False) self.Destroy() def evt_nameenter(self, event): # wxGlade: CopyDialog.<event_handler> self.handler(self.date, self.namevalue.GetValue(), True) self.Destroy()
class Main(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, title="Selena", size=(1700, 1000)) topSplitter = wx.SplitterWindow(self) vSplitter = wx.SplitterWindow(topSplitter) self.lateralPanel = LateralPanel(vSplitter) self.imagePanel = ImagePanel(vSplitter) vSplitter.SplitVertically(self.lateralPanel, self.imagePanel) vSplitter.SetMinimumPaneSize(400) self.menuPanel = MenuPanel(topSplitter) topSplitter.SplitHorizontally(self.menuPanel, vSplitter) topSplitter.SetMinimumPaneSize(120) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(topSplitter, 1, wx.EXPAND) self.SetSizer(sizer) self.menuPanel.ShowMenuPanel() self.lateralPanel.ShowMenuPanel() """ self.timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.TimeInterval, self.timer) self.timer.Start(1000) """ self.Bind(wx.EVT_BUTTON, self.OnButtonClickAbrir, self.menuPanel.AbrirButton()) self.Bind(wx.EVT_BUTTON, self.OnButtonClickFiltrar, self.menuPanel.FiltrarButton()) def OnButtonClickAbrir(self, event): requests.get('http://localhost:3000/selena/localTable/') OnOpen(self) self.Refresh() self.Run() def OnButtonClickFiltrar(self, event): print("FILTRANDO") print(self.menuPanel.GetCategoria()) print(self.menuPanel.GetSeleccion()) request = requests.get('http://localhost:3000/selena/filtro/' + self.menuPanel.GetCategoria() + "/" + self.menuPanel.GetSeleccion()) request = request.json() aux = request request = [] for i in aux: request.append(i['id']) print(request) path = './' + self.menuPanel.GetCategoria( ) + "_" + self.menuPanel.GetSeleccion() if not os.path.exists(path): os.makedirs(path) newPhoto = self.imagePanel.photos filtro = [] for i in request: for j in range(0, len(newPhoto)): if ((i - 1) == j): filtro.append(self.imagePanel.photos[j]) for i in filtro: shutil.copy(i, path) def Run(self): self.imagePanel.SetLateralPanel(self.lateralPanel) photos = glob.glob(os.path.join(PathFile(), '*.jpg')) self.imagePanel.photos = photos if photos: self.imagePanel.update_photo(photos[0]) self.imagePanel.total_photos = len(photos) else: self.imagePanel.reset() for i in photos: text = Work(i) self.genero = requests.get( 'http://localhost:3000/selena/revisarCoincidencia/' + text) self.menuPanel.FillComboBox('')