コード例 #1
0
ファイル: p3pdbdev.py プロジェクト: emkailu/pat3dem
def main():
    progname = os.path.basename(sys.argv[0])
    usage = (
        progname
        + """ [options] <pdb1, pdb2>
	Output pdb1, whose bfactor is replaced by CA deviation between pdb1 and pdb2.
	"""
    )

    args_def = {}
    parser = argparse.ArgumentParser()
    parser.add_argument("pdb", nargs="*", help="specify two aligned pdb files")
    args = parser.parse_args()

    if len(sys.argv) == 1:
        print "usage: " + usage
        print "Please run '" + progname + " -h' for detailed options."
        sys.exit(1)
        # get default values
    for i in args_def:
        if args.__dict__[i] == None:
            args.__dict__[i] = args_def[i]
            #
    if len(args.pdb) != 2:
        sys.exit("Please input two pdb files!")
    pdb1, pdb2 = args.pdb
    pdb1_CA, pdb1_CA27 = p3p.pdb_CA(pdb1)
    pdb2_CA, pdb2_CA27 = p3p.pdb_CA(pdb2)
    pdb_same = set(pdb1_CA27).intersection(pdb2_CA27)
    basename1 = os.path.basename(os.path.splitext(pdb1)[0])
    basename2 = os.path.basename(os.path.splitext(pdb2)[0])
    with open(basename1 + "_dev_" + basename2 + ".pdb", "w") as w_pdb:
        for i in pdb1_CA:
            if i[:27] in pdb_same:
                for j in pdb2_CA:
                    if j[:27] == i[:27]:
                        break
                (x1, y1, z1), (x2, y2, z2) = p3p.get_coord(i), p3p.get_coord(j)
                dev = math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2 + (z1 - z2) ** 2)
                i = list(i)
                i[60:66] = "{:6.2f}".format(dev)
                w_pdb.write("".join(i))
コード例 #2
0
ファイル: p3locres2bf.py プロジェクト: emkailu/pat3dem
def main():
	progname = os.path.basename(sys.argv[0])
	usage = progname + """ [options] <localres.mrc>
	Get local resolution from localres.mrc and transfer to bfactors in pdb.
	"""
	
	args_def = {'apix':1.25, 'pdb':''}	
	parser = argparse.ArgumentParser()
	parser.add_argument("mrc", nargs='*', help="specify localres.mrc to be processed")
	parser.add_argument("-a", "--apix", type=float, help="specify apix, by default {}".format(args_def['apix']))
	parser.add_argument("-p", "--pdb", type=str, help="specify the pdb, by default {}".format(args_def['pdb']))
	args = parser.parse_args()
	
	if len(sys.argv) == 1:
		print "usage: " + usage
		print "Please run '" + progname + " -h' for detailed options."
		sys.exit(1)
	# get default values
	for i in args_def:
		if args.__dict__[i] == None:
			args.__dict__[i] = args_def[i]
	# read the pdb
	with open(args.pdb) as p:
		lines = p.readlines()
	ATM = []
	for i in lines:
		if i[:6].strip() in ['ATOM', 'HETATM']:
			ATM += [i]	
	basename = os.path.basename(os.path.splitext(args.pdb)[0])
	a = args.apix
	with open(basename + '_locres2bf.pdb', 'w') as w_pdb:
		d = EMData(args.mrc[0])
		for i in ATM:
			(x, y, z) = p3p.get_coord(i)
			x, y, z = int(x/a), int(y/a), int(z/a)
			res = d.get_value_at(x, y, z)
			i = list(i)
			i[60:66] = '{:6.2f}'.format(res)
			w_pdb.write(''.join(i))