首页 > 其他分享 >PDB renumbering

PDB renumbering

时间:2023-09-16 12:00:45浏览次数:38  
标签:cont renumbering self args start file PDB row

#usage python renumber.py -i xxx.pdb -a -r > new.pdb

class Pdb(object):
    """ Object that allows operations with protein files in PDB format. """

    def __init__(self, file_cont = [], pdb_code = ""):
        self.cont = []
        self.atom = []
        self.hetatm = []
        self.fileloc = ""
        if isinstance(file_cont, list):
            self.cont = file_cont[:]
        elif isinstance(file_cont, str):
            try:
                with open(file_cont, 'r') as pdb_file:
                    self.cont = [row.strip() for row in pdb_file.read().split('\n') if row.strip()]
            except FileNotFoundError as err:
                print(err)

        if self.cont:
            self.atom = [row for row in self.cont if row.startswith('ATOM')]
            self.hetatm = [row for row in self.cont if row.startswith('HETATM')]
            self.conect = [row for row in self.cont if row.startswith('CONECT')]

    def renumber_atoms(self, start=1):
        """ Renumbers atoms in a PDB file. """
        out = list()
        count = start
        for row in self.cont:
            if len(row) > 5:
                if row.startswith(('ATOM', 'HETATM', 'TER', 'ANISOU')):
                    num = str(count)
                    while len(num) < 5:
                        num = ' ' + num
                    row = '%s%s%s' %(row[:6], num, row[11:])
                    count += 1
            out.append(row)
        return out


    def renumber_residues(self, start=1, reset=False):
        """ Renumbers residues in a PDB file. """
        out = list()
        count = start - 1
        cur_res = ''
        cur_chain = ''
        for row in self.cont:
            if len(row) > 25:
                if row.startswith(('ATOM', 'HETATM', 'TER', 'ANISOU')):
                    next_res = row[22:27].strip() # account for letters in res., e.g., '1A'
                    next_chain = row[21]
                    
                    if next_chain != cur_chain:
                        count = start - 1
                        cur_chain = next_chain
                    if next_res != cur_res:
                        count += 1
                        cur_res = next_res
                    num = str(count)
                    while len(num) < 3:
                        num = ' ' + num
                    new_row = '%s%s' %(row[:23], num)
                    while len(new_row) < 29:
                        new_row += ' '
                    xcoord = row[30:38].strip()
                    while len(xcoord) < 9:
                        xcoord = ' ' + xcoord
                    row = '%s%s%s' %(new_row, xcoord, row[38:])
                    if row.startswith('TER') and reset:
                        count = start - 1
            out.append(row)
        return out


if __name__ == '__main__':
    import argparse

    parser = argparse.ArgumentParser(
        description='Renumber residues in a pdb file',
        formatter_class=argparse.RawTextHelpFormatter
    )

    parser.add_argument('-i', '--input', help='Input PDB file')
    parser.add_argument('-s', '--start', help='Number of the first residue in the renumbered file (default = 1)')
    parser.add_argument('-a', '--atoms' ,action='store_true', help='Renumbers atoms')
    parser.add_argument('-r', '--residues', action='store_true', help='Renumbers residues')
    parser.add_argument('-c', '--chainreset', action='store_true', help='Resets the residue renumbering after encountering a new chain.')
    parser.add_argument('-v', '--version', action='version', version='v. 1.0')

    args = parser.parse_args()

    if not args.input:
        print('{0}\nPlease provide an input file.\n{0}'.format(50* '-'))
        parser.print_help()
        quit()

    if not args.start:
        start = 1
    else:
        start = int(args.start)

    if not args.atoms and not args.residues:
        print('{0}\nPlease provide at least the --atoms or --residues flag.\n{0}'.format(50* '-'))
        parser.print_help()
        quit()

    pdb1 = Pdb(args.input)
    if args.atoms:
        pdb1.cont = pdb1.renumber_atoms(start=start)
    if args.residues:
        pdb1.cont = pdb1.renumber_residues(start=start, reset=args.chainreset)

    for line in pdb1.cont:
        print(line)

 

标签:cont,renumbering,self,args,start,file,PDB,row
From: https://www.cnblogs.com/kehan/p/17706547.html

相关文章

  • 如何使用Oracle Enterprise Manager Database Express连接到PDB数据库
    1.问题重复弹出登录框,无法登陆关闭登录框,显示invalidcontainername2.解决方法参考链接为PDB启动EMExpress要为PDB启动EMExpress,请确保PDB以读/写模式打开,然后尝试本主题中描述的以下方法之一(按所示顺序):连接到包含PDB的CDB的CDB$ROOT容器,并发出以下SQL......
  • Oracle PDB配置SID访问
    1、lsnrctlstatus 确保PDB容器监听正常 2、确保PDB容器读写正常sqlplus/assysdbashowpdbs; 3、修改tnsname.ora文件cd /opt/oracle/product/19c/dbhome_1/network/adminvitnsnames.ora(追加,保持原有内容不变,在后面追加下面内容)ORA19CPDB=(DESCRIPTION......
  • oracle 12 PDB切换
    Oracle12c开始支持PLUGGABLEDATABASE,并且提供了一个方法在CDB和PDB之间切换。 1.使用showpdbs可以确认当前有哪些PDB?[sql] viewplaincopy  SQL> show pdbs        CON_ID CON_NAME           OPEN MODE  RESTRICTED  --......
  • 使用pdb调试openstack (How to debug openstack using pdb )
    终于摸索出了一个调试openstack的简单方法,使用pdb进行单步调试,对于分析代码很有帮助。注意,这个方法只适用于用devstack安装的openstack。调试主要是使用了一个脚本,这个脚本不记得是从哪下载的了,是用来重启使用devstack安装的openstack的各个服务的,后来,我又结合devstack的stack.sh和......
  • Python 调试工具PDB的基本使用
    用法pdb工具是Python自带的调试工具,可以在命令行下进行代码调试。使用示例:importpdbnum_a=1num_b=2pdb.set_trace()sum=num_a+num_b运行效果如图:常见命令break或b:设置断点continue或c:继续执行程序list或l:查看当前行的代码段step或s:进入函数......
  • 当tempdb.mdf文件过大时,可以采取以下步骤来处理
    当tempdb.mdf文件过大时,可以采取以下步骤来处理:查找导致tempdb.mdf增长的原因:首先,需要确定是什么导致了tempdb.mdf文件的增长。可以使用SQLServer的动态管理视图(DMV)来监视tempdb数据库的使用情况,例如sys.dm_db_file_space_usage和sys.dm_db_session_space_usage。这些视图可以帮......
  • JDBC p6 ApDBUtils
    ApDBUtils引出问题分析:关闭connection之后,resultSet结果集无法使用。resultSet不利于数据的管理示意图:自己完成封装packagecom.hspedu.jdbc.datasource;importorg.junit.jupiter.api.Test;importjava.sql.*;importjava.util.ArrayList;publiccla......
  • adg备库中pdb缺少tempfile文件
    在备库中,切换到对应的pdb,添加temp文件查询temp文件,没找到selectnamefromv$tempfile;添加temp文件altersessionsetcontainer=pdb;ALTERTABLESPACETEMPADDTEMPFILE'+DATA';参考&感谢https://www.cnblogs.com/jyzhao/p/17392231.html......
  • 关于调试gmsh源码过程中产生的gmsh.dll和gmsh.pdb文件无法匹配,进而导致无法载入pdb文
    省流版由于ALL_BUILD会将对应于gmsh.exe的调试文件gmsh.pdb附在对应于gmsh.dll的调试文件gmsh.pdb文件,进而导致gmsh.pdb无法和gmsh.dll文件进行版本匹配,进而导致无法载入,进而导致无法调试gmsh源码;解决办法:将对应于gmsh.exe的gmsh.pdb改为其他任意命名即可;或者仅仅生成gms......
  • Oracle19C PDB中普通用户可以通过sqlplus scott/tiger连接吗
     Oracle19CPDB中普通用户可以通过sqlplusscott/tiger连接吗 先说结论,目前我还没找到方式。研究了挺久,通过百度,通过mos上搜索,也想通过触发器来实现,发现都不行。 先说sys用户,是可以的。通过设置ORACLE_PDB_SID这个环境变量,可以实现sys直接登录后连接到指定的PDB上。[o......