Exemple #1
0
    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())
Exemple #2
0
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
Exemple #3
0
    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
Exemple #4
0
    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()
Exemple #5
0
 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)
Exemple #6
0
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()
Exemple #7
0
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()
Exemple #8
0
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('')