• 用PyMOL展示配体和受体相互作用的原子和氢键


     

    转载于 https://mp.weixin.qq.com/s/P62sjqhSTxmWVicrEAk-RQ

    为了简化展示过程,我们设计了一个pml脚本 (脚本内有很详细的解释),只需要修改脚本里面受体和配体的名字,然后在PyMOL的命令行界面输入PyMOL> run display.pml即可获得展示结果。当然这个脚本也可以使用程序generatePmlForHbond.py生成。

     ############################################################
    ###All one needs to do is replacing:                        ##
    ###  * Protein structure file: E:docking1hsg_prot.pdb     ##
    ###  * Protein name: 1hsg                                   ##
    ###  * Docking result file: E:dockingindinavir.pdbqt      ##
    ###  * Docking result name (normally ligand name): indinavir##
     ############################################################
    # The following 4 lines: 
        # 1. load protein structure and rename it
        # 2. add hydrogen (`h_add` uses a primitive algorithm to add hydrogens onto a molecule.)
        # 3. hide protein display
        # 4. show cartoon display for protein
    load E:yunpandocking1hsg_prot.pdb, 1hsg
    h_add 1hsg
    hide everything, 1hsg
    show cartoon, 1hsg
    cmd.spectrum("count", selection="1hsg", byres=1)
    
    # The following 6 lines: 
        # 1. load ligand structure and rename it
        # 2. add hydrogen
        # 3. hide ligand display
        # 4. show ligand in sticks mode
        # 5. Set width of stick to 0.15
        # 6. Set atom color: C-white;N-blue;O-red
    load E:yunpandockingindinavir.pdbqt, indinavir
    h_add indinavir
    hide everything, indinavir
    show sticks, indinavir
    set stick_radius, 0.15
    util.cbaw indinavir
    
    # The following 1 line:
        # 1. Select metal ions
    select metals, symbol mg+ca+fe+zn
    
    # The following 2 lines:
        # 1. Set hydrogen donator
        # 2. Set hydrogen accrptor 
        # `select` creates a named selection from an atom selection. 
        # `select name, (selection)`
    select h_donator,  (elem n,o and (neighbor hydro))
    select h_acceptor, (elem o or (elem n and not (neighbor hydro)))
    
    # The following 4 lines:
        # 1. Create link between ligand_h_acceptor and prot_h_donator  within given distance 3.2
        # 2. Create link between ligand_h_donator  and prot_h_acceptor within given distance 3.2
        #    Set filter 3.6 for ideal geometry and filter 3.2 for minimally acceptable geometry
        # 3. Set red color for ligand_h_acceptor and prot_h_donator 
        # 4. Set blue color for ligand_h_donator  and prot_h_acceptor
        # `distance` creates a new distance object between two selections. It will display all distances within the cutoff. Distance is also used to make hydrogen bonds like `distance hbonds, all, all, 3.2, mode=2`.
        # distance [ name [, selection1 [, selection2 [, cutoff [, mode ]]]]]
    distance LaccPdon, (indinavir and h_acceptor), (1hsg and h_donator), 3.2
    distance LdonPacc, (indinavir and h_donator), (1hsg and h_acceptor), 3.2
    color red, LaccPdon
    color blue, LdonPacc
    #distance Fe_C20, (fep and name C20), (heme and name fe))
    
    # The following 6 lines:
        # 1. Select non-hydro atoms of ligands
        # 2. Select protein atoms within 5A of selected atoms in last step
        # 3. Label alpha-c(ca) of selected residues with residue name and residue position
        # 4. Set label color back
        # 5. Set background white
        # 6. Hidden hydrogenes
    select sele, indinavir & not hydro
    select sele, byres (sele expand 5) & 1hsg
    one_letter ={'VAL':'V', 'ILE':'I', 'LEU':'L', 'GLU':'E', 'GLN':'Q', 
    'ASP':'D', 'ASN':'N', 'HIS':'H', 'TRP':'W', 'PHE':'F', 'TYR':'Y',    
    'ARG':'R', 'LYS':'K', 'SER':'S', 'THR':'T', 'MET':'M', 'ALA':'A',    
    'GLY':'G', 'PRO':'P', 'CYS':'C'}
    label name ca & sele, "%s-%s" % (one_letter[resn],resi)
    bg white
    set label_color, black
    hide (hydro)
    
    # The follwing 5 lines
        # 1. Comment out this line
        # 2. Create an object `surrounding_res` to represent selected protein atoms
        #    `create`: creates a new molecule object from a selection. It can also be used to create states in an   existing object. 
        #    `create name, (selection)`
        # 3. Display created surface
        # 4. Set color for surrounding_res
        # 5. Set transparency for surrounding_res
        #    Transparency is used to adjust the transparency of Surfaces and Slices.    
        #    `set transparency, F, selection`
    #show surface, 1hsg
    create surrounding_res, sele
    show surface, surrounding_res
    color grey80, surrounding_res
    set transparency, 0.5, surrounding_res

    此外还可以使用如下脚本(list_hbonds.py)输出相互作用的原子及其位置。

    # Copyright (c) 2010 Robert L. Campbell
    from pymol import cmd
    
    def list_hb(selection,selection2=None,cutoff=3.2,angle=55,mode=1,hb_list_name='hbonds'):
        """
        USAGE
    
        list_hb selection, [selection2 (default=None)], [cutoff (default=3.2)],
                           [angle (default=55)], [mode (default=1)],
                           [hb_list_name (default='hbonds')]
    
        The script automatically adds a requirement that atoms in the
        selection (and selection2 if used) must be either of the elements N or
        O.
    
        If mode is set to 0 instead of the default value 1, then no angle
        cutoff is used, otherwise the angle cutoff is used and defaults to 55
        degrees.
    
        e.g.
        To get a list of all H-bonds within chain A of an object
          list_hb 1abc & c. a &! r. hoh, cutoff=3.2, hb_list_name=abc-hbonds
    
        To get a list of H-bonds between chain B and everything else:
          list_hb 1tl9 & c. b, 1tl9 &! c. b
    
        """
        cutoff=float(cutoff)
        angle=float(angle)
        mode=float(mode)
        # ensure only N and O atoms are in the selection
        selection = selection + " & e. n+o"
        if not selection2:
            hb = cmd.find_pairs(selection,selection,mode=mode,cutoff=cutoff,angle=angle)
        else:
            selection2 = selection2 + " & e. n+o"
            hb = cmd.find_pairs(selection,selection2,mode=mode,cutoff=cutoff,angle=angle)
    
        # sort the list for easier reading
        hb.sort(lambda x,y:(cmp(x[0][1],y[0][1])))
    
        for pairs in hb:
            cmd.iterate("%s and index %s" % (pairs[0][0],pairs[0][1]), 'print "%1s/%3s`%s/%-4s " % (chain,resn,resi,name),')
            cmd.iterate("%s and index %s" % (pairs[1][0],pairs[1][1]), 'print "%1s/%3s`%s/%-4s " % (chain,resn,resi,name),')
            print "%.2f" % cmd.distance(hb_list_name,"%s and index %s" % (pairs[0][0],pairs[0][1]),"%s and index %s" % (pairs[1][0],pairs[1][1]))
    
    #cmd.extend("list_hb",list_hb)
    #if __name__ == "__main__":
    cmd.load("E:/yunpan/docking/1hsg_prot.pdb", "1hsg")
    cmd.h_add("(1hsg)")
    cmd.load("E:/yunpan/docking/indinavir.pdbqt","indinavir")
    cmd.h_add("(indinavir)")
    
    h_donator  = "elem n,o & (neighbor hydro)"
    h_acceptor = "elem o | (elem n & !(neighbor hydro))"
    
    lacc = "indinavir & (elem o | (elem n & !(neighbor hydro)))"
    ldon = "indinavir & (elem n,o & (neighbor hydro))"
    pacc = "1hsg & (elem o | (elem n & !(neighbor hydro)))"
    pdon = "1hsg & (elem n,o & (neighbor hydro))"
    
    list_hb(ldon, pacc, hb_list_name="l2p_hbonds")
    list_hb(lacc, pdon, hb_list_name="p2l_hbonds")

    输出结果如下:

    PyMOL>run E:/docking/list_hbonds.py
    B/MK1`902/N4    B/GLY`27/O     3.03
    B/MK1`902/O4    B/GLY`27/O     3.16
    B/MK1`902/O2    A/ASP`25/OD1   2.77
    B/MK1`902/O2    B/ASP`25/OD1   2.63

    看上去比显示的氢键少了三个,这是因为我们在第二个函数中使用了H-键角度限制,如果在调用时给定参数list_hb(mode=0)则会获得一致结果。

           H-bond结果展示。第一张图为运行display.pml后的结果,蓝色虚线为氢键;第二张图为运行list_hbonds.py后的结果, 黄色虚线为氢键(覆盖了之前的蓝色)。可以通过点选LaccPdonLdonPaccl2p_hbonds显示不同的氢键。

    展示疏水表面

    # color_h
    # -------
    
    # PyMOL command to color protein molecules according to the Eisenberg hydrophobicity scale
    
    #
    # Source: http://us.expasy.org/tools/pscale/Hphob.Eisenberg.html
    # Amino acid scale: Normalized consensus hydrophobicity scale
    # Author(s): Eisenberg D., Schwarz E., Komarony M., Wall R.
    # Reference: J. Mol. Biol. 179:125-142 (1984)
    #
    # Amino acid scale values:
    #
    # Ala:  0.620
    # Arg: -2.530
    # Asn: -0.780
    # Asp: -0.900
    # Cys:  0.290
    # Gln: -0.850
    # Glu: -0.740
    # Gly:  0.480
    # His: -0.400
    # Ile:  1.380
    # Leu:  1.060
    # Lys: -1.500
    # Met:  0.640
    # Phe:  1.190
    # Pro:  0.120
    # Ser: -0.180
    # Thr: -0.050
    # Trp:  0.810
    # Tyr:  0.260
    # Val:  1.080
    #
    # Usage:
    # color_h (selection)
    #
    from pymol import cmd
    
    def color_h(selection='all'):
            s = str(selection)
        print s
            cmd.set_color('color_ile',[0.996,0.062,0.062])
            cmd.set_color('color_phe',[0.996,0.109,0.109])
            cmd.set_color('color_val',[0.992,0.156,0.156])
            cmd.set_color('color_leu',[0.992,0.207,0.207])
            cmd.set_color('color_trp',[0.992,0.254,0.254])
            cmd.set_color('color_met',[0.988,0.301,0.301])
            cmd.set_color('color_ala',[0.988,0.348,0.348])
            cmd.set_color('color_gly',[0.984,0.394,0.394])
            cmd.set_color('color_cys',[0.984,0.445,0.445])
            cmd.set_color('color_tyr',[0.984,0.492,0.492])
            cmd.set_color('color_pro',[0.980,0.539,0.539])
            cmd.set_color('color_thr',[0.980,0.586,0.586])
            cmd.set_color('color_ser',[0.980,0.637,0.637])
            cmd.set_color('color_his',[0.977,0.684,0.684])
            cmd.set_color('color_glu',[0.977,0.730,0.730])
            cmd.set_color('color_asn',[0.973,0.777,0.777])
            cmd.set_color('color_gln',[0.973,0.824,0.824])
            cmd.set_color('color_asp',[0.973,0.875,0.875])
            cmd.set_color('color_lys',[0.899,0.922,0.922])
            cmd.set_color('color_arg',[0.899,0.969,0.969])
            cmd.color("color_ile","("+s+" and resn ile)")
            cmd.color("color_phe","("+s+" and resn phe)")
            cmd.color("color_val","("+s+" and resn val)")
            cmd.color("color_leu","("+s+" and resn leu)")
            cmd.color("color_trp","("+s+" and resn trp)")
            cmd.color("color_met","("+s+" and resn met)")
            cmd.color("color_ala","("+s+" and resn ala)")
            cmd.color("color_gly","("+s+" and resn gly)")
            cmd.color("color_cys","("+s+" and resn cys)")
            cmd.color("color_tyr","("+s+" and resn tyr)")
            cmd.color("color_pro","("+s+" and resn pro)")
            cmd.color("color_thr","("+s+" and resn thr)")
            cmd.color("color_ser","("+s+" and resn ser)")
            cmd.color("color_his","("+s+" and resn his)")
            cmd.color("color_glu","("+s+" and resn glu)")
            cmd.color("color_asn","("+s+" and resn asn)")
            cmd.color("color_gln","("+s+" and resn gln)")
            cmd.color("color_asp","("+s+" and resn asp)")
            cmd.color("color_lys","("+s+" and resn lys)")
            cmd.color("color_arg","("+s+" and resn arg)")
    cmd.extend('color_h',color_h)
    
    def color_h2(selection='all'):
            s = str(selection)
        print s
        cmd.set_color("color_ile2",[0.938,1,0.938])
        cmd.set_color("color_phe2",[0.891,1,0.891])
        cmd.set_color("color_val2",[0.844,1,0.844])
        cmd.set_color("color_leu2",[0.793,1,0.793])
        cmd.set_color("color_trp2",[0.746,1,0.746])
        cmd.set_color("color_met2",[0.699,1,0.699])
        cmd.set_color("color_ala2",[0.652,1,0.652])
        cmd.set_color("color_gly2",[0.606,1,0.606])
        cmd.set_color("color_cys2",[0.555,1,0.555])
        cmd.set_color("color_tyr2",[0.508,1,0.508])
        cmd.set_color("color_pro2",[0.461,1,0.461])
        cmd.set_color("color_thr2",[0.414,1,0.414])
        cmd.set_color("color_ser2",[0.363,1,0.363])
        cmd.set_color("color_his2",[0.316,1,0.316])
        cmd.set_color("color_glu2",[0.27,1,0.27])
        cmd.set_color("color_asn2",[0.223,1,0.223])
        cmd.set_color("color_gln2",[0.176,1,0.176])
        cmd.set_color("color_asp2",[0.125,1,0.125])
        cmd.set_color("color_lys2",[0.078,1,0.078])
        cmd.set_color("color_arg2",[0.031,1,0.031])
            cmd.color("color_ile2","("+s+" and resn ile)")
            cmd.color("color_phe2","("+s+" and resn phe)")
            cmd.color("color_val2","("+s+" and resn val)")
            cmd.color("color_leu2","("+s+" and resn leu)")
            cmd.color("color_trp2","("+s+" and resn trp)")
            cmd.color("color_met2","("+s+" and resn met)")
            cmd.color("color_ala2","("+s+" and resn ala)")
            cmd.color("color_gly2","("+s+" and resn gly)")
            cmd.color("color_cys2","("+s+" and resn cys)")
            cmd.color("color_tyr2","("+s+" and resn tyr)")
            cmd.color("color_pro2","("+s+" and resn pro)")
            cmd.color("color_thr2","("+s+" and resn thr)")
            cmd.color("color_ser2","("+s+" and resn ser)")
            cmd.color("color_his2","("+s+" and resn his)")
            cmd.color("color_glu2","("+s+" and resn glu)")
            cmd.color("color_asn2","("+s+" and resn asn)")
            cmd.color("color_gln2","("+s+" and resn gln)")
            cmd.color("color_asp2","("+s+" and resn asp)")
            cmd.color("color_lys2","("+s+" and resn lys)")
            cmd.color("color_arg2","("+s+" and resn arg)")
    cmd.extend('color_h2',color_h2)

    将上面的脚本存储为color_h.py,在PyMOL界面运行File-Run-color_h.py,在命令行输入>PyMOl color_hShow surface

  • 相关阅读:
    在 ML2 中 enable local network
    实践 Neutron 前的两个准备工作
    配置 linux-bridge mechanism driver
    为 Neutron 准备物理基础设施(II)
    两张图总结 Neutron 架构
    Service Plugin / Agent
    详解 ML2 Core Plugin(I)
    #define用法集锦[修正版]
    socketpair理解
    判断单链表是否存在环,判断两个链表是否相交-的相关讨论
  • 原文地址:https://www.cnblogs.com/xiaojikuaipao/p/7256890.html
Copyright © 2020-2023  润新知