Exemplo n.º 1
0
class TrajectoryDialog():
    def on_TrajectoryDialog_button_load_clicked(self, button):
        """ Function doc """
        self.project = self.EasyHybridSession.project

        first = int(
            self.builder.get_object('TrajectoryDialog_first').get_text())
        last = int(self.builder.get_object('TrajectoryDialog_last').get_text())
        stride = int(
            self.builder.get_object('TrajectoryDialog_stride').get_text())
        #traj_name        = self.builder.get_object('filechooserbutton1').get_text()
        #traj_name2       = self.builder.get_object('filechooserbutton2').get_text()
        new_pymol_object = self.builder.get_object('entry1').get_text()
        _type = self.builder.get_object('combobox1').get_active_text()
        """ Function doc """
        if _type == 'folder - pDynamo':
            traj_name = self.builder.get_object(
                'filechooserbutton1').get_filename()

        else:
            traj_name = self.builder.get_object(
                'filechooserbutton2').get_filename()

        print(first, last, stride, traj_name, new_pymol_object, _type)

        frames = self.project.load_trajectory_to_system(
            first, last, stride, traj_name, new_pymol_object, _type)
        self.EasyHybridSession.builder.get_object(
            'trajectory_max_entrey').set_text(str(frames))
        self.EasyHybridSession.on_TrajectoryTool_HSCALE_update()

    def on_combobox1_changed(self, button):
        _type = self.builder.get_object('combobox1').get_active_text()
        """ Function doc """
        if _type == 'folder - pDynamo':
            self.builder.get_object('filechooserbutton2').hide()
            self.builder.get_object('filechooserbutton1').show()
        else:
            self.builder.get_object('filechooserbutton2').show()
            self.builder.get_object('filechooserbutton1').hide()

    def __init__(self, EasyHybridSession):
        """ Class initialiser """
        self.EasyHybridSession = EasyHybridSession
        self.project = EasyHybridSession.project
        self.main_builder = EasyHybridSession.builder

        self.builder = gtk.Builder()
        self.builder.add_from_file(
            os.path.join(EasyHybrid_GUI, 'DialogLoadTrajectory',
                         'TrajectoryDialog.glade'))
        self.builder.connect_signals(self)
        self.dialog = self.builder.get_object('TrajectoryDialog')
        '''
		--------------------------------------------------
		-                                                -
		-	              WindowControl                  -
		-                                                -
		--------------------------------------------------
		'''

        self.window_control = WindowControl(self.builder)
        self.builder.get_object('filechooserbutton2').hide()

        #----------------- Setup ComboBoxes -------------------------#
        combobox = 'combobox1'  #
        combolist = [
            "folder - pDynamo", "trj - AMBER", "dcd - CHARMM", 'xtc - GROMACS'
        ]
        self.window_control.SETUP_COMBOBOXES(combobox, combolist, 0)
Exemplo n.º 2
0
class NonBondDialog():
    """ Class doc """
    def on_button1_apply_NBModel_clicked(self, button):
        """ Function doc """
        self.project = self.EasyHybridSession.project

        nbModel = self.builder.get_object(
            'combobox1_nb_types').get_active_text()
        innercutoff = float(self.builder.get_object('entry1').get_text())
        outercutoff = float(self.builder.get_object('entry2').get_text())
        listcutoff = float(self.builder.get_object('entry3').get_text())
        kappa = float(self.builder.get_object('entry4').get_text())

        if self.project == None:
            print(nbModel, innercutoff, outercutoff, listcutoff, kappa)
        else:

            self.project.ABFS_options = {
                "innerCutoff": innercutoff,
                "outerCutoff": outercutoff,
                "listCutoff": listcutoff
            }
            self.project.settings['nbModel_type'] = nbModel
            self.project.set_nbModel_to_system()

    def QCcomboxChange(self, combobox):
        """ Function doc """
        mode = self.builder.get_object('combobox1_nb_types').get_active_text()
        if mode == 'NBModelFull':
            self.builder.get_object('entry1').set_sensitive(False)
            self.builder.get_object('entry2').set_sensitive(False)
            self.builder.get_object('entry3').set_sensitive(False)
            self.builder.get_object('entry4').set_sensitive(False)
        if mode == 'NBModelABFS':
            self.builder.get_object('entry1').set_sensitive(True)
            self.builder.get_object('entry2').set_sensitive(True)
            self.builder.get_object('entry3').set_sensitive(True)
            self.builder.get_object('entry4').set_sensitive(True)
        if mode == 'NBModelGABFS':
            self.builder.get_object('entry1').set_sensitive(True)
            self.builder.get_object('entry2').set_sensitive(True)
            self.builder.get_object('entry3').set_sensitive(True)
            self.builder.get_object('entry4').set_sensitive(True)
        if mode == 'NBModelSSBP':
            self.builder.get_object('entry1').set_sensitive(False)
            self.builder.get_object('entry2').set_sensitive(False)
            self.builder.get_object('entry3').set_sensitive(False)
            self.builder.get_object('entry4').set_sensitive(False)
        if mode == 'No NB model':
            self.builder.get_object('entry1').set_sensitive(False)
            self.builder.get_object('entry2').set_sensitive(False)
            self.builder.get_object('entry3').set_sensitive(False)
            self.builder.get_object('entry4').set_sensitive(False)

    def __init__(self, EasyHybridSession=None):
        """ Class initialiser """
        self.builder = gtk.Builder()

        if EasyHybridSession != None:
            self.project = EasyHybridSession.project
            self.main_builder = EasyHybridSession.builder
            self.EasyHybridSession = EasyHybridSession
            self.window_control = EasyHybridSession.window_control

        #self.project = project
        #self.window_control = window_control
        #self.builder = gtk.Builder()
        #self.main_builder = main_builder

        self.builder.add_from_file(
            os.path.join(EasyHybrid_GUI, 'DialogNonBond',
                         'NonBondDialog.glade'))
        self.builder.connect_signals(self)
        self.dialog = self.builder.get_object('dialog1')
        '''
		--------------------------------------------------
		-                                                -
		-	              WindowControl                  -
		-                                                -
		--------------------------------------------------
		'''
        self.window_control = WindowControl(self.builder)

        #----------------- Setup ComboBoxes -------------------------#
        combobox = 'combobox1_nb_types'  #
        combolist = nbList
        self.window_control.SETUP_COMBOBOXES(combobox, combolist, 0)
Exemplo n.º 3
0
class ScanWindow2D():
    """ Class doc """
    def on_ScanWindow_destroy(self, widget):
        """ Function doc """
        self.Visible = False

    def RunScan(self, button):

        #---------------------------------------------------#
        #                                                   #
        #                  Reaction COORD-1                 #
        #                                                   #
        #---------------------------------------------------#
        #---------------------------------- importing parameters COORD-1 ---------------------------#
        DINCREMENT = float(
            self.builder.get_object('entry_STEP_size1').get_text())  #
        NWINDOWS = int(
            self.builder.get_object('entry_NWINDOWS1').get_text())  #
        DMINIMUM = float(
            self.builder.get_object('entry_param_DMINIMUM1').get_text())  #
        FORCECONSTANT = float(
            self.builder.get_object('entry_FORCE1').get_text())  #
        #-------------------------------------------------------------------------------------------#

        mode = self.builder.get_object(
            'combobox_SCAN_reaction_coordiante_type').get_active_text()
        print "\n\n"
        print mode
        self.EasyHybridSession.project.ActiveModeCheck()
        #-------------------------------------------------------------------------------------------------#
        #                                       simple-distance                                           #
        #-------------------------------------------------------------------------------------------------#
        if mode == "simple-distance":  #
            ATOM1 = int(
                self.builder.get_object("entry_coord1_ATOM1").get_text())  #
            ATOM1_name = self.builder.get_object(
                "entry_coord1_ATOM1_name").get_text()  #
            ATOM2 = int(
                self.builder.get_object("entry_coord1_ATOM2").get_text())  #
            ATOM2_name = self.builder.get_object(
                "entry_coord1_ATOM2_name").get_text()  #
            #
            REACTION_COORD1 = {
                'MODE': mode,  #
                'ATOM1': ATOM1,  #
                'ATOM1_name': ATOM1_name,  #
                'ATOM2': ATOM2,  #
                'ATOM2_name': ATOM2_name,  #
                'DINCREMENT': DINCREMENT,  #
                'NWINDOWS': NWINDOWS,  #
                'FORCECONSTANT': FORCECONSTANT,  #
                'DMINIMUM': DMINIMUM
            }  #
        #-------------------------------------------------------------------------------------------------#

        #-------------------------------------------------------------------------------------------------#
        #                                      multiple-distance                                          #
        #-------------------------------------------------------------------------------------------------#
        if mode == "multiple-distance":  #
            ATOM1 = int(
                self.builder.get_object("entry_coord1_ATOM1").get_text())  #
            ATOM1_name = self.builder.get_object(
                "entry_coord1_ATOM1_name").get_text()  #
            ATOM2 = int(
                self.builder.get_object("entry_coord1_ATOM2").get_text())  #
            ATOM2_name = self.builder.get_object(
                "entry_coord1_ATOM2_name").get_text()  #
            ATOM3 = int(
                self.builder.get_object("entry_coord1_ATOM3").get_text())  #
            ATOM3_name = self.builder.get_object(
                "entry_coord1_ATOM3_name").get_text()  #
            #
            print "  " + ATOM1_name + "   ->-  " + ATOM2_name + "  -->-- " + ATOM3_name + "  "  #
            print " pk1 --- pk2 ---- pk3 \n"  #
            print "DMINIMUM  : ", DMINIMUM  #
            print "\n\n"  #
            print  #
            #sigma_pk1_pk3 = self.coord1_sigma_pk1_pk3                                                            #
            #sigma_pk3_pk1 = self.coord1_sigma_pk3_pk1                                                            #
            #print sigma_pk3_pk1                                                                           #
            #print sigma_pk1_pk3                                                                           #
            #
            REACTION_COORD1 = {
                'MODE': mode,  #
                'ATOM1': ATOM1,  #
                'ATOM1_name': ATOM1_name,  #
                'ATOM2': ATOM2,  #
                'ATOM2_name': ATOM2_name,  #
                'ATOM3': ATOM3,  #
                'ATOM3_name': ATOM3_name,  #
                'DINCREMENT': DINCREMENT,  #
                'NWINDOWS': NWINDOWS,  #
                'FORCECONSTANT': FORCECONSTANT,  #
                'DMINIMUM': DMINIMUM,  #
                'sigma_pk1_pk3': self.coord1_sigma_pk1_pk3,  #
                'sigma_pk3_pk1': self.coord1_sigma_pk3_pk1
            }  #
        #-------------------------------------------------------------------------------------------------#

        #---------------------------------------------------#
        #                                                   #
        #                  Reaction COORD-2                 #
        #                                                   #
        #---------------------------------------------------#

        #---------------------------------- importing parameters COORD-2 ---------------------------#
        DINCREMENT = float(
            self.builder.get_object('entry_STEP_size2').get_text())  #
        NWINDOWS = int(
            self.builder.get_object('entry_NWINDOWS2').get_text())  #
        DMINIMUM = float(
            self.builder.get_object('entry_param_DMINIMUM2').get_text())  #
        FORCECONSTANT = float(
            self.builder.get_object('entry_FORCE2').get_text())  #
        #-------------------------------------------------------------------------------------------#

        mode = self.builder.get_object(
            'combobox_SCAN_reaction_coordiante2_type').get_active_text()
        print "\n\n"
        print mode
        self.EasyHybridSession.project.ActiveModeCheck()
        #-------------------------------------------------------------------------------------------------#
        #                                       simple-distance                                           #
        #-------------------------------------------------------------------------------------------------#
        if mode == "simple-distance":  #
            ATOM1 = int(
                self.builder.get_object("entry_coord2_ATOM1").get_text())  #
            ATOM1_name = self.builder.get_object(
                "entry_coord2_ATOM1_name").get_text()  #
            ATOM2 = int(
                self.builder.get_object("entry_coord2_ATOM2").get_text())  #
            ATOM2_name = self.builder.get_object(
                "entry_coord2_ATOM2_name").get_text()  #
            #
            REACTION_COORD2 = {
                'MODE': mode,  #
                'ATOM1': ATOM1,  #
                'ATOM1_name': ATOM1_name,  #
                'ATOM2': ATOM2,  #
                'ATOM2_name': ATOM2_name,  #
                'DINCREMENT': DINCREMENT,  #
                'NWINDOWS': NWINDOWS,  #
                'FORCECONSTANT': FORCECONSTANT,  #
                'DMINIMUM': DMINIMUM
            }  #
        #-------------------------------------------------------------------------------------------------#

        #-------------------------------------------------------------------------------------------------#
        #                                      multiple-distance                                          #
        #-------------------------------------------------------------------------------------------------#
        if mode == "multiple-distance":  #
            ATOM1 = int(
                self.builder.get_object("entry_coord2_ATOM1").get_text())  #
            ATOM1_name = self.builder.get_object(
                "entry_coord2_ATOM1_name").get_text()  #
            ATOM2 = int(
                self.builder.get_object("entry_coord2_ATOM2").get_text())  #
            ATOM2_name = self.builder.get_object(
                "entry_coord2_ATOM2_name").get_text()  #
            ATOM3 = int(
                self.builder.get_object("entry_coord2_ATOM3").get_text())  #
            ATOM3_name = self.builder.get_object(
                "entry_coord2_ATOM3_name").get_text()  #
            #
            print "  " + ATOM1_name + "   ->-  " + ATOM2_name + "  -->-- " + ATOM3_name + "  "  #
            print " pk1 --- pk2 ---- pk3 \n"  #
            print "DMINIMUM  : ", DMINIMUM  #
            print "\n\n"  #
            print  #
            #sigma_pk1_pk3 = self.sigma_pk1_pk3                                                            #
            #sigma_pk3_pk1 = self.sigma_pk3_pk1                                                            #
            #print sigma_pk3_pk1                                                                           #
            #print sigma_pk1_pk3                                                                           #
            #
            REACTION_COORD2 = {
                'MODE': mode,  #
                'ATOM1': ATOM1,  #
                'ATOM1_name': ATOM1_name,  #
                'ATOM2': ATOM2,  #
                'ATOM2_name': ATOM2_name,  #
                'ATOM3': ATOM3,  #
                'ATOM3_name': ATOM3_name,  #
                'DINCREMENT': DINCREMENT,  #
                'NWINDOWS': NWINDOWS,  #
                'FORCECONSTANT': FORCECONSTANT,  #
                'DMINIMUM': DMINIMUM,  #
                'sigma_pk1_pk3': self.coord2_sigma_pk1_pk3,  #
                'sigma_pk3_pk1': self.coord2_sigma_pk3_pk1,
            }  #
        #-------------------------------------------------------------------------------------------------#

        #-----------------------------------import trajectory parameters--------------------------------#
        max_int = int(
            self.builder.get_object("SCAN_MIN_entry_max_int").get_text())  #
        rms_grad = float(
            self.builder.get_object("SCAN_MIN_entry_rmsd_grad").get_text())  #
        mim_method = self.builder.get_object(
            'combobox_optimization_method').get_active_text()  #
        log_freq = None  #
        #-----------------------------------------------------------------------------------------------#

        #-----------------------------------------------------------------------------------------------#
        data_path = self.EasyHybridSession.project.settings['data_path']  #
        traj = self.builder.get_object(
            'SCAN_entry_trajectory_name').get_text()  #
        if not os.path.exists(os.path.join(data_path, traj)):
            os.mkdir(os.path.join(data_path, traj))  #
        outpath = os.path.join(data_path, traj)  #
        #-----------------------------------------------------------------------------------------------#
        PARAMETERS = {
            'max_int': max_int,
            'log_freq': log_freq,
            'rms_grad': rms_grad,
            'mim_method': mim_method,
            'outpath': outpath
        }

        pprint(REACTION_COORD1)
        pprint(REACTION_COORD2)
        pprint(PARAMETERS)

        X, X_norm, logFile = Scan2D(outpath, REACTION_COORD1, REACTION_COORD2,
                                    PARAMETERS, self.EasyHybridSession.project)

        self.EasyHybridSession.project.From_PDYNAMO_to_EasyHybrid(type_='scn',
                                                                  log=logFile)
        self.Visible = False
        self.window.destroy()
        #return x, y,

    def Button_import_PyMOL_index(self, button):
        '''
        ----------------------------------------------------self.coord1_sigma_pk1_pk3
                        REACTION COORDINATE 1               self.coord1_sigma_pk3_pk1
        ----------------------------------------------------
        '''
        if button == self.builder.get_object('Button_import_PyMOL_index1'):
            mode = self.builder.get_object(
                'combobox_SCAN_reaction_coordiante_type').get_active_text()
            if mode == "simple-distance":
                try:
                    name1, atom1_index, name2, atom2_index, distance_a1_a2 = import_ATOM1_ATOM2(
                        "pk1", "pk2")
                    distance_a1_a2 = str(distance_a1_a2)

                    self.builder.get_object('entry_param_DMINIMUM1').set_text(
                        distance_a1_a2)
                    self.builder.get_object("entry_coord1_ATOM1").set_text(
                        str(atom1_index))
                    self.builder.get_object(
                        "entry_coord1_ATOM1_name").set_text(name1)
                    self.builder.get_object("entry_coord1_ATOM2").set_text(
                        str(atom2_index))
                    self.builder.get_object(
                        "entry_coord1_ATOM2_name").set_text(name2)
                except:
                    cmd.edit_mode()
                    print "pk1, pk2 selection not found"
                    print texto_d1
                    return

            if mode == "multiple-distance":
                try:
                    name1, atom1_index, name2, atom2_index, distance_a1_a2 = import_ATOM1_ATOM2(
                        "pk1", "pk2")
                    name2, atom2_index, name3, atom3_index, distance_a2_a3 = import_ATOM1_ATOM2(
                        "pk2", "pk3")

                    print "distance between atom 1 and atom 2: ", distance_a1_a2
                    print "distance between atom 2 and atom 3: ", distance_a2_a3

                    if self.builder.get_object(
                            "checkbutton_mass_weight1").get_active():
                        self.coord1_sigma_pk1_pk3, self.coord1_sigma_pk3_pk1 = compute_sigma_a1_a3(
                            name1, name3)
                        """
                           R                    R
                            \                  /
                             A1--A2  . . . . A3
                            /                  \ 
                           R                    R
                             ^   ^            ^
                             |   |            |
                            pk1-pk2  . . . . pk3
                               d1       d2	
                        
                        q1 =  1 / (mpk1 + mpk3)  =  [ mpk1 * r (pk3_pk2)  -   mpk3 * r (pk1_pk2) ]
                        
                        """

                        DMINIMUM = (self.coord1_sigma_pk1_pk3 * distance_a1_a2
                                    ) - (self.coord1_sigma_pk3_pk1 *
                                         distance_a2_a3 * -1)
                        self.builder.get_object(
                            'entry_param_DMINIMUM1').set_text(str(DMINIMUM))
                        print "\n\nUsing mass weighted restraints"
                        print "Sigma pk1_pk3", self.coord1_sigma_pk1_pk3
                        print "Sigma pk3_pk1", self.coord1_sigma_pk3_pk1
                        print "Estimated minimum distance", DMINIMUM

                    else:
                        self.coord1_sigma_pk1_pk3 = 1.0
                        self.coord1_sigma_pk3_pk1 = -1.0
                        DMINIMUM = distance_a1_a2 - distance_a2_a3
                        self.builder.get_object(
                            'entry_param_DMINIMUM1').set_text(str(DMINIMUM))

                        print "\n\nSigma pk1_pk3 ", self.coord1_sigma_pk1_pk3
                        print "Sigma pk3_pk1", self.coord1_sigma_pk3_pk1
                        print "Estimated minimum distance", DMINIMUM
                except:
                    cmd.edit_mode()
                    print "pk1, pk2 and pk3 selections not found"
                    print texto_d2d1
                    return
                print name3, name2, name1
                self.builder.get_object("entry_coord1_ATOM1").set_text(
                    str(atom1_index))
                self.builder.get_object("entry_coord1_ATOM1_name").set_text(
                    name1)
                self.builder.get_object("entry_coord1_ATOM2").set_text(
                    str(atom2_index))
                self.builder.get_object("entry_coord1_ATOM2_name").set_text(
                    name2)
                self.builder.get_object("entry_coord1_ATOM3").set_text(
                    str(atom3_index))
                self.builder.get_object("entry_coord1_ATOM3_name").set_text(
                    name3)
        '''
        ----------------------------------------------------
                        REACTION COORDINATE 2 
        ----------------------------------------------------
        '''
        if button == self.builder.get_object('Button_import_PyMOL_index2'):

            mode = self.builder.get_object(
                'combobox_SCAN_reaction_coordiante2_type').get_active_text()
            if mode == "simple-distance":
                try:
                    name1, atom1_index, name2, atom2_index, distance_a1_a2 = import_ATOM1_ATOM2(
                        "pk1", "pk2")
                    distance_a1_a2 = str(distance_a1_a2)

                    self.builder.get_object('entry_param_DMINIMUM2').set_text(
                        distance_a1_a2)
                    self.builder.get_object("entry_coord2_ATOM1").set_text(
                        str(atom1_index))
                    self.builder.get_object(
                        "entry_coord2_ATOM1_name").set_text(name1)
                    self.builder.get_object("entry_coord2_ATOM2").set_text(
                        str(atom2_index))
                    self.builder.get_object(
                        "entry_coord2_ATOM2_name").set_text(name2)
                except:
                    cmd.edit_mode()
                    print "pk1, pk2 selection not found"
                    print texto_d1
                    return

            if mode == "multiple-distance":
                try:
                    name1, atom1_index, name2, atom2_index, distance_a1_a2 = import_ATOM1_ATOM2(
                        "pk1", "pk2")
                    name2, atom2_index, name3, atom3_index, distance_a2_a3 = import_ATOM1_ATOM2(
                        "pk2", "pk3")

                    print "distance between atom 1 and atom 2: ", distance_a1_a2
                    print "distance between atom 2 and atom 3: ", distance_a2_a3

                    if self.builder.get_object(
                            "checkbutton_mass_weight2").get_active():
                        self.coord2_sigma_pk1_pk3, self.coord2_sigma_pk3_pk1 = compute_sigma_a1_a3(
                            name1, name3)
                        """
                           R                    R
                            \                  /
                             A1--A2  . . . . A3
                            /                  \ 
                           R                    R
                             ^   ^            ^
                             |   |            |
                            pk1-pk2  . . . . pk3
                               d1       d2	
                        
                        q1 =  1 / (mpk1 + mpk3)  =  [ mpk1 * r (pk3_pk2)  -   mpk3 * r (pk1_pk2) ]
                        
                        """

                        DMINIMUM = (self.coord2_sigma_pk1_pk3 * distance_a1_a2
                                    ) - (self.coord2_sigma_pk3_pk1 *
                                         distance_a2_a3 * -1)
                        self.builder.get_object(
                            'entry_param_DMINIMUM2').set_text(str(DMINIMUM))
                        print "\n\nUsing mass weighted restraints"
                        print "Sigma pk1_pk3", self.coord2_sigma_pk1_pk3
                        print "Sigma pk3_pk1", self.coord2_sigma_pk3_pk1
                        print "Estimated minimum distance", DMINIMUM

                    else:
                        self.coord2_sigma_pk1_pk3 = 1.0
                        self.coord2_sigma_pk3_pk1 = -1.0
                        DMINIMUM = distance_a1_a2 - distance_a2_a3
                        self.builder.get_object(
                            'entry_param_DMINIMUM2').set_text(str(DMINIMUM))

                        print "\n\nSigma pk1_pk3 ", self.coord2_sigma_pk1_pk3
                        print "Sigma pk3_pk1", self.coord2_sigma_pk3_pk1
                        print "Estimated minimum distance", DMINIMUM
                except:
                    cmd.edit_mode()
                    print "pk1, pk2 and pk3 selections not found"
                    print texto_d2d1
                    return
                print name3, name2, name1
                self.builder.get_object("entry_coord2_ATOM1").set_text(
                    str(atom1_index))
                self.builder.get_object("entry_coord2_ATOM1_name").set_text(
                    name1)
                self.builder.get_object("entry_coord2_ATOM2").set_text(
                    str(atom2_index))
                self.builder.get_object("entry_coord2_ATOM2_name").set_text(
                    name2)
                self.builder.get_object("entry_coord2_ATOM3").set_text(
                    str(atom3_index))
                self.builder.get_object("entry_coord2_ATOM3_name").set_text(
                    name3)

    def Mass_weight_check(self, checkbutton):
        '''
        ----------------------------------------------------
                        REACTION COORDINATE 1 
        ----------------------------------------------------
        '''
        if checkbutton == self.builder.get_object('checkbutton_mass_weight1'):
            try:
                name1, atom1_index, name2, atom2_index, distance_a1_a2 = import_ATOM1_ATOM2(
                    "pk1", "pk2")
                name2, atom2_index, name3, atom3_index, distance_a2_a3 = import_ATOM1_ATOM2(
                    "pk2", "pk3")
            except:
                print texto_d2d1
                return

            if self.builder.get_object(
                    "checkbutton_mass_weight1").get_active():
                self.coord1_sigma_pk1_pk3, self.coord1_sigma_pk3_pk1 = compute_sigma_a1_a3(
                    name1, name3)
                """
                   R                    R
                    \                  /
                     A1--A2  . . . . A3
                    /                  \ 
                   R                    R
                     ^   ^            ^
                     |   |            |
                    pk1-pk2  . . . . pk3
                       d1       d2	
                
                q1 =  1 / (mpk1 + mpk3)  =  [ mpk1 * r (pk3_pk2)  -   mpk3 * r (pk1_pk2) ]
                
                """
                DMINIMUM = (self.coord1_sigma_pk1_pk3 * distance_a1_a2) - (
                    self.coord1_sigma_pk3_pk1 * distance_a2_a3 * -1)
                self.builder.get_object('entry_param_DMINIMUM1').set_text(
                    str(DMINIMUM))
                print "\n\nUsing mass weighted restraints"
                print "Sigma pk1_pk3", self.coord1_sigma_pk1_pk3
                print "Sigma pk3_pk1", self.coord1_sigma_pk3_pk1
                print "Estimated minimum distance", DMINIMUM

            else:
                self.coord1_sigma_pk1_pk3 = 1.0
                self.coord1_sigma_pk3_pk1 = -1.0
                DMINIMUM = distance_a1_a2 - distance_a2_a3
                self.builder.get_object('entry_param_DMINIMUM1').set_text(
                    str(DMINIMUM))
                print "\n\nSigma pk1_pk3 ", self.coord1_sigma_pk1_pk3
                print "Sigma pk3_pk1", selfcoord1_sigma_pk3_pk1
                print "Estimated minimum distance", DMINIMUM
        '''
        ----------------------------------------------------
                        REACTION COORDINATE 2 
        ----------------------------------------------------
        '''
        if checkbutton == self.builder.get_object('checkbutton_mass_weight2'):
            try:
                name1, atom1_index, name2, atom2_index, distance_a1_a2 = import_ATOM1_ATOM2(
                    "pk1", "pk2")
                name2, atom2_index, name3, atom3_index, distance_a2_a3 = import_ATOM1_ATOM2(
                    "pk2", "pk3")
            except:
                print texto_d2d1
                return

            if self.builder.get_object(
                    "checkbutton_mass_weight2").get_active():
                self.coord2_sigma_pk1_pk3, self.coord2_sigma_pk3_pk1 = compute_sigma_a1_a3(
                    name1, name3)
                """
                   R                    R
                    \                  /
                     A1--A2  . . . . A3
                    /                  \ 
                   R                    R
                     ^   ^            ^
                     |   |            |
                    pk1-pk2  . . . . pk3
                       d1       d2	
                
                q1 =  1 / (mpk1 + mpk3)  =  [ mpk1 * r (pk3_pk2)  -   mpk3 * r (pk1_pk2) ]
                
                """
                DMINIMUM = (self.coord2_sigma_pk1_pk3 * distance_a1_a2) - (
                    self.coord2_sigma_pk3_pk1 * distance_a2_a3 * -1)
                self.builder.get_object('entry_param_DMINIMUM2').set_text(
                    str(DMINIMUM))
                print "\n\nUsing mass weighted restraints"
                print "Sigma pk1_pk3", self.coord2_sigma_pk1_pk3
                print "Sigma pk3_pk1", self.coord2_sigma_pk3_pk1
                print "Estimated minimum distance", DMINIMUM

            else:
                self.coord2_sigma_pk1_pk3 = 1.0
                self.coord2_sigma_pk3_pk1 = -1.0
                DMINIMUM = distance_a1_a2 - distance_a2_a3
                self.builder.get_object('entry_param_DMINIMUM2').set_text(
                    str(DMINIMUM))
                print "\n\nSigma pk1_pk3 ", self.coord2_sigma_pk1_pk3
                print "Sigma pk3_pk1", self.coord2_sigma_pk3_pk1
                print "Estimated minimum distance", DMINIMUM

    def checkbutton_MassWeight(self, checkbutton):
        """ Function doc """
        print 'checkbutton_MassWeight'
        self.Mass_weight_check(checkbutton)

    def Scan2DComboxChange(self, combobox):
        """ Function doc """
        if combobox == self.builder.get_object(
                'combobox_SCAN_reaction_coordiante_type'):
            mode = self.builder.get_object(
                'combobox_SCAN_reaction_coordiante_type').get_active_text()
            if mode == 'simple-distance':
                self.builder.get_object('label_coord1_atom3').set_sensitive(
                    False)
                self.builder.get_object('entry_coord1_ATOM3').set_sensitive(
                    False)
                self.builder.get_object(
                    'label_coord1_ATOM3_name').set_sensitive(False)
                self.builder.get_object(
                    'entry_coord1_ATOM3_name').set_sensitive(False)
                self.builder.get_object(
                    'checkbutton_mass_weight1').set_sensitive(False)
            if mode == 'multiple-distance':
                self.builder.get_object('label_coord1_atom3').set_sensitive(
                    True)
                self.builder.get_object('entry_coord1_ATOM3').set_sensitive(
                    True)
                self.builder.get_object(
                    'label_coord1_ATOM3_name').set_sensitive(True)
                self.builder.get_object(
                    'entry_coord1_ATOM3_name').set_sensitive(True)
                self.builder.get_object(
                    'checkbutton_mass_weight1').set_sensitive(True)

        if combobox == self.builder.get_object(
                'combobox_SCAN_reaction_coordiante2_type'):
            mode = self.builder.get_object(
                'combobox_SCAN_reaction_coordiante2_type').get_active_text()
            if mode == 'simple-distance':
                self.builder.get_object('label_coord2_atom3').set_sensitive(
                    False)
                self.builder.get_object('entry_coord2_ATOM3').set_sensitive(
                    False)
                self.builder.get_object(
                    'label_coord2_ATOM3_name').set_sensitive(False)
                self.builder.get_object(
                    'entry_coord2_ATOM3_name').set_sensitive(False)
                self.builder.get_object(
                    'checkbutton_mass_weight2').set_sensitive(False)
            if mode == 'multiple-distance':
                self.builder.get_object('label_coord2_atom3').set_sensitive(
                    True)
                self.builder.get_object('entry_coord2_ATOM3').set_sensitive(
                    True)
                self.builder.get_object(
                    'label_coord2_ATOM3_name').set_sensitive(True)
                self.builder.get_object(
                    'entry_coord2_ATOM3_name').set_sensitive(True)
                self.builder.get_object(
                    'checkbutton_mass_weight2').set_sensitive(True)

    def OpenWindow(self, text):
        """ Function doc """
        if self.Visible == False:
            self.builder = gtk.Builder()
            self.builder.add_from_file(
                os.path.join(self.EasyHybrid_GUI, 'WindowScan2D',
                             'ScanWindow2D.glade'))

            self.builder.connect_signals(self)
            self.window = self.builder.get_object('ScanWindow')
            self.coord2_sigma_pk1_pk3 = None
            self.coord2_sigma_pk3_pk1 = None
            self.coord1_sigma_pk1_pk3 = None
            self.coord1_sigma_pk3_pk1 = None
            self.builder.get_object("SCAN_entry_trajectory_name").set_text(
                text)
            '''
            --------------------------------------------------
            -                                                -
            -	              WindowControl                  -
            -                                                -
            --------------------------------------------------
            '''
            self.window_control = WindowControl(self.builder)

            #--------------------- Setup ComboBoxes -------------------------
            combobox = 'combobox_SCAN_reaction_coordiante_type'
            combolist = ['simple-distance', 'multiple-distance']
            self.window_control.SETUP_COMBOBOXES(combobox, combolist, 0)

            combobox = 'combobox_SCAN_reaction_coordiante2_type'
            combolist = ['simple-distance', 'multiple-distance']
            self.window_control.SETUP_COMBOBOXES(combobox, combolist, 0)

            combobox = 'combobox_optimization_method'
            combolist = ['Conjugate Gradient', 'Steepest Descent', 'LBFGS']
            self.window_control.SETUP_COMBOBOXES(combobox, combolist, 0)

            self.window.show()
            #
            self.builder.connect_signals(self)

            self.Visible = True
            gtk.main()
            #----------------------------------------------------------------

    def CloseWindow(self, button):
        """ Function doc """
        #print "Bacheguissimo"
        self.window.destroy()

    def __init__(self, EasyHybridSession=None):
        """ Class initialiser """
        self.Visible = False

        if EasyHybridSession != None:
            self.project = EasyHybridSession.project
            self.main_builder = EasyHybridSession.builder
            self.EasyHybridSession = EasyHybridSession
            self.window_control = EasyHybridSession.window_control
            self.EasyHybrid_ROOT = EasyHybridSession.EasyHybrid_ROOT
            self.EasyHybrid_GUI = EasyHybridSession.EasyHybrid_GUI

        else:
            self.EasyHybrid_ROOT = ''
            self.EasyHybrid_GUI = ''
            self.project = None

        #self.window_control = window_control
        #self.builder = gtk.Builder()
        #self.main_builder = main_builder

        #self.builder.add_from_file(
        #    os.path.join(EasyHybrid_GUI, 'ScanWindow.glade'))
        #
        #self.builder.connect_signals(self)
        #self.window = self.builder.get_object('ScanWindow')
        #
        #self.sigma_pk1_pk3 = None
        #self.sigma_pk3_pk1 = None
        '''
Exemplo n.º 4
0
class NewProjectDialog():

    """ Class doc """
    def on_new_project_entry_changed (self, entry):
		""" Function doc """
		text      = self.builder.get_object("new_project_entry").get_text()
		WorkSpace = self.EasyHybridSession.EasyHybridConfig['WorkSpace']
		try:
			path      = os.path.join(WorkSpace, text)
			
			self.builder.get_object("ProjectDirectory").set_text(path)
		except:
			pass
			
    def on_combobox1_changed(self, combobox):
        """ Function doc """

        fftype = self.builder.get_object("combobox1").get_active_text()

        if fftype == "AMBER":
            #print fftype
            self.builder.get_object("amber_prmtop_label").  show()
            self.builder.get_object("amber_prmtop_chooser").show()
            self.builder.get_object("charmm_topologies_label").hide()
            self.builder.get_object("charmm_topologies_chooser").hide()
            self.builder.get_object("opls_prmtop_label").hide()
            self.builder.get_object("opls_prmtop_chooser").hide()

        if fftype == "CHARMM":
            #print fftype
            self.builder.get_object("opls_prmtop_label").hide()
            self.builder.get_object("opls_prmtop_chooser").hide()

            self.builder.get_object("amber_prmtop_label").  show()
            self.builder.get_object("amber_prmtop_chooser").show()
            self.builder.get_object("charmm_topologies_label").show()
            self.builder.get_object("charmm_topologies_chooser").show()

        if fftype == "GROMACS":
            #print fftype
            self.builder.get_object("amber_prmtop_label").  show()
            self.builder.get_object("amber_prmtop_chooser").show()
            self.builder.get_object("charmm_topologies_label").hide()
            self.builder.get_object("charmm_topologies_chooser").hide()
            self.builder.get_object("opls_prmtop_label").hide()
            self.builder.get_object("opls_prmtop_chooser").hide()

        if fftype == "OPLS":
            #print fftype
            self.builder.get_object("amber_prmtop_label").  hide()
            self.builder.get_object("amber_prmtop_chooser").hide()
            self.builder.get_object("opls_prmtop_label").show()
            self.builder.get_object("opls_prmtop_chooser").show()
            self.builder.get_object("charmm_topologies_label").  hide()
            self.builder.get_object("charmm_topologies_chooser").hide()

        if fftype == "pDynamo files(*.pkl,*.yaml)":
            self.builder.get_object("opls_prmtop_label").hide()
            self.builder.get_object("opls_prmtop_chooser").hide()

            self.builder.get_object("amber_prmtop_label").  hide()
            self.builder.get_object("amber_prmtop_chooser").hide()
            self.builder.get_object("charmm_topologies_label").  hide()
            self.builder.get_object("charmm_topologies_chooser").hide()

        if fftype == "Other(*.pdb,*.xyz,*.mol2...)":
            self.builder.get_object("opls_prmtop_label").hide()
            self.builder.get_object("opls_prmtop_chooser").hide()

            self.builder.get_object("amber_prmtop_label").  hide()
            self.builder.get_object("amber_prmtop_chooser").hide()
            self.builder.get_object("charmm_topologies_label").  hide()
            self.builder.get_object("charmm_topologies_chooser").hide()

    # "old import_molmec_system(*args): "
    def on_button1_clicked_create_new_project(self, button):
        
        
        BufferText =  self.builder.get_object('textview1').get_buffer()  #
        BufferText = BufferText.get_text(*BufferText.get_bounds(), include_hidden_chars=False)
        #print BufferText
        
        #print '\n\n\n' + BufferText + '\n\n\n' + 'teste aqui'
                
        project          = self.project
        name             = self.builder.get_object("new_project_entry").get_text()
        ProjectDirectory = self.builder.get_object("ProjectDirectory").get_text()
        
        ProjectDirectory = ProjectDirectory.split('/')
        path = '/'
        for i in ProjectDirectory:
            path = os.path.join(path, i)
            if not os.path.exists (path): 
                os.mkdir (path)
        
       #data_path = self.builder.get_object("filechooserbutton1").get_filename()
        data_path = self.builder.get_object("ProjectDirectory").get_text()
        FileType = self.builder.get_object("combobox1").get_active_text()			# combo box combox_model
        filename = os.path.join(data_path,name)
        
        
        
        filesin = {}
        
        try:
            import shutil
        except:
            print "shutil module is no available"

        if FileType == "AMBER":
            filesin['amber_params'] = self.builder.get_object(
                "amber_prmtop_chooser").get_filename()
            filesin['amber_coords'] = self.builder.get_object(
                "amber_inpcrd_chooser").get_filename()

        elif FileType == "CHARMM":
            filesin['charmm_params'] = self.builder.get_object(
                "amber_prmtop_chooser").get_filename()
            filesin['charmm_topologies'] = self.builder.get_object(
                "charmm_topologies_chooser").get_filename()
            filesin['charmm_coords'] = self.builder.get_object(
                "amber_inpcrd_chooser").get_filename()

        elif FileType == "GROMACS":
            filesin['gromacs_params'] = self.builder.get_object(
                "amber_prmtop_chooser").get_filename()					#
            filesin['gromacs_coords'] = self.builder.get_object(
                "amber_inpcrd_chooser").get_filename()

        elif FileType == "OPLS":
            filesin['opls_params'] = self.builder.get_object(
                "opls_prmtop_chooser").get_filename()
            filesin['opls_coords'] = self.builder.get_object(
                "amber_inpcrd_chooser").get_filename()

        elif FileType == "pDynamo files(*.pkl,*.yaml)":
            filesin['pDynamoFile'] = self.builder.get_object(
                "amber_inpcrd_chooser").get_filename()					#

        elif FileType == "Other(*.pdb,*.xyz,*.mol2...)":
            filesin['coordinates'] = self.builder.get_object(
                "amber_inpcrd_chooser").get_filename()					#


        self.project          = self.EasyHybridSession.project
       
        #self.project.DeleteActualProject()
        self.project.Create_New_Project(
            name, data_path, FileType, filesin, BufferText)
        
        self.project.Save_Project_To_File (filename = filename, type_ = 'pkl')
        
        
        # self.project.From_PDYNAMO_to_EasyHybrid()
        self.project.system.Summary()
        self.project.settings['add_info']  =  BufferText

        #

    def __init__(self, EasyHybridSession = None):
		""" Class initialiser """
		self.builder          = gtk.Builder()

		if EasyHybridSession != None:
			self.project          = EasyHybridSession.project
			self.main_builder     = EasyHybridSession.builder
			self.EasyHybridSession = EasyHybridSession

		self.builder.add_from_file(
			os.path.join(EasyHybrid_GUI,'DialogNewProject', 'NewProjectDialog.glade'))
		self.builder.connect_signals(self)
		self.dialog = self.builder.get_object('dialog1')
		self.dualLog = None
		#self.scrath  = os.environ.get('PDYNAMO_SCRATCH')
		#
		#self.builder.get_object('ProjectDirectory').set_text(self.scrath )
		'''
		--------------------------------------------------
		-                                                -
		-	              WindowControl                  -
		-                                                -
		--------------------------------------------------
		'''
		self.window_control = WindowControl(self.builder)

		#----------------- Setup ComboBoxes -------------------------#
		combobox = 'combobox1'                                      #
		combolist = ["AMBER",                                        #
					 "CHARMM",                                       #
					 #
					 #"GROMACS",
					 #
					 "OPLS",
					 #
					 "pDynamo files(*.pkl,*.yaml)",
					 "Other(*.pdb,*.xyz,*.mol2...)"]                 #
		#
		self.window_control.SETUP_COMBOBOXES(combobox, combolist, 0)
		#------------------------------------------------------------#

		localtime = time.asctime(time.localtime(time.time()))
		print "Local current time :", localtime
		localtime = localtime.split()

		#  0     1    2       3         4
		#[Sun] [Sep] [28] [02:32:04] [2014]
		text = 'NewProject_' + localtime[1] + \
			'_' + localtime[2] + '_' + localtime[4]
		self.builder.get_object("new_project_entry").set_text(text)
class TrajectoryEnergyRefineDialog():

    def runTrajectoryEnergyRefine (self, button):
        """ Function doc """
        
        trajectory = self.builder.get_object('filechooserbutton1').get_filename()
        data_path  = self.project.settings['data_path']
        logfile    = self.builder.get_object('filechooserbutton4').get_filename()
        input_type = self.builder.get_object('combobox4').get_active_text()
	nCPUs      = self.builder.get_object('spinbutton2').get_value_as_int()
	#nCPUs      = 8
        REACTION_COORD1 = None
	REACTION_COORD2 = None
	
	set_MM_chrgs_to_zero = False
	exclude_MM_atoms     = False
	system     = Clone(self.project.system)
	
	if self.builder.get_object("checkbutton_set_MM_charges_to_zero").get_active():
	    charges =  system.energyModel.mmAtoms.AtomicCharges()
	    natoms  = len(charges)
	    ZeroCharges = [0.0] * natoms
	    system.energyModel.mmAtoms.SetAtomicCharges(ZeroCharges)
        
	

	#if self.builder.get_object("checkbutton_exclude_MM_atoms").get_active():
	#    exclude_MM_atoms = True
	
	#_type = None
        
	#-------------------------------------------------------------------------------------------------#
	# 				Coordinate 1
	#-------------------------------------------------------------------------------------------------#
	mode       = self.builder.get_object('combobox_reaction_coordiante_type1').get_active_text() 
	if mode == "simple-distance":                                                                
	    REACTION_COORD1 = {'MODE'         : mode,                                                    
			       'ATOM1'        : int(self.builder.get_object("entry_coord1_ATOM1"     ).get_text()) ,                                            
			       'ATOM1_name'   : self.builder.get_object    ("entry_coord1_ATOM1_name").get_text()  ,                                            
			       'ATOM2'        : int(self.builder.get_object("entry_coord1_ATOM2"     ).get_text()) ,                                            
			       'ATOM2_name'   : self.builder.get_object    ("entry_coord1_ATOM2_name").get_text()  ,	                                     
			      }                                                                             
	                                                                                             
	if mode == "multiple-distance":                                                                           
	    REACTION_COORD1 = {'MODE'         : mode,                                                    
			       'ATOM1'        : int(self.builder.get_object("entry_coord1_ATOM1"     ).get_text()),                                                  
			       'ATOM1_name'   : self.builder.get_object    ("entry_coord1_ATOM1_name").get_text() ,                                           
			       'ATOM2'        : int(self.builder.get_object("entry_coord1_ATOM2"     ).get_text()),
			       'ATOM2_name'   : self.builder.get_object    ("entry_coord1_ATOM2_name").get_text() ,
			       'ATOM3'        : int(self.builder.get_object("entry_coord1_ATOM3"     ).get_text()),
			       'ATOM3_name'   : self.builder.get_object    ("entry_coord1_ATOM3_name").get_text() ,
			       }                                        
	#-------------------------------------------------------------------------------------------------#
	


	
	
	
	#-------------------------------------------------------------------------------------------------#
	# 				Coordinate 2
	#-------------------------------------------------------------------------------------------------#
	if self.refine_type == '2D':
	    mode       = self.builder.get_object('combobox_reaction_coordiante_type2').get_active_text() 
	    if mode == "simple-distance":    	    									
		REACTION_COORD2 = {'MODE'         : mode,                                        
				   'ATOM1'        : int(self.builder.get_object("entry_coord2_ATOM1"     ).get_text()),                                        
				   'ATOM1_name'   : self.builder.get_object    ("entry_coord2_ATOM1_name").get_text() ,                                        
				   'ATOM2'        : int(self.builder.get_object("entry_coord2_ATOM2"     ).get_text()),                                        
				   'ATOM2_name'   : self.builder.get_object    ("entry_coord2_ATOM2_name").get_text() ,  		                                                          
			       }                                                                 
	    
	    if mode == "multiple-distance":                                                              											 
		REACTION_COORD2 = {'MODE'         : mode,                                                    
				   'ATOM1'        : int(self.builder.get_object("entry_coord2_ATOM1"     ).get_text()),                                              
				   'ATOM1_name'   : self.builder.get_object    ("entry_coord2_ATOM1_name").get_text() ,                                              
				   'ATOM2'        : int(self.builder.get_object("entry_coord2_ATOM2"     ).get_text()),                                              
				   'ATOM2_name'   : self.builder.get_object    ("entry_coord2_ATOM2_name").get_text() ,		                                     
				   'ATOM3'        : int(self.builder.get_object("entry_coord2_ATOM3"     ).get_text()),                                              
				   'ATOM3_name'   : self.builder.get_object    ("entry_coord2_ATOM3_name").get_text() ,                                              
				   }  
	#-------------------------------------------------------------------------------------------------#

	'''
	if self.builder.get_object('checkbutton_minimization').get_active()  :

	    #---------------------------------- importing parameters COORD-1 ---------------------------#
            FORCECONSTANT = float(self.builder.get_object('entry_FORCE1').get_text())                   #
            #-------------------------------------------------------------------------------------------#
            self.EasyHybridSession.project.ActiveModeCheck()
            MINIMIZATION_PARAMETERS = None
            
            if self.builder.get_object("checkbutton_minimization").get_active():
                #---------------------------------------------------------------------------------------------------------#
                mim_method	   = self.builder.get_object('combobox_optimization_method').get_active_text()            #                                                                                                                         #
                max_int            = self.builder.get_object("entry_max_interactions")      .get_text()                   #
                rms_grad           = self.builder.get_object("entry_rmsd_grad")             .get_text()                   #
                log_freq           = 1
                #---------------------------------------------------------------------------------------------------------#
                
                MINIMIZATION_PARAMETERS={
                                        'do_minimizaton': True      ,
                                        'max_int'       : max_int   ,
                                        'log_freq'      : log_freq  ,
                                        'rms_grad'      : rms_grad  ,
                                        'mim_method'    : mim_method}

            pprint(REACTION_COORD1)
            pprint(MINIMIZATION_PARAMETERS)

        
	else:
	    pass
	'''
	
	_type = 'energy'
	
	outputLogFile = self.builder.get_object("output_entry").get_text()
	
	pDynamoTrajectoryEnergyRefine (system               = system              , 
				       data_path            = outputLogFile       ,     
				       trajectory           = trajectory          ,  
				       REACTION_COORD1      = REACTION_COORD1     ,
				       REACTION_COORD2      = REACTION_COORD2     ,
				       input_type           = input_type          , 
				       _type                = self.refine_type    ,
				       nCPUs                = nCPUs               ,
				       set_MM_chrgs_to_zero = set_MM_chrgs_to_zero,
				       exclude_MM_atoms     = exclude_MM_atoms    )   

	#if self.builder.get_object("checkbutton_set_MM_charges_to_zero").get_active():
	#    self.project.system.energyModel.mmAtoms.SetAtomicCharges(charges)
        #


    def fileChooser_logFile (self, widget):
	""" Function doc 
	parameters = {
		      1: {
			 'type'          : 'line'    ,   # line / matrix
			 'title'         : ''        ,   #
			 'X'             : []        ,   # X 
			 'Y'             : []        ,   # Y 
			 'xlabel'        : 'x label' ,   # xlabel,
			 'ylabel'        : 'y label' ,   # ylabel,
			 'energy_model'  : 'UNK'     ,
			 
			 
			 'c1_ATOM1_id'   : None      ,
			 'c1_ATOM2_id'   : None      ,
			 'c1_ATOM3_id'   : None      ,
					 
			 'c1_ATOM1_name' : None      ,
			 'c1_ATOM2_name' : None      ,
			 'c1_ATOM3_name' : None      ,
					 
			 'c2_ATOM1_id'   : None      ,
			 'c2_ATOM2_id'   : None      ,
			 'c2_ATOM3_id'   : None      ,
					 
			 'c2_ATOM1_name' : None      ,
			 'c2_ATOM2_name' : None      ,
			 'c2_ATOM3_name' : None      ,
			 
			 }

	
	REACTION_COORD1 = {'MODE'         : mode,                                                    
			   'ATOM1'        : int(self.builder.get_object("entry_coord1_ATOM1"     ).get_text()),                                                  
			   'ATOM1_name'   : self.builder.get_object    ("entry_coord1_ATOM1_name").get_text() ,                                           
			   'ATOM2'        : int(self.builder.get_object("entry_coord1_ATOM2"     ).get_text()),
			   'ATOM2_name'   : self.builder.get_object    ("entry_coord1_ATOM2_name").get_text() ,
			   'ATOM3'        : int(self.builder.get_object("entry_coord1_ATOM3"     ).get_text()),
			   'ATOM3_name'   : self.builder.get_object    ("entry_coord1_ATOM3_name").get_text() ,


	"""
	FileName = self.builder.get_object("filechooserbutton4").get_filename()
	parameters = ParseProcessLogFile(FileName)
	#print parameters

	if parameters[1]['c1_ATOM1_id']:
	    self.builder.get_object("entry_coord1_ATOM1").set_text(parameters[1]['c1_ATOM1_id'])
	    self.builder.get_object ("entry_coord1_ATOM1_name").set_text(parameters[1]['c1_ATOM1_name'])



	if parameters[1]['c1_ATOM2_id']:
	    self.builder.get_object("entry_coord1_ATOM2").set_text(parameters[1]['c1_ATOM2_id'])
	    self.builder.get_object ("entry_coord1_ATOM2_name").set_text(parameters[1]['c1_ATOM2_name'])


	if parameters[1]['c1_ATOM3_id']:
	    self.builder.get_object("entry_coord1_ATOM3").set_text(parameters[1]['c1_ATOM3_id'])
	    self.builder.get_object ("entry_coord1_ATOM3_name").set_text(parameters[1]['c1_ATOM3_name'])
	    self.builder.get_object('combobox_reaction_coordiante_type1').set_active(1)
	else:
	    self.builder.get_object('combobox_reaction_coordiante_type1').set_active(0)


	if parameters[1]['c2_ATOM1_id']:
	    self.builder.get_object("entry_coord2_ATOM1").set_text(parameters[1]['c2_ATOM1_id'])
	    self.builder.get_object ("entry_coord2_ATOM1_name").set_text(parameters[1]['c2_ATOM1_name'])

	
	
	if parameters[1]['c2_ATOM2_id']:
	    self.builder.get_object("entry_coord2_ATOM2").set_text(parameters[1]['c2_ATOM2_id'])
	    self.builder.get_object ("entry_coord2_ATOM2_name").set_text(parameters[1]['c2_ATOM2_name'])

	
	
	if parameters[1]['c2_ATOM3_id']:
	    self.builder.get_object("entry_coord2_ATOM3").set_text(parameters[1]['c2_ATOM3_id'])
	    self.builder.get_object ("entry_coord2_ATOM3_name").set_text(parameters[1]['c2_ATOM3_name'])
	    self.builder.get_object('combobox_reaction_coordiante_type2').set_active(1)
	else:
	    self.builder.get_object('combobox_reaction_coordiante_type2').set_active(0)

    def Button_import_PyMOL_index(self, button):
        '''
        ----------------------------------------------------
                        REACTION COORDINATE 1 
        ----------------------------------------------------
        '''
        if button == self.builder.get_object('import_indexes_from_PyMOL1'):
            mode  =  self.builder.get_object('combobox_reaction_coordiante_type1').get_active_text()
            if mode == "simple-distance":
                try:
                    name1, atom1_index, name2, atom2_index, distance_a1_a2 = import_ATOM1_ATOM2("pk1", "pk2")
                    distance_a1_a2 = str(distance_a1_a2)
                    
                    #self.builder.get_object('entry_param_DMINIMUM1'  ).set_text(distance_a1_a2)
                    self.builder.get_object("entry_coord1_ATOM1"     ).set_text(str(atom1_index))
                    self.builder.get_object("entry_coord1_ATOM1_name").set_text(name1)
                    self.builder.get_object("entry_coord1_ATOM2"     ).set_text(str(atom2_index))
                    self.builder.get_object("entry_coord1_ATOM2_name").set_text(name2)
                except:
                    cmd.edit_mode()
                    print "pk1, pk2 selection not found"					
                    print texto_d1
                    return	
        
            if mode == "multiple-distance":			
                try:
                    name1, atom1_index, name2, atom2_index, distance_a1_a2 = import_ATOM1_ATOM2("pk1", "pk2")
                    name2, atom2_index, name3, atom3_index, distance_a2_a3 = import_ATOM1_ATOM2("pk2", "pk3")

                    #print "distance between atom 1 and atom 2: ",distance_a1_a2
                    #print "distance between atom 2 and atom 3: ",distance_a2_a3
                    
		    '''
                    if self.builder.get_object("checkbutton_mass_weight").get_active():
                        self.sigma_pk1_pk3, self.sigma_pk3_pk1 = compute_sigma_a1_a3 (name1, name3)
                        
                        """
                           R                    R
                            \                  /
                             A1--A2  . . . . A3
                            /                  \ 
                           R                    R
                             ^   ^            ^
                             |   |            |
                            pk1-pk2  . . . . pk3
                               d1       d2	
                        
                        q1 =  1 / (mpk1 + mpk3)  =  [ mpk1 * r (pk3_pk2)  -   mpk3 * r (pk1_pk2) ]
                        
                        """			
                        
                        #DMINIMUM =  (self.sigma_pk1_pk3 * distance_a1_a2) -(self.sigma_pk3_pk1 * distance_a2_a3*-1)
                        #self.builder.get_object('entry_param_DMINIMUM1').set_text(str(DMINIMUM))
                        print "\n\nUsing mass weighted restraints"
                        print "Sigma pk1_pk3", self.sigma_pk1_pk3
                        print "Sigma pk3_pk1", self.sigma_pk3_pk1
                        #print "Estimated minimum distance",  DMINIMUM
                        
                    else:
                        self.sigma_pk1_pk3 =  1.0
                        self.sigma_pk3_pk1 = -1.0
                        #DMINIMUM = distance_a1_a2 - distance_a2_a3
                        #self.builder.get_object('entry_param_DMINIMUM1').set_text(str(DMINIMUM))
                        
                        print "\n\nSigma pk1_pk3 ", self.sigma_pk1_pk3
                        print "Sigma pk3_pk1", self.sigma_pk3_pk1
                        #print "Estimated minimum distance",  DMINIMUM			
		    '''
		
		except:
                    cmd.edit_mode()
                    print "pk1, pk2 and pk3 selections not found"	
                    return			
                
		print name3, name2, name1
                self.builder.get_object("entry_coord1_ATOM1"     ).set_text(str(atom1_index))
                self.builder.get_object("entry_coord1_ATOM1_name").set_text(name1)
                self.builder.get_object("entry_coord1_ATOM2"     ).set_text(str(atom2_index))
                self.builder.get_object("entry_coord1_ATOM2_name").set_text(name2)
                self.builder.get_object("entry_coord1_ATOM3"     ).set_text(str(atom3_index))
                self.builder.get_object("entry_coord1_ATOM3_name").set_text(name3)

        if button == self.builder.get_object('import_indexes_from_PyMOL2'):
            mode  =  self.builder.get_object('combobox_reaction_coordiante_type2').get_active_text()
            if mode == "simple-distance":
                try:
                    name1, atom1_index, name2, atom2_index, distance_a1_a2 = import_ATOM1_ATOM2("pk1", "pk2")
                    distance_a1_a2 = str(distance_a1_a2)
                    
                    #self.builder.get_object('entry_param_DMINIMUM1'  ).set_text(distance_a1_a2)
                    self.builder.get_object("entry_coord2_ATOM1"     ).set_text(str(atom1_index))
                    self.builder.get_object("entry_coord2_ATOM1_name").set_text(name1)
                    self.builder.get_object("entry_coord2_ATOM2"     ).set_text(str(atom2_index))
                    self.builder.get_object("entry_coord2_ATOM2_name").set_text(name2)
                except:
                    cmd.edit_mode()
                    print "pk1, pk2 selection not found"					
                    print texto_d1
                    return	
        
            if mode == "multiple-distance":			
                try:
                    name1, atom1_index, name2, atom2_index, distance_a1_a2 = import_ATOM1_ATOM2("pk1", "pk2")
                    name2, atom2_index, name3, atom3_index, distance_a2_a3 = import_ATOM1_ATOM2("pk2", "pk3")
                    #print "distance between atom 1 and atom 2: ",distance_a1_a2
                    #print "distance between atom 2 and atom 3: ",distance_a2_a3
                    '''
                    if self.builder.get_object("checkbutton_mass_weight").get_active():
                        self.sigma_pk1_pk3, self.sigma_pk3_pk1 = compute_sigma_a1_a3 (name1, name3)
                        
                        """
                           R                    R
                            \                  /
                             A1--A2  . . . . A3
                            /                  \ 
                           R                    R
                             ^   ^            ^
                             |   |            |
                            pk1-pk2  . . . . pk3
                               d1       d2	
                        
                        q1 =  1 / (mpk1 + mpk3)  =  [ mpk1 * r (pk3_pk2)  -   mpk3 * r (pk1_pk2) ]
                        
                        """			
                        
                        #DMINIMUM =  (self.sigma_pk1_pk3 * distance_a1_a2) -(self.sigma_pk3_pk1 * distance_a2_a3*-1)
                        #self.builder.get_object('entry_param_DMINIMUM1').set_text(str(DMINIMUM))
                        print "\n\nUsing mass weighted restraints"
                        print "Sigma pk1_pk3", self.sigma_pk1_pk3
                        print "Sigma pk3_pk1", self.sigma_pk3_pk1
                        #print "Estimated minimum distance",  DMINIMUM
                        
                    else:
                        self.sigma_pk1_pk3 =  1.0
                        self.sigma_pk3_pk1 = -1.0
                        #DMINIMUM = distance_a1_a2 - distance_a2_a3
                        #self.builder.get_object('entry_param_DMINIMUM1').set_text(str(DMINIMUM))
                        
                        print "\n\nSigma pk1_pk3 ", self.sigma_pk1_pk3
                        print "Sigma pk3_pk1", self.sigma_pk3_pk1
                        #print "Estimated minimum distance",  DMINIMUM			
		    '''
		except:
                    cmd.edit_mode()
                    print "pk1, pk2 and pk3 selections not found"	
                    #print texto_d2d1	
                    return			
                print name3, name2, name1
                self.builder.get_object("entry_coord2_ATOM1"     ).set_text(str(atom1_index))
                self.builder.get_object("entry_coord2_ATOM1_name").set_text(name1)
                self.builder.get_object("entry_coord2_ATOM2"     ).set_text(str(atom2_index))
                self.builder.get_object("entry_coord2_ATOM2_name").set_text(name2)
                self.builder.get_object("entry_coord2_ATOM3"     ).set_text(str(atom3_index))
                self.builder.get_object("entry_coord2_ATOM3_name").set_text(name3)

    def ComboxChange(self, combobox):
        """ Function doc """
        #print combobox, combobox.get_active_text()
	if combobox == self.builder.get_object('combobox_reaction_coordiante_type1'):
            mode = self.builder.get_object('combobox_reaction_coordiante_type1').get_active_text()
            if mode == 'simple-distance':
                self.builder.get_object('label_coord1_atom3'      ).set_sensitive(False)
                self.builder.get_object('entry_coord1_ATOM3'      ).set_sensitive(False)
                self.builder.get_object('label_coord1_ATOM3_name' ).set_sensitive(False)
                self.builder.get_object('entry_coord1_ATOM3_name' ).set_sensitive(False)
            if mode == 'multiple-distance':
                self.builder.get_object('label_coord1_atom3'      ).set_sensitive(True)
                self.builder.get_object('entry_coord1_ATOM3'      ).set_sensitive(True)
                self.builder.get_object('label_coord1_ATOM3_name' ).set_sensitive(True)
                self.builder.get_object('entry_coord1_ATOM3_name' ).set_sensitive(True)

	if combobox == self.builder.get_object('combobox_reaction_coordiante_type2'):
            mode = self.builder.get_object('combobox_reaction_coordiante_type2').get_active_text()
            if mode == 'simple-distance':
                self.builder.get_object('label_coord2_atom3'      ).set_sensitive(False)
                self.builder.get_object('entry_coord2_ATOM3'      ).set_sensitive(False)
                self.builder.get_object('label_coord2_ATOM3_name' ).set_sensitive(False)
                self.builder.get_object('entry_coord2_ATOM3_name' ).set_sensitive(False)
            if mode == 'multiple-distance':
                self.builder.get_object('label_coord2_atom3'      ).set_sensitive(True)
                self.builder.get_object('entry_coord2_ATOM3'      ).set_sensitive(True)
                self.builder.get_object('label_coord2_ATOM3_name' ).set_sensitive(True)
                self.builder.get_object('entry_coord2_ATOM3_name' ).set_sensitive(True)

	if combobox == self.builder.get_object('combobox1'):
	    mode = combobox.get_active_text()
            
            if mode == 'Scan 1D':
		self.builder.get_object('vseparator1').hide()
		self.builder.get_object('vbox4').hide()
		self.refine_type = "1D"
            
            if mode == 'Scan 2D':
		self.builder.get_object('vseparator1').show()
		self.builder.get_object('vbox4').show()
		self.refine_type = '2D'

    def on_combobox1_changed(self, button):
        _type        = self.builder.get_object('combobox1').get_active_text()
        """ Function doc """
        if _type == 'folder - pDynamo':
            self.builder.get_object('filechooserbutton2').hide()
            self.builder.get_object('filechooserbutton1').show()
        else:
            self.builder.get_object('filechooserbutton2').show()
            self.builder.get_object('filechooserbutton1').hide()

    def geo_opt_change(self, widget):
        if self.builder.get_object('checkbutton_minimization').get_active():
            self.builder.get_object('vbox3').set_sensitive(True)
        
        else:
            self.builder.get_object('vbox3').set_sensitive(False)

    def __init__(self, EasyHybridSession = None):

        self.builder = gtk.Builder()
        if EasyHybridSession != None:
            self.project          = EasyHybridSession.project
            self.main_builder     = EasyHybridSession.builder
            self.window_control   = EasyHybridSession.window_control
            self.EasyHybridSession = EasyHybridSession
            self.EasyHybrid_ROOT   = EasyHybridSession.EasyHybrid_ROOT
            self.EasyHybrid_GUI    = EasyHybridSession.EasyHybrid_GUI 
            
            
            #      - - - importing ORCA PATH from EasyHybridConfig file. - - -        
            #-----------------------------------------------------------------------#
            try:                                                                    #
                ORCA                = EasyHybridSession.EasyHybridConfig['ORCAPATH']#
            except:                                                                 #
                ORCA = ''                                                           #
            #-----------------------------------------------------------------------#

        self.builder.add_from_file(
            os.path.join(self.EasyHybrid_GUI, 'DialogTrajectoryEnergyRefine','TrajectoryEnergyRefine.glade'))
                
        self.builder.connect_signals(self)
        self.dialog = self.builder.get_object('dialog1')

        self.window_control = WindowControl(self.builder)
        self.builder.get_object('filechooserbutton2').hide()
        
        self.builder.get_object('vseparator1').hide()
        self.builder.get_object('vbox4').hide()
	self.builder.get_object('Optimize_Geometry_frame').hide()
        self.builder.get_object('checkbutton_exclude_MM_atoms').hide()
        
        #----------------- Setup ComboBoxes -------------------------#
        combobox  = 'combobox1'         #
        
        combolist = ["Scan 1D", "Scan 2D"]#, "trj - AMBER", "dcd - CHARMM", 'xtc - GROMACS']
        self.window_control.SETUP_COMBOBOXES(combobox, combolist, 0)
        
        combobox  = 'combobox4'         #
        combolist = ["pkl", "xyz", 'pdb']#, "trj - AMBER", "dcd - CHARMM", 'xtc - GROMACS']
        self.window_control.SETUP_COMBOBOXES(combobox, combolist, 0)


        combobox = 'combobox_optimization_method'         #
        combolist = ['Conjugate Gradient', 'Steepest Descent','LBFGS']
        self.window_control.SETUP_COMBOBOXES(combobox, combolist,0)  
        
        combobox  = 'combobox_reaction_coordiante_type1'                     
        combolist = ['simple-distance', 'multiple-distance']
        self.window_control.SETUP_COMBOBOXES(combobox, combolist,0)  
        
	combobox  = 'combobox_reaction_coordiante_type2'                     
        combolist = ['simple-distance', 'multiple-distance']
        self.window_control.SETUP_COMBOBOXES(combobox, combolist,0)  
        
        self.refine_type = '1D'
        
        # QC SPIN MULTIPLICITY
        self.spinbutton = 'spinbutton2'
        config     = [0.0, 1.0,    500.0, 1.0, 0.0, 0.0]
        self.window_control.SETUP_SPINBUTTON(self.spinbutton, config)

        #if self.builder.get_object('check_opt_geometry'):
        self.builder.get_object('vbox3').set_sensitive(False)

        self.sigma_pk1_pk3 = None
        self.sigma_pk3_pk1 = None
	
	
	
	
	
	
    def Mass_weight_check(self, checkbutton):
        
        '''
        ----------------------------------------------------
                        REACTION COORDINATE 1 
        ----------------------------------------------------
        '''
        if checkbutton == self.builder.get_object('checkbutton_mass_weight'):
            try:
                name1, atom1_index, name2, atom2_index, distance_a1_a2 = import_ATOM1_ATOM2("pk1", "pk2")
                name2, atom2_index, name3, atom3_index, distance_a2_a3 = import_ATOM1_ATOM2("pk2", "pk3")
            except:
                print texto_d2d1
                return
                
            if self.builder.get_object("checkbutton_mass_weight").get_active():
                self.sigma_pk1_pk3, self.sigma_pk3_pk1 = compute_sigma_a1_a3 (name1, name3)
                
                """
                   R                    R
                    \                  /
                     A1--A2  . . . . A3
                    /                  \ 
                   R                    R
                     ^   ^            ^
                     |   |            |
                    pk1-pk2  . . . . pk3
                       d1       d2	
                
                q1 =  1 / (mpk1 + mpk3)  =  [ mpk1 * r (pk3_pk2)  -   mpk3 * r (pk1_pk2) ]
                
                """			
                #DMINIMUM =  (self.sigma_pk1_pk3 * distance_a1_a2) -(self.sigma_pk3_pk1 * distance_a2_a3*-1)
                #self.builder.get_object('entry_param_DMINIMUM1').set_text(str(DMINIMUM))
                print "\n\nUsing mass weighted restraints"
                print "Sigma pk1_pk3", self.sigma_pk1_pk3
                print "Sigma pk3_pk1", self.sigma_pk3_pk1
                #print "Estimated minimum distance",  DMINIMUM
                
            else:
                self.sigma_pk1_pk3 =  1.0
                self.sigma_pk3_pk1 = -1.0
                #DMINIMUM = distance_a1_a2 - distance_a2_a3
                #self.builder.get_object('entry_param_DMINIMUM1').set_text(str(DMINIMUM))
                print "\n\nSigma pk1_pk3 ", self.sigma_pk1_pk3
                print "Sigma pk3_pk1",      self.sigma_pk3_pk1
Exemplo n.º 6
0
class PreferencesDialog():
    """ Class doc """
    def SavePreferences(self, button):
        """ Function doc """
        atom_color = self.builder.get_object('combobox1').get_active_text()
        fixed_atom_color = self.builder.get_object(
            'combobox2').get_active_text()
        bq_color = self.builder.get_object('combobox3').get_active_text()

        QC_representations = {
            'lines': self.builder.get_object('QC_lines').get_active(),
            'sticks': self.builder.get_object('QC_sticks').get_active(),
            'spheres': self.builder.get_object('QC_spheres').get_active(),
            'dots': self.builder.get_object('QC_dots').get_active(),
        }

        FIX_representations = {
            'lines': self.builder.get_object('FIX_lines').get_active(),
            'sticks': self.builder.get_object('FIX_sticks').get_active(),
            'spheres': self.builder.get_object('FIX_spheres').get_active(),
            'dots': self.builder.get_object('FIX_dots').get_active(),
        }

        #FIX_representations = {'lines' : self.builder.get_object('FIX_lines').get_active()
        #                        }
        #
        self.EasyHybridSession.EasyHybridConfig['bg_color'] = bq_color
        self.EasyHybridSession.EasyHybridConfig['fixed'] = fixed_atom_color
        self.EasyHybridSession.EasyHybridConfig['color'] = atom_color
        self.EasyHybridSession.EasyHybridConfig['QC'] = QC_representations
        self.EasyHybridSession.EasyHybridConfig['FIX'] = FIX_representations

        self.EasyHybridSession.Save_EasyHybrid_ConfigFile()
        self.EasyHybridSession.project.SystemCheck(status=True,
                                                   PyMOL=True,
                                                   _color=True,
                                                   _cell=True,
                                                   treeview_selections=True,
                                                   ORCA_backup=False)

    def __init__(self, EasyHybridSession=None):
        """ Class initialiser """
        self.builder = gtk.Builder()

        if EasyHybridSession != None:
            self.project = EasyHybridSession.project
            self.main_builder = EasyHybridSession.builder
            self.EasyHybridSession = EasyHybridSession
            self.window_control = EasyHybridSession.window_control

        self.builder.add_from_file(
            os.path.join(EasyHybrid_GUI, 'DialogPreferences',
                         'Preferences.glade'))
        self.builder.connect_signals(self)
        self.dialog = self.builder.get_object('dialog_preferences')
        '''
		--------------------------------------------------
		-                                                -
		-	              WindowControl                  -
		-                                                -
		--------------------------------------------------
		'''
        self.window_control = WindowControl(self.builder)

        #colors = [ ]
        #colors = [
        #'actinium','darksalmon','iodine','palecyan','sodium',
        #'aluminum','dash','iridium','palegreen','splitpea',
        #'americium','deepblue','iron','paleyellow','strontium',
        #'antimony','deepolive','krypton','palladium','sulfur',
        #'aquamarine','deeppurple','lanthanum','phosphorus','tantalum',
        #'argon','deepsalmon','lawrencium','pink','teal',
        #'arsenic','deepsalmon','lead','platinum','technetium',
        #'astatine','deepteal','lightblue','plutonium','tellurium',
        #'atomic','default','lightmagenta','polonium','terbium',
        #'auto','density','lightorange','potassium','thallium',
        #'barium','deuterium','lightpink','praseodymium','thorium',
        #'berkelium','dirtyviolet','lightteal','promethium','thulium',
        #'beryllium','dubnium','lime','protactinium','tin',
        #'bismuth','dysprosium','limegreen','pseudoatom','titanium',
        #'black','einsteinium','limon','purple','tungsten',
        #'blue','erbium','lithium','purpleblue','tv_blue',
        #'bluewhite','europium','lonepair','radium','tv_green',
        #'bohrium','fermium','lutetium','radon','tv_orange',
        #'boron','firebrick','magenta','raspberry','tv_red',
        #'brightorange','fluorine','magnesium','red','tv_yellow',
        #'bromine','forest','manganese','rhenium','uranium',
        #'brown','francium','marine','rhodium','vanadium',
        #'cadmium','gadolinium','meitnerium','rubidium','violet',
        #'calcium','gallium','mendelevium','ruby','violetpurple',
        #'californium','germanium','mercury','ruthenium','warmpink',
        #'carbon','gold','molybdenum','rutherfordium','wheat',
        #'cerium','gray','neodymium','salmon','white',
        #'cesium','green','neon','samarium','xenon',
        #'chartreuse','greencyan','neptunium','sand','yellow',
        #'chlorine','grey','nickel','scandium','yelloworange',
        #'chocolate','hafnium','niobium','seaborgium','ytterbium',
        #'chromium','hassium','nitrogen','selenium','yttrium',
        #'cobalt','helium','nobelium','silicon','zinc',
        #'copper','holmium','olive','silver','zirconium',
        #'curium','hotpink','orange','skyblue'
        #'current','hydrogen','osmium','slate'
        #'cyan','indium','oxygen','smudg'
        #]

        colors = [
            'darksalmon', 'palecyan', 'palegreen', 'deepblue', 'deeppurple',
            'deepsalmon', 'deepsalmon', 'lightblue', 'lightorange',
            'lightpink', 'dirtyviolet', 'lime', 'tin', 'limegreen', 'black',
            'limon', 'purple', 'blue', 'purpleblue', 'tv_blue', 'bluewhite',
            'tv_green', 'radon', 'tv_orange', 'firebrick', 'magenta',
            'raspberry', 'tv_red', 'brightorange', 'red', 'tv_yellow',
            'forest', 'brown', 'marine', 'violet', 'ruby', 'violetpurple',
            'warmpink', 'wheat', 'gray', 'salmon', 'white', 'green',
            'greencyan', 'sand', 'yellow', 'yelloworange', 'chocolate',
            'olive', 'hotpink', 'orange', 'skyblue', 'slate', 'cyan', 'smudg'
        ]

        fixed_colors = [
            'black', 'grey10', 'grey20', 'grey30', 'grey40', 'grey50',
            'grey60', 'grey70', 'grey80', 'grey90', 'white'
        ]

        bg_color = ['white', 'grey', 'black']

        #----------------- Setup ComboBoxes -------------------------#
        combobox = 'combobox1'  #
        self.window_control.SETUP_COMBOBOXES(combobox, colors, 0)
        #------------------------------------------------------------#

        #----------------- Setup ComboBoxes -------------------------#
        combobox = 'combobox2'  #
        self.window_control.SETUP_COMBOBOXES(combobox, fixed_colors, 0)
        #------------------------------------------------------------#

        #----------------- Setup ComboBoxes -------------------------#
        combobox = 'combobox3'  #
        self.window_control.SETUP_COMBOBOXES(combobox, bg_color, 0)
Exemplo n.º 7
0
class MOPACSEnergyDialog():
    def runMOPACEnergy(self, button):
        """ Function doc """

        parameters = {}
        parameters['methods'] = None
        parameters['overwrite_files'] = True  #AUX          = True        ,
        parameters['trajectory'] = None
        parameters['charge'] = 0  #charge       = charge      ,
        parameters['multiplicity'] = 1  #multiplicity = multiplicity,
        parameters['mopac_AUX'] = True  #AUX          = True        ,
        parameters['mopac_1SCF'] = True  #single_point = True        ,
        parameters['mopac_MOZYME'] = True  #MOZYME       = MOZYME      ,
        parameters['mopac_BONDS'] = False  #BONDS        = False       ,
        parameters['mopac_LARGE'] = True  #PDBOUT       = False       ,
        parameters['mopac_PDBOUT'] = True  #PDBOUT       = False       ,
        parameters['mopac_SOLV'] = False  #SOLV         = SOLV        ,
        parameters['mopac_ESP'] = None  #ESP          = ESP         ,
        parameters['mopac_RSOLV'] = None  #RSOLV        = RSOLV       ,
        parameters['mopac_QMMM'] = False  #QMMM         = QMMM        )
        parameters['tmpfile_outpath'] = None
        parameters['logfile_outpath'] = None
        parameters['log_file_name'] = None
        parameters['trajectory_type'] = "SCAN"
        parameters['mopac_path'] = '/opt/mopac/MOPAC2016.exe'

        #---------------------------------------------------------------------------------------------------------------#
        #                                              Time and log file                                                #
        #---------------------------------------------------------------------------------------------------------------#
        localtime = time.asctime(time.localtime(time.time()))  #
        localtime = localtime.split()  #
        #  0     1    2       3         4                                                                               #
        #[Sun] [Sep] [28] [02:32:04] [2014]                                                                             #
        log_file_name = 'MOPAC_Energy_' + localtime[1] + '_' + localtime[
            2] + '_' + localtime[3] + '_' + localtime[4] + '.log'  #
        parameters['log_file_name'] = log_file_name  #
        #---------------------------------------------------------------------------------------------------------------#

        #-----------------------------------------------------------------------------------------------#
        #                                      folder and datapath                                      #
        #-----------------------------------------------------------------------------------------------#
        data_path = self.EasyHybridSession.project.settings['data_path']  #
        #
        #traj          = self.builder.get_object('umbrella_entry_TRAJECTORY').get_text()                #
        if not os.path.exists(os.path.join(data_path, 'MOPAC_files')):  #
            os.mkdir(os.path.join(data_path, 'MOPAC_files'))  #
        logfile_outpath = os.path.join(data_path, 'MOPAC_files')  #
        #
        #
        if not os.path.exists(os.path.join(logfile_outpath, 'tmp')):  #
            os.mkdir(os.path.join(logfile_outpath, 'tmp'))  #
        tmpfile_outpath = os.path.join(logfile_outpath, 'tmp')  #
        parameters['tmpfile_outpath'] = tmpfile_outpath  #
        parameters['logfile_outpath'] = logfile_outpath  #
        #-----------------------------------------------------------------------------------------------#

        #-----------------------------------------------------------------------------------------------#
        #                                      LOG file - optional                                      #
        #-----------------------------------------------------------------------------------------------#
        scanLogFile = self.builder.get_object(
            'filechooserbutton3').get_filename()  #
        #
        if scanLogFile == None:  #
            #parameters   = False                                                                       #
            #summary      = False                                                                       #
            parameters['original_system_summary'] = False  #
            parameters['original_scan_log'] = False  #
        else:  #
            parameters['original_scan_log'] = ParseProcessLogFile(
                scanLogFile)  #
            parameters['original_system_summary'] = ParseSummaryLogFile(
                scanLogFile)  #
        #-----------------------------------------------------------------------------------------------#

        #-----------------------------------------------------------------------------------------------#
        if self.builder.get_object('checkbutton4').get_active() == True:
            parameters['overwrite_files'] = False  #
        else:  #
            parameters['overwrite_files'] = True  #
        #-----------------------------------------------------------------------------------------------#

        #-----------------------------------------------------------------------------------------------#
        charge = self.builder.get_object(
            'spinbutton_charge').get_value_as_int()  #
        charge = str(charge)  #
        multiplicity = self.builder.get_object(
            'spinbutton_multiplicity').get_value_as_int()  #
        multiplicity = 'Singlet'  #
        #
        parameters['charge'] = charge  #
        parameters['multiplicity'] = multiplicity  #
        #-----------------------------------------------------------------------------------------------#

        #-----------------------------------------------------------------------------------------------#
        #                                      mopac path                                               #
        #-----------------------------------------------------------------------------------------------#
        parameters['mopac_path'] = self.builder.get_object(
            'mopac_path').get_text()  #
        print parameters['mopac_path']
        #-----------------------------------------------------------------------------------------------#

        if self.builder.get_object('checkbutton1').get_active() == True:
            SOLV = True
            ESP = self.builder.get_object('entry2').get_text()
            RSOLV = self.builder.get_object('entry3').get_text()
            parameters['mopac_SOLV'] = True
            parameters['mopac_ESP'] = ESP
            parameters['mopac_RSOLV'] = RSOLV

        else:
            parameters['mopac_SOLV'] = False
            parameters['mopac_ESP'] = None
            parameters['mopac_RSOLV'] = None

        if self.builder.get_object('checkbutton2').get_active() == True:
            MOZYME = True
            parameters['mopac_MOZYME'] = MOZYME

        else:
            MOZYME = False
            parameters['mopac_MOZYME'] = MOZYME

        if self.builder.get_object('checkbutton3').get_active() == True:
            QMMM = True
            parameters['mopac_QMMM'] = QMMM
        else:
            QMMM = False
            parameters['mopac_QMMM'] = QMMM
        #-----------------------------------------------------------------------------------------------

        trajectory_type = self.builder.get_object(
            'combobox2').get_active_text()
        # SCAN
        # SCAN-2D
        parameters['trajectory_type'] = trajectory_type

        #---------------------------------------------------------------------------#
        system = self.project.system  #
        parameters['system'] = system  #
        trajectory = self.builder.get_object(
            'filechooserbutton1').get_filename()  #
        parameters['trajectory'] = trajectory  #
        #
        methods = self.builder.get_object('entry1').get_text()  #
        methods = methods.split()  #
        parameters['methods'] = methods  #
        system.Summary()  #
        #---------------------------------------------------------------------------#

        print charge, multiplicity, methods  #, trajectory

        if trajectory_type == 'SCAN':
            self.run_MOPAC_SCAN_refine(parameters=parameters)

        if trajectory_type == 'SCAN-2D':
            self.run_MOPAC_SCAN2D_refine(parameters=parameters)

    def run_MOPAC_SCAN_refine(self, parameters=None):
        """ Function doc """
        '''
        parameters['methods']
        parameters['trajectory']
        parameters['charge'      ]
        parameters['multiplicity']
        parameters['mopac_AUX'   ]
        parameters['mopac_1SCF'  ]
        parameters['mopac_MOZYME']
        parameters['mopac_BONDS' ]
        parameters['mopac_PDBOUT']
        parameters['mopac_SOLV'  ]
        parameters['mopac_ESP'   ]
        parameters['mopac_RSOLV' ]
        parameters['mopac_QMMM'  ]
        parameters['tmpfile_outpath']
        parameters['logfile_outpath']
        parameters['log_file_name']
        '''
        logs = {}
        for method in parameters['methods']:

            logs[method] = {
                'energy': [],
                'energyNorm': [],
            }

            trajectory = SystemGeometryTrajectory(parameters['trajectory'],
                                                  parameters['system'],
                                                  mode="r")
            n = 0

            while trajectory.RestoreOwnerData():
                MOPAC_system = pDynamoToMOPAC(system=parameters['system'])

                keywords = MOPAC_system.DefineMopacKeys(
                    methods=method,
                    charge=parameters['charge'],
                    multiplicity=parameters['multiplicity'],
                    AUX=parameters['mopac_AUX'],
                    single_point=parameters['mopac_1SCF'],
                    MOZYME=parameters['mopac_MOZYME'],
                    BONDS=parameters[
                        'mopac_BONDS'],  # False                          
                    PDBOUT=parameters[
                        'mopac_PDBOUT'],  # False                          
                    SOLV=parameters['mopac_SOLV'],
                    ESP=parameters['mopac_ESP'],
                    RSOLV=parameters['mopac_RSOLV'],
                    QMMM=parameters['mopac_QMMM'])

                energy = MOPAC_system.Energy(
                    fileout=os.path.join(parameters['tmpfile_outpath'],
                                         'system' + str(n) + '.mop'),
                    mopac_path=parameters['mopac_path'],
                    overwrite_files=parameters['overwrite_files'])

                logs[method]['energy'].append(float(energy))
                logs[method]['energyNorm'].append(
                    float(energy) - logs[method]['energy'][0])
                n += 1

            #-------------------------------------------------------#
            #                   LOG FILE SUMMARY                    #
            #-------------------------------------------------------#

            header = '----------------------------- EasyHybrid - MOPAC Energy Refine ---------------------------------'
            #header += "\nMETHOD                 =%20s  "     % (parameters['actual_method'] )
            header += "\nTOTAL CHARGE           =%20s  " % (str(
                parameters['charge']))
            header += "\nMULTIPLICITYE          =%20s  " % (str(
                parameters['multiplicity']))

            if parameters['mopac_MOZYME']:
                header += "\nMOZYME                 =%20s  " % ("True")
            else:
                header += "\nMOZYME                 =%20s  " % ("False")

            if parameters['mopac_SOLV']:
                header += "\nSOLV                   =%20s  " % ('True')  #
                header += "\nmopac_ESP              =%20s  " % (str(
                    parameters['mopac_ESP']))
                header += "\nmopac_RSOLV            =%20s  " % (str(
                    parameters['mopac_RSOLV']))
            else:
                header += "\nSOLV                   =%20s  " % ('False')  #

            header += "\n------------------------------------------------------------------------------------------------"
            header += "\nTRAJECTORY             =%20s  " % (
                parameters['trajectory'])
            #header += "\nORIGINAL LOG           =%20s  "     % ("True")
            header += "\n------------------------------------------------------------------------------------------------"

            #trajetoryFile = parameters['trajectory']
            string = header
            #string += 'trajectoy:    ' + trajetoryFile + '\n'
            #string += 'keywords:     ' + keywords      + '\n'
            string += '\n'

            for method in logs:
                string += " %15s " % (method)
            string += '\n'

            for i in range(0, n):  #len(logs['AM1']['energyNorm'])):
                for method in logs:
                    string += " %15.5f " % (logs[method]['energyNorm'][i])

                string += '\n'

            print string
            arq = open(
                os.path.join(parameters['logfile_outpath'],
                             parameters['log_file_name']), 'w')
            arq.writelines(string)
            arq.close()

    def run_MOPAC_SCAN2D_refine(self, parameters):
        """ Function doc """
        #--------------------------------------------------------------#
        pass  #
        trajectory_files = os.listdir(parameters['trajectory'])  #
        trajectory_files2 = []  #
        #--------------------------------------------------------------#
        for File in trajectory_files:  #
            File2 = File.split('.')  #
            #
            if File2[-1] == 'pkl':  #
                trajectory_files2.append(File)  #
        #--------------------------------------------------------------#

        for method in parameters['methods']:
            i_table = []
            j_table = []
            n = 1
            energy_table = {(0, 0): 0.0}

            print method
            #--------------------------------------------------------------------------------------------------------------------------------#
            for File in trajectory_files2:  #
                File2 = File.split('.')  #
                File2 = File2[0].split('_')  #
                i = int(File2[1])  #
                j = int(File2[2])  #
                #
                system = parameters['system']  #
                system.coordinates3 = Unpickle(
                    os.path.join(parameters['trajectory'], File))  #
                MOPAC_system = pDynamoToMOPAC(system=system)  #
                #
                keywords = MOPAC_system.DefineMopacKeys(
                    methods=method,  #
                    charge=parameters['charge'],  #
                    multiplicity=parameters['multiplicity'],  #
                    AUX=parameters['mopac_AUX'],  #
                    single_point=parameters['mopac_1SCF'],  #
                    MOZYME=parameters['mopac_MOZYME'],  #
                    BONDS=parameters[
                        'mopac_BONDS'],  # False                                #
                    PDBOUT=parameters[
                        'mopac_PDBOUT'],  # False                                #
                    SOLV=parameters['mopac_SOLV'],  #
                    ESP=parameters['mopac_ESP'],  #
                    RSOLV=parameters['mopac_RSOLV'],  #
                    QMMM=parameters['mopac_QMMM'])  #
                #
                #

                energy = MOPAC_system.Energy(
                    fileout=os.path.join(
                        parameters['tmpfile_outpath'],
                        'system_' + method + '_' + str(i) + '_' + str(j) +
                        '.mop',
                    ),
                    mopac_path=parameters['mopac_path'],
                    overwrite_files=parameters['overwrite_files'])  #
                energy_table[(i, j)] = float(energy)  #
                i_table.append(i)  #
                j_table.append(j)  #
                print n, i, j, energy  #
                n = n + 1  #
            #--------------------------------------------------------------------------------------------------------------------------------#

            #---------------------------------------------------------#
            import numpy as np  #
            i_table = np.array(i_table)
            j_table = np.array(j_table)

            i_max = i_table.max()
            j_max = j_table.max()

            X = 0 * np.random.rand(i_max + 1, j_max + 1)
            #---------------------------------------------------------#

            #print X
            text = ''

            for i in range(0, i_max + 1):
                text = text + "\nMATRIX1 "
                for j in range(0, j_max + 1):
                    X[i][j] = energy_table[(i, j)]
                    #text = text + "%18.8f  " % (X[i][j])

            X_norm = X - np.min(X)

            parameters['energy_matrix'] = X
            parameters['energy_matrix_norm'] = X_norm
            parameters['actual_method'] = method

            parameters['matrix_i'] = i_max
            parameters['matrix_j'] = j_max

            self.build_SCAN2D_log(parameters)

    def build_SCAN2D_log(self, parameters):
        """ Function doc """
        header = '----------------------------- EasyHybrid - MOPAC Energy Refine ---------------------------------'
        header += "\nMETHOD                 =%20s  " % (
            parameters['actual_method'])
        header += "\nTOTAL CHARGE           =%20s  " % (str(
            parameters['charge']))
        header += "\nMULTIPLICITYE          =%20s  " % (str(
            parameters['multiplicity']))

        if parameters['mopac_MOZYME']:
            header += "\nMOZYME                 =%20s  " % ("True")
        else:
            header += "\nMOZYME                 =%20s  " % ("False")

        if parameters['mopac_SOLV']:
            header += "\nSOLV                   =%20s  " % ('True')  #
            header += "\nmopac_ESP              =%20s  " % (str(
                parameters['mopac_ESP']))
            header += "\nmopac_RSOLV            =%20s  " % (str(
                parameters['mopac_RSOLV']))
        else:
            header += "\nSOLV                   =%20s  " % ('False')  #

        header += "\n------------------------------------------------------------------------------------------------"
        header += "\nRCOORD1 size           =%20s  " % (str(
            parameters['matrix_i']))
        header += "\nRCOORD2 size           =%20s  " % (str(
            parameters['matrix_j']))

        if parameters['original_scan_log']:
            header += "\nRCOORD1                =%20s  " % (
                parameters['original_scan_log'][1]['xlabel'])
            header += "\nRCOORD2                =%20s  " % (
                parameters['original_scan_log'][1]['ylabel'])

        header += "\nTRAJECTORY             =%20s  " % (
            parameters['trajectory'])
        #header += "\nORIGINAL LOG           =%20s  "     % ("True")
        header += "\n------------------------------------------------------------------------------------------------"

        text_matrix1 = '\n\n'
        for i in range(0, parameters['matrix_i'] + 1):
            text_matrix1 += "\nMATRIX1 "
            for j in range(0, parameters['matrix_j'] + 1):
                text_matrix1 += "%18.8f  " % (
                    parameters['energy_matrix'][i][j])

        text_matrix1 += '\n\n'
        for i in range(0, parameters['matrix_i'] + 1):
            text_matrix1 += "\nMATRIX2 "
            for j in range(0, parameters['matrix_j'] + 1):
                text_matrix1 += "%18.8f  " % (
                    parameters['energy_matrix_norm'][i][j])

        #print parameters['original_scan_log']
        #print parameters['original_scan_log'][1]
        #print parameters['original_scan_log'][1]['R1'    ]

        if parameters['original_scan_log']:
            print parameters['original_scan_log'][1]['R1']
            #parameters['original_scan_log']

            if parameters['original_scan_log']:
                R1 = parameters['original_scan_log'][1]['R1']
                R2 = parameters['original_scan_log'][1]['R2']

                try:
                    text_matrix1 += '\n\n'
                    for i in range(0, parameters['matrix_i'] + 1):
                        text_matrix1 += "\nRCOORD1  "
                        for j in range(0, parameters['matrix_j'] + 1):
                            print i, j
                            text_matrix1 += "%18.8f  " % (R1[i][j])

                    text_matrix1 += '\n\n'
                    for i in range(0, parameters['matrix_i'] + 1):
                        text_matrix1 += "\nRCOORD2  "
                        for j in range(0, parameters['matrix_j'] + 1):
                            text_matrix1 += "%18.8f  " % (R2[i][j])
                except:
                    pass

        #---------------------------------------------------------------------------------------------------------------
        #                                              Time and log file
        #---------------------------------------------------------------------------------------------------------------
        localtime = time.asctime(time.localtime(time.time()))
        localtime = localtime.split()
        #  0     1    2       3         4
        #[Sun] [Sep] [28] [02:32:04] [2014]
        log_file_name = "Scan2D_" + parameters[
            'actual_method'] + '_' + localtime[1] + '_' + localtime[
                2] + '_' + localtime[3] + '_' + localtime[4] + '.log'  #
        #--------------------------------------------------------------------------------------------------------------
        arq = open(os.path.join(parameters['trajectory'], log_file_name), 'w')
        arq.writelines(header)
        arq.writelines(text_matrix1)
        arq.close()
        #---------------------------------------------------------------------------------------------------------------

    def on_checkbutton_continue_an_incomplete_scan_toggled(self, button):
        """ Function doc """
        if self.builder.get_object('checkbutton4').get_active():
            pass

#print 'and here'
#self.builder.get_object('entry2').set_sensitive(True)
#self.builder.get_object('entry3').set_sensitive(True)
        else:
            pass
            #self.builder.get_object('entry2').set_sensitive(False)
            #self.builder.get_object('entry3').set_sensitive(False)

    def on_checkbutton1_toggled(self, button):
        """ Function doc """
        if self.builder.get_object('checkbutton1').get_active():
            self.builder.get_object('entry2').set_sensitive(True)
            self.builder.get_object('entry3').set_sensitive(True)
        else:
            self.builder.get_object('entry2').set_sensitive(False)
            self.builder.get_object('entry3').set_sensitive(False)

    def on_combobox1_changed(self, button):
        _type = self.builder.get_object('combobox1').get_active_text()
        """ Function doc """
        if _type == 'folder - pDynamo':
            self.builder.get_object('filechooserbutton2').hide()
            self.builder.get_object('filechooserbutton1').show()
        else:
            self.builder.get_object('filechooserbutton2').show()
            self.builder.get_object('filechooserbutton1').hide()

    def __init__(self, EasyHybridSession=None):

        self.builder = gtk.Builder()
        if EasyHybridSession != None:
            self.project = EasyHybridSession.project
            self.main_builder = EasyHybridSession.builder
            self.window_control = EasyHybridSession.window_control
            self.EasyHybridSession = EasyHybridSession
            self.EasyHybrid_ROOT = EasyHybridSession.EasyHybrid_ROOT
            self.EasyHybrid_GUI = EasyHybridSession.EasyHybrid_GUI

            #      - - - importing ORCA PATH from EasyHybridConfig file. - - -
            #-----------------------------------------------------------------------#
            try:  #
                ORCA = EasyHybridSession.EasyHybridConfig['ORCAPATH']  #
            except:  #
                ORCA = ''  #
            #-----------------------------------------------------------------------#

        self.builder.add_from_file(
            os.path.join(self.EasyHybrid_GUI, 'MOPACEnergy',
                         'MOPACEnergy.glade'))

        self.builder.connect_signals(self)
        self.dialog = self.builder.get_object('dialog1')

        self.window_control = WindowControl(self.builder)
        # QC SPIN CHARGE
        spinbutton = 'spinbutton_charge'
        config = [0.0, -500.0, 500.0, 1.0, 0.0, 0.0]
        self.window_control.SETUP_SPINBUTTON(spinbutton, config)

        # QC SPIN MULTIPLICITY
        spinbutton = 'spinbutton_multiplicity'
        config = [0.0, 1.0, 500.0, 1.0, 0.0, 0.0]
        self.window_control.SETUP_SPINBUTTON(spinbutton, config)

        self.builder.get_object('filechooserbutton2').hide()

        #----------------- Setup ComboBoxes ----------------------------------------------#
        combobox = 'combobox1'  #                                                  #
        combolist = ["folder - pDynamo"
                     ]  #, "trj - AMBER", "dcd - CHARMM", 'xtc - GROMACS']#
        self.window_control.SETUP_COMBOBOXES(combobox, combolist, 0)  #
        combobox = 'combobox2'  #                                                  #
        combolist = ["SCAN", 'SCAN-2D'
                     ]  #, "trj - AMBER", "dcd - CHARMM", 'xtc - GROMACS']#
        #---------------------------------------------------------------------------------#
        self.window_control.SETUP_COMBOBOXES(combobox, combolist, 0)

        # Hide unfinished widgets
        self.builder.get_object('checkbutton3').set_sensitive(False)