Esempio n. 1
0
    def onButEvaluate(self):
        logger.debug('onButEvaluate', __name__)
        det = self.get_detector_selected()
        if det is None: return

        if not os.path.exists(fnm.path_metrology_text()):
            msg = 'Input file %s DOES NOT exist!' % fnm.path_metrology_text()
            logger.warning(msg, __name__)
            return

        list_of_metrology_scripts = cp.dict_of_metrology_scripts[det]

        if self.script == 'Select':
            msg = 'Script for processing metrology file is not selected. Select it first...'
            logger.warning(msg, __name__)
            return

        #print 'list_of_metrology_scripts', list_of_metrology_scripts
        #for CSPAD script CSPADV1
        if det == cp.list_of_dets[
                0] and self.script == list_of_metrology_scripts[0]:
            msg = 'Evaluate parameters for %s using script %s' % (det,
                                                                  self.script)
            logger.info(msg, __name__)
            self.procCspadV1()

        # for other detectors and scripts for now...
        else:
            msg = 'Script %s is not yet implemented for detector %s...' % (
                self.script, det)
            logger.warning(msg, __name__)
            return
Esempio n. 2
0
    def onButEvaluate(self):
        logger.debug('onButEvaluate', __name__)
        det = self.get_detector_selected()
        if det is None: return

        if not os.path.exists(fnm.path_metrology_text()):
            msg = 'Input file %s DOES NOT exist!' % fnm.path_metrology_text()
            logger.warning(msg, __name__)
            return

        list_of_metrology_scripts = cp.dict_of_metrology_scripts[det]

        if self.script == 'Select':
            msg = 'Script for processing metrology file is not selected. Select it first...'
            logger.warning(msg, __name__)
            return

        fname_metrology = fnm.path_metrology_text()

        #print 'list_of_metrology_scripts', list_of_metrology_scripts
        #for CSPAD script CSPADV1 CXI-like
        if det == cp.list_of_dets[
                0] and self.script == list_of_metrology_scripts[0]:
            msg = 'Evaluate parameters for %s using script %s' % (det,
                                                                  self.script)
            logger.info(msg, __name__)
            optal = OpticAlignmentCspadV1(fname_metrology, print_bits=0, plot_bits=0, \
                                      exp=self.instr_name.value(), det=det)
            self.procCspad(optal)

        #for CSPAD script CSPADV2 XPP-like
        elif det == cp.list_of_dets[
                0] and self.script == list_of_metrology_scripts[1]:
            msg = 'Evaluate parameters for %s using script %s' % (det,
                                                                  self.script)
            logger.info(msg, __name__)
            optal = OpticAlignmentCspadV2(fname_metrology, print_bits=0, plot_bits=0, \
                                      exp=self.instr_name.value(), det=det)
            self.procCspad(optal)

        #for CSPAD2x2 script CSPAD2X2V1
        elif det == cp.list_of_dets[
                1] and self.script == list_of_metrology_scripts[0]:
            msg = 'Evaluate parameters for %s using script %s' % (det,
                                                                  self.script)
            logger.info(msg, __name__)
            optal = OpticAlignmentCspad2x2V1(fname_metrology, print_bits=0, plot_bits=0, \
                                      exp=self.instr_name.value(), det=det)
            self.procCspad(optal)

        # for other detectors and scripts for now...
        else:
            msg = 'Script %s is not yet implemented for detector %s...' % (
                self.script, det)
            logger.warning(msg, __name__)
            return
Esempio n. 3
0
    def onButEvaluate(self):
        logger.debug('onButEvaluate', __name__)
        det = self.get_detector_selected()
        if det is None : return

        if not os.path.exists(fnm.path_metrology_text()) :
            msg = 'Input file %s DOES NOT exist!' % fnm.path_metrology_text() 
            logger.warning(msg, __name__)
            return

        list_of_metrology_scripts = cp.dict_of_metrology_scripts[det]

        if self.script == 'Select' :
            msg = 'Script for processing metrology file is not selected. Select it first...'
            logger.warning(msg, __name__)
            return

        fname_metrology = fnm.path_metrology_text()

        #print 'list_of_metrology_scripts', list_of_metrology_scripts
        #for CSPAD script CSPADV1 CXI-like
        if det == cp.list_of_dets[0] and self.script == list_of_metrology_scripts[0] :            
            msg = 'Evaluate parameters for %s using script %s' % (det, self.script)
            logger.info(msg, __name__)
            optal = OpticAlignmentCspadV1(fname_metrology, print_bits=0, plot_bits=0, \
                                      exp=self.instr_name.value(), det=det)
            self.procCspad(optal)

        #for CSPAD script CSPADV2 XPP-like
        elif det == cp.list_of_dets[0] and self.script == list_of_metrology_scripts[1] :            
            msg = 'Evaluate parameters for %s using script %s' % (det, self.script)
            logger.info(msg, __name__)
            optal = OpticAlignmentCspadV2(fname_metrology, print_bits=0, plot_bits=0, \
                                      exp=self.instr_name.value(), det=det)
            self.procCspad(optal)

        #for CSPAD2x2 script CSPAD2X2V1
        elif det == cp.list_of_dets[1] and self.script == list_of_metrology_scripts[0] :            
            msg = 'Evaluate parameters for %s using script %s' % (det, self.script)
            logger.info(msg, __name__)
            optal = OpticAlignmentCspad2x2V1(fname_metrology, print_bits=0, plot_bits=0, \
                                      exp=self.instr_name.value(), det=det)
            self.procCspad(optal)

        # for other detectors and scripts for now...
        else :            
            msg = 'Script %s is not yet implemented for detector %s...' % (self.script, det)
            logger.warning(msg, __name__)
            return
Esempio n. 4
0
    def checkTextFileName(self):

        edi = self.ediFileText
        par = self.fname_metrology_text        

        if fnm.path_metrology_text() != fnm.path_metrology_text_def() :

            msg = 'TEXT FILE WILL BE OVERWRITTEN!\nUse default name %s\n for output file' % fnm.path_metrology_text_def()
            resp = gu.confirm_or_cancel_dialog_box(parent=self.butConvert, text=msg, title='Please confirm or cancel!')
            if resp :
                logger.info('Approved:\n' + msg.replace('\n',' '), __name__)
                par.setDefault()
                edi.setText(fnm.path_metrology_text_def())
            else :
                logger.info('Selected current file name: %s' % fnm.path_metrology_text(), __name__)
Esempio n. 5
0
    def checkTextFileName(self):

        edi = self.ediFileText
        par = self.fname_metrology_text        

        if fnm.path_metrology_text() != fnm.path_metrology_text_def() :

            msg = 'TEXT FILE WILL BE OVERWRITTEN!\nUse default name %s\n for output file' % fnm.path_metrology_text_def()
            resp = gu.confirm_or_cancel_dialog_box(parent=self.butConvert, text=msg, title='Please confirm or cancel!')
            if resp :
                logger.info('Approved:\n' + msg.replace('\n',' '), __name__)
                par.setDefault()
                edi.setText(fnm.path_metrology_text_def())
            else :
                logger.info('Selected current file name: %s' % fnm.path_metrology_text(), __name__)
Esempio n. 6
0
    def procCspad(self, optal):
        """Create and save interim files for calibration types"""
        self.list_of_calib_types = ['center', 'tilt', 'geometry']

        fname_metrology = fnm.path_metrology_text()
        msg = 'procCspad(V1,V2,2x2V1) for metrology data in file %s' % fname_metrology
        logger.info(msg, __name__)       

        txt_qc_table_xy = optal.txt_qc_table_xy()
        txt_qc_table_z  = optal.txt_qc_table_z()

        txt_center      = optal.txt_center_pix_formatted_array()
        txt_tilt        = optal.txt_tilt_formatted_array()
        txt_geometry    = optal.txt_geometry()

        logger.info('Quality check in X-Y plane:\n'+txt_qc_table_xy, __name__)       
        logger.info('Quality check in Z:\n'+txt_qc_table_z, __name__)       
        logger.info('parameters of type "center":\n'+txt_center, __name__)       
        logger.info('parameters of type "tilt":\n'+txt_tilt, __name__)       
        logger.info('parameters of type "geometry":\n'+txt_geometry, __name__)       
        
        # Save calibration files in work directory

        dic_type_fname = self.dict_metrology_alignment_const_fname_for_type()

        gu.save_textfile(txt_center,   dic_type_fname['center']) 
        gu.save_textfile(txt_tilt,     dic_type_fname['tilt']) 
        gu.save_textfile(txt_geometry, dic_type_fname['geometry']) 

        msg = 'Save interim metrology alignment files:'
        for type in self.list_of_calib_types :
            msg += '\n  %s   %s' % (type.ljust(16), dic_type_fname[type])

        logger.info(msg, __name__)       
Esempio n. 7
0
 def onButFileText(self):
     logger.debug('onButFileText', __name__)
     but = self.butFileText
     edi = self.ediFileText
     par = self.fname_metrology_text
     basename = os.path.basename(fnm.path_metrology_text())
     fname, ext = os.path.splitext(basename)
     filter = 'Text files (*' + ext + ')\nAll files (*)'
     self.onButFile(but, edi, par, filter, set_path=True)
Esempio n. 8
0
 def onButFileText(self):
     logger.debug('onButFileText', __name__)
     but = self.butFileText
     edi = self.ediFileText
     par = self.fname_metrology_text        
     basename  = os.path.basename( fnm.path_metrology_text() )
     fname, ext = os.path.splitext(basename)
     filter = 'Text files (*' + ext + ')\nAll files (*)'
     self.onButFile(but, edi, par, filter, set_path=True)
Esempio n. 9
0
    def onButConvert(self):
        logger.debug('onButConvert', __name__)
        
        self.checkTextFileName()

        #ifname = fnm.path_metrology_xlsx()
        #ofname = fnm.path_metrology_text()
        list_ofnames = convert_xlsx_to_text(fnm.path_metrology_xlsx(), fnm.path_metrology_text(), print_bits=0)

        msg = 'File %s is converted to the temporarty metrology text file(s):\n' % fnm.path_metrology_xlsx()
        for name in list_ofnames : msg += '    %s\n' % name
        logger.info(msg, __name__)
Esempio n. 10
0
    def onButViewText(self):
        logger.debug('onButViewText', __name__)
        try:
            cp.guifilebrowser.close()
            #self.but_view.setStyleSheet(cp.styleButtonBad)
        except:
            #self.but_view.setStyleSheet(cp.styleButtonGood)

            cp.guifilebrowser = GUIFileBrowser(
                None, fnm.get_list_of_metrology_text_files(),
                fnm.path_metrology_text())
            cp.guifilebrowser.move(self.pos().__add__(QtCore.QPoint(
                880, 40)))  # open window with offset w.r.t. parent
            cp.guifilebrowser.show()
Esempio n. 11
0
    def onButViewText(self):
        logger.debug('onButViewText', __name__)
        try    :
            cp.guifilebrowser.close()
            #self.but_view.setStyleSheet(cp.styleButtonBad)
        except :
            #self.but_view.setStyleSheet(cp.styleButtonGood)

            list_of_files = fnm.get_list_of_metrology_text_files()
            if self.script != 'Select' :
                list_of_files += self.list_metrology_alignment_const_fnames()

            cp.guifilebrowser = GUIFileBrowser(None, list_of_files, fnm.path_metrology_text())
            cp.guifilebrowser.move(self.pos().__add__(QtCore.QPoint(880,40))) # open window with offset w.r.t. parent
            cp.guifilebrowser.show()
Esempio n. 12
0
    def onButConvert(self):
        logger.debug('onButConvert', __name__)
        
        if not os.path.exists(fnm.path_metrology_xlsx()) :
            msg = 'Input file %s DOES NOT exist!' % fnm.path_metrology_xlsx() 
            logger.warning(msg, __name__)
            return

        self.checkTextFileName()

        #ifname = fnm.path_metrology_xlsx()
        #ofname = fnm.path_metrology_text()
        list_ofnames = convert_xlsx_to_text(fnm.path_metrology_xlsx(), fnm.path_metrology_text(), print_bits=0)

        msg = 'File %s is converted to the temporarty metrology text file(s):\n' % fnm.path_metrology_xlsx()
        for name in list_ofnames : msg += '    %s\n' % name
        logger.info(msg, __name__)
Esempio n. 13
0
    def onButConvert(self):
        logger.debug('onButConvert', __name__)

        if not os.path.exists(fnm.path_metrology_xlsx()):
            msg = 'Input file %s DOES NOT exist!' % fnm.path_metrology_xlsx()
            logger.warning(msg, __name__)
            return

        self.checkTextFileName()

        #ifname = fnm.path_metrology_xlsx()
        #ofname = fnm.path_metrology_text()
        list_ofnames = convert_xlsx_to_text(fnm.path_metrology_xlsx(),
                                            fnm.path_metrology_text(),
                                            print_bits=0)

        msg = 'File %s is converted to the temporarty metrology text file(s):\n' % fnm.path_metrology_xlsx(
        )
        for name in list_ofnames:
            msg += '    %s\n' % name
        logger.info(msg, __name__)
Esempio n. 14
0
    def procCspadV1(self):
        """Create and save interim files for calibration types"""
        self.list_of_calib_types = ['center', 'tilt', 'geometry']

        fname_metrology = fnm.path_metrology_text()
        msg = 'procCspadV1 for metrology data in file %s' % fname_metrology
        logger.info(msg, __name__)

        optal = OpticAlignmentCspadV1(fname_metrology,
                                      print_bits=0,
                                      plot_bits=0)

        txt_qc_table_xy = optal.txt_qc_table_xy()
        txt_qc_table_z = optal.txt_qc_table_z()

        txt_center = optal.txt_center_pix_formatted_array()
        txt_tilt = optal.txt_tilt_formatted_array()
        txt_geometry = optal.txt_geometry()

        logger.info('Quality check in X-Y plane:\n' + txt_qc_table_xy,
                    __name__)
        logger.info('Quality check in Z:\n' + txt_qc_table_z, __name__)
        logger.info('parameters of type "center":\n' + txt_center, __name__)
        logger.info('parameters of type "tilt":\n' + txt_tilt, __name__)
        logger.info('parameters of type "geometry":\n' + txt_geometry,
                    __name__)

        # Save calibration files in work directory

        dic_type_fname = self.dict_metrology_alignment_const_fname_for_type()

        gu.save_textfile(txt_center, dic_type_fname['center'])
        gu.save_textfile(txt_tilt, dic_type_fname['tilt'])
        gu.save_textfile(txt_geometry, dic_type_fname['geometry'])

        msg = 'Save interim metrology alignment files:'
        for type in self.list_of_calib_types:
            msg += '\n  %s   %s' % (type.ljust(16), dic_type_fname[type])

        logger.info(msg, __name__)
Esempio n. 15
0
    def __init__(self, parent=None, app=None):

        self.name = 'GUIMetrology'
        self.myapp = app
        QtGui.QWidget.__init__(self, parent)

        self.fname_prefix = cp.fname_prefix
        self.fname_metrology_xlsx = cp.fname_metrology_xlsx
        self.fname_metrology_text = cp.fname_metrology_text
        self.img_arr = None
        self.list_of_calib_types = ['center', 'tilt', 'geometry']

        cp.setIcons()

        self.setGeometry(10, 25, 650, 30)
        self.setWindowTitle('Metrology')
        #self.setWindowIcon(cp.icon_monitor)
        self.palette = QtGui.QPalette()
        self.resetColorIsSet = False

        self.setFrame()

        self.setParams()

        #self.titFileXlsx = QtGui.QLabel('File xlsx:')

        self.ediFileXlsx = QtGui.QLineEdit(fnm.path_metrology_xlsx())
        self.ediFileXlsx.setReadOnly(True)

        self.ediFileText = QtGui.QLineEdit(fnm.path_metrology_text())
        self.ediFileText.setReadOnly(True)

        self.butFileXlsx = QtGui.QPushButton(' 1. Select xlsx file:')
        self.butConvert = QtGui.QPushButton(' 2. Convert xlsx to text file(s)')
        self.butFileText = QtGui.QPushButton(' 3. Select text file:')
        self.butEvaluate = QtGui.QPushButton(' 4. Evaluate')
        self.butDeploy = QtGui.QPushButton(' 5. Deploy')
        self.butList = QtGui.QPushButton('List')
        self.butRemove = QtGui.QPushButton('Remove')
        self.butViewOffice = QtGui.QPushButton('View xlsx')
        self.butViewText = QtGui.QPushButton('View text')
        self.butScript = QtGui.QPushButton(self.script + cp.char_expand)
        self.butSrc = QtGui.QPushButton(self.source_name + cp.char_expand)
        self.labSrc = QtGui.QLabel('for detector')
        self.labScript = QtGui.QLabel('using script')
        self.guirunrange = GUIRunRange()

        self.butViewOffice.setIcon(cp.icon_monitor)
        self.butViewText.setIcon(cp.icon_monitor)
        #self.butConvert    .setIcon(cp.icon_convert)

        self.grid = QtGui.QGridLayout()
        self.grid_row = 0
        self.grid.addWidget(self.butFileXlsx, self.grid_row, 0)
        self.grid.addWidget(self.ediFileXlsx, self.grid_row, 1, 1, 8)
        self.grid.addWidget(self.butViewOffice, self.grid_row, 8)

        self.grid.addWidget(self.butConvert, self.grid_row + 1, 0)
        self.grid.addWidget(self.butList, self.grid_row + 1, 1, 1, 1)
        self.grid.addWidget(self.butRemove, self.grid_row + 1, 2, 1, 1)

        self.grid.addWidget(self.butFileText, self.grid_row + 2, 0)
        self.grid.addWidget(self.ediFileText, self.grid_row + 2, 1, 1, 8)
        self.grid.addWidget(self.butViewText, self.grid_row + 2, 8)

        self.grid.addWidget(self.butEvaluate, self.grid_row + 3, 0)
        self.grid.addWidget(self.labScript, self.grid_row + 3, 1)
        self.grid.addWidget(self.butScript, self.grid_row + 3, 2)

        self.grid.addWidget(self.butDeploy, self.grid_row + 4, 0)
        self.grid.addWidget(self.labSrc, self.grid_row + 4, 1)
        self.grid.addWidget(self.butSrc, self.grid_row + 4, 2)
        self.grid.addWidget(self.guirunrange, self.grid_row + 4, 3, 1, 5)
        #self.setLayout(self.grid)

        self.vbox = QtGui.QVBoxLayout()
        self.vbox.addLayout(self.grid)
        self.vbox.addStretch(1)
        self.setLayout(self.vbox)

        self.connect(self.butFileXlsx, QtCore.SIGNAL('clicked()'),
                     self.onButFileXlsx)
        self.connect(self.butFileText, QtCore.SIGNAL('clicked()'),
                     self.onButFileText)
        self.connect(self.butViewOffice, QtCore.SIGNAL('clicked()'),
                     self.onButViewOffice)
        self.connect(self.butViewText, QtCore.SIGNAL('clicked()'),
                     self.onButViewText)
        self.connect(self.butConvert, QtCore.SIGNAL('clicked()'),
                     self.onButConvert)
        self.connect(self.butRemove, QtCore.SIGNAL('clicked()'),
                     self.onButRemove)
        self.connect(self.butList, QtCore.SIGNAL('clicked()'), self.onButList)
        self.connect(self.butEvaluate, QtCore.SIGNAL('clicked()'),
                     self.onButEvaluate)
        self.connect(self.butDeploy, QtCore.SIGNAL('clicked()'),
                     self.onButDeploy)
        self.connect(self.butScript, QtCore.SIGNAL('clicked()'),
                     self.onButScript)
        self.connect(self.butSrc, QtCore.SIGNAL('clicked()'), self.onButSrc)

        self.showToolTips()
        self.setStyle()

        cp.guimetrology = self
Esempio n. 16
0
    def __init__ (self, parent=None, app=None) :

        self.name = 'GUIMetrology'
        self.myapp = app
        QtGui.QWidget.__init__(self, parent)

        self.fname_prefix  = cp.fname_prefix
        self.fname_metrology_xlsx = cp.fname_metrology_xlsx
        self.fname_metrology_text = cp.fname_metrology_text
        self.img_arr = None
        self.list_of_calib_types = ['center', 'tilt', 'geometry']
        
        cp.setIcons()

        self.setGeometry(10, 25, 725, 200)
        self.setWindowTitle('Metrology')
        #self.setWindowIcon(cp.icon_monitor)
        self.palette = QtGui.QPalette()
        self.resetColorIsSet = False

        self.setFrame()

        self.setParams()
  
        #self.titFileXlsx = QtGui.QLabel('File xlsx:')

        self.ediFileXlsx = QtGui.QLineEdit ( fnm.path_metrology_xlsx() )
        self.ediFileXlsx.setReadOnly(True)

        self.ediFileText = QtGui.QLineEdit ( fnm.path_metrology_text() )
        self.ediFileText.setReadOnly(True)

        self.butFileXlsx  = QtGui.QPushButton(' 1. Select xlsx file:')
        self.butConvert   = QtGui.QPushButton(' 2. Convert xlsx to text file(s)')
        self.butFileText  = QtGui.QPushButton(' 3. Select text file:')
        self.butEvaluate  = QtGui.QPushButton(' 4. Evaluate')
        self.butDeploy    = QtGui.QPushButton(' 5. Deploy')
        self.butList      = QtGui.QPushButton('List')
        self.butRemove    = QtGui.QPushButton('Remove')
        self.butViewOffice= QtGui.QPushButton('View xlsx')
        self.butViewText  = QtGui.QPushButton('View text')
        self.butScript    = QtGui.QPushButton(self.script + cp.char_expand )
        self.butSrc       = QtGui.QPushButton(self.source_name + cp.char_expand )
        self.labSrc       = QtGui.QLabel('for detector')
        self.labScript    = QtGui.QLabel('using script')
        self.guirange     = GUIRange()

        self.butViewOffice .setIcon(cp.icon_monitor)
        self.butViewText   .setIcon(cp.icon_monitor)
        #self.butConvert    .setIcon(cp.icon_convert)

        self.grid = QtGui.QGridLayout()
        self.grid_row = 0
        self.grid.addWidget(self.butFileXlsx,   self.grid_row,   0)
        self.grid.addWidget(self.ediFileXlsx,   self.grid_row,   1, 1, 8)
        self.grid.addWidget(self.butViewOffice, self.grid_row,   8)

        self.grid.addWidget(self.butConvert,    self.grid_row+1, 0)
        self.grid.addWidget(self.butList,       self.grid_row+1, 1, 1, 1)
        self.grid.addWidget(self.butRemove,     self.grid_row+1, 2, 1, 1)

        self.grid.addWidget(self.butFileText,   self.grid_row+2, 0)
        self.grid.addWidget(self.ediFileText,   self.grid_row+2, 1, 1, 8)
        self.grid.addWidget(self.butViewText,   self.grid_row+2, 8)

        self.grid.addWidget(self.butEvaluate,   self.grid_row+3, 0)
        self.grid.addWidget(self.labScript,     self.grid_row+3, 1)
        self.grid.addWidget(self.butScript,     self.grid_row+3, 2)

        self.grid.addWidget(self.butDeploy,     self.grid_row+4, 0)
        self.grid.addWidget(self.labSrc,        self.grid_row+4, 1)
        self.grid.addWidget(self.butSrc,        self.grid_row+4, 2)
        self.grid.addWidget(self.guirange,      self.grid_row+4, 3, 1, 5)
        #self.setLayout(self.grid)
          
        self.vbox = QtGui.QVBoxLayout() 
        self.vbox.addLayout(self.grid)
        self.vbox.addStretch(1)
        self.setLayout(self.vbox)

        self.connect( self.butFileXlsx,   QtCore.SIGNAL('clicked()'), self.onButFileXlsx   ) 
        self.connect( self.butFileText,   QtCore.SIGNAL('clicked()'), self.onButFileText   ) 
        self.connect( self.butViewOffice, QtCore.SIGNAL('clicked()'), self.onButViewOffice )
        self.connect( self.butViewText,   QtCore.SIGNAL('clicked()'), self.onButViewText   )
        self.connect( self.butConvert,    QtCore.SIGNAL('clicked()'), self.onButConvert    )
        self.connect( self.butRemove,     QtCore.SIGNAL('clicked()'), self.onButRemove     )
        self.connect( self.butList,       QtCore.SIGNAL('clicked()'), self.onButList       )
        self.connect( self.butEvaluate,   QtCore.SIGNAL('clicked()'), self.onButEvaluate   )
        self.connect( self.butDeploy,     QtCore.SIGNAL('clicked()'), self.onButDeploy     )
        self.connect( self.butScript,     QtCore.SIGNAL('clicked()'), self.onButScript     )
        self.connect( self.butSrc,        QtCore.SIGNAL('clicked()'), self.onButSrc        )
 
        self.showToolTips()
        self.setStyle()

        cp.guimetrology = self
Esempio n. 17
0
    def __init__ (self, parent=None, app=None) :

        self.name = 'GUIMetrology'
        self.myapp = app
        QtGui.QWidget.__init__(self, parent)

        self.fname_prefix  = cp.fname_prefix
        self.fname_metrology_xlsx = cp.fname_metrology_xlsx
        self.fname_metrology_text = cp.fname_metrology_text
        self.img_arr = None

        cp.setIcons()

        self.setGeometry(10, 25, 650, 30)
        self.setWindowTitle('Metrology')
        #self.setWindowIcon(cp.icon_monitor)
        self.palette = QtGui.QPalette()
        self.resetColorIsSet = False

        self.setFrame()
 
        #self.titFileXlsx = QtGui.QLabel('File xlsx:')

        self.ediFileXlsx = QtGui.QLineEdit ( fnm.path_metrology_xlsx() )
        self.ediFileXlsx.setReadOnly(True)

        self.ediFileText = QtGui.QLineEdit ( fnm.path_metrology_text() )
        self.ediFileText.setReadOnly(True)

        self.butFileXlsx  = QtGui.QPushButton(' 1. Select xlsx file:')
        self.butConvert   = QtGui.QPushButton(' 2. Convert xlsx to text file(s)')
        self.butFileText  = QtGui.QPushButton(' 3. Select text file:')
        self.butEvaluate  = QtGui.QPushButton(' 4. Evaluate')
        self.butDeploy    = QtGui.QPushButton(' 5. Deploy')
        self.butList      = QtGui.QPushButton('List')
        self.butRemove    = QtGui.QPushButton('Remove')
        self.butViewOffice= QtGui.QPushButton('View xlsx')
        self.butViewText  = QtGui.QPushButton('View text')

        self.butViewOffice .setIcon(cp.icon_monitor)
        self.butViewText   .setIcon(cp.icon_monitor)
        #self.butConvert    .setIcon(cp.icon_convert)

        self.grid = QtGui.QGridLayout()
        self.grid_row = 0
        self.grid.addWidget(self.butFileXlsx,   self.grid_row,   0)
        self.grid.addWidget(self.ediFileXlsx,   self.grid_row,   1, 1, 8)
        self.grid.addWidget(self.butViewOffice, self.grid_row,   8)

        self.grid.addWidget(self.butConvert,    self.grid_row+1, 0)
        self.grid.addWidget(self.butList,       self.grid_row+1, 1, 1, 1)
        self.grid.addWidget(self.butRemove,     self.grid_row+1, 2, 1, 1)

        self.grid.addWidget(self.butFileText,   self.grid_row+2, 0)
        self.grid.addWidget(self.ediFileText,   self.grid_row+2, 1, 1, 8)
        self.grid.addWidget(self.butViewText,   self.grid_row+2, 8)

        self.grid.addWidget(self.butEvaluate,   self.grid_row+3, 0)
        self.grid.addWidget(self.butDeploy,     self.grid_row+4, 0)
        #self.setLayout(self.grid)
          
        self.vbox = QtGui.QVBoxLayout() 
        self.vbox.addLayout(self.grid)
        self.vbox.addStretch(1)
        self.setLayout(self.vbox)

        self.connect( self.butFileXlsx,   QtCore.SIGNAL('clicked()'), self.onButFileXlsx   ) 
        self.connect( self.butFileText,   QtCore.SIGNAL('clicked()'), self.onButFileText   ) 
        self.connect( self.butViewOffice, QtCore.SIGNAL('clicked()'), self.onButViewOffice )
        self.connect( self.butViewText,   QtCore.SIGNAL('clicked()'), self.onButViewText   )
        self.connect( self.butConvert,    QtCore.SIGNAL('clicked()'), self.onButConvert    )
        self.connect( self.butRemove,     QtCore.SIGNAL('clicked()'), self.onButRemove     )
        self.connect( self.butList,       QtCore.SIGNAL('clicked()'), self.onButList       )
        self.connect( self.butEvaluate,   QtCore.SIGNAL('clicked()'), self.onButEvaluate   )
        self.connect( self.butDeploy,     QtCore.SIGNAL('clicked()'), self.onButDeploy     )
 
        self.showToolTips()
        self.setStyle()

        cp.guimetrology = self