用python 写了一个求空间俩点之间的距离的脚本
2012-04-11 17:08
246 查看
import math
L1=['104','32','249','177']
L2=['191','538','317','795']
L3=['735','346','542','429']
L4=['434','277','659','132']
L5=['866','569','46','763']
def Search_data(store_pdb,List_data):
f_pdb=open(store_pdb,'r')
lines=f_pdb.readlines()
f_pdb.close()
space_coordinate_1=[]
space_coordinate_2=[]
for line in lines:
line_data=line.split()
if List_data[0] in line_data[4:] and 'P' in line_data[2:]:
space_coordinate_1.append(line_data[-5:-2])
continue
elif List_data[1] in line_data[4:] and 'P' in line_data[2:]:
space_coordinate_1.append(line_data[-5:-2])
continue
elif List_data[2] in line_data[4:] and 'P' in line_data[2:]:
space_coordinate_2.append(line_data[-5:-2])
continue
elif List_data[3] in line_data[4:] and 'P' in line_data[2:]:
space_coordinate_2.append(line_data[-5:-2])
continue
space_coordinate=(space_coordinate_1,space_coordinate_2)
return space_coordinate
def Get_distance(store_pdb,List_data):
one_tuple_data=Search_data(store_pdb,List_data)
point_list_one=one_tuple_data[0]
point_list_two=one_tuple_data[1]
x1=(float(point_list_one[0][0])+float(point_list_one[1][0]))/2
y1=(float(point_list_one[0][1])+float(point_list_one[1][1]))/2
z1=(float(point_list_one[0][2])+float(point_list_one[1][2]))/2
x2=(float(point_list_two[0][0])+float(point_list_two[1][0]))/2
y2=(float(point_list_two[0][1])+float(point_list_two[1][1]))/2
z2=(float(point_list_two[0][2])+float(point_list_two[1][2]))/2
d=math.sqrt((x1-x2)**2+(y1-y2)**2+(z1-z2)**2)-20
return d
def distance_files(store_pdb):
L=[L1,L2,L3,L4,L5]
for i in range(0,len(L)):
distance_file=open('distance files %d'%(i+1),'a+')
d=Get_distance(store_pdb,L[i])
distance_file.write(str(d)+'\n')
distance_file.close()
if __name__=="__main__":
distance_files('1.pdb')
其中列表L为源文件中要找的第几行的数据,每一行中都有空间的一个点的坐标,srore_pdb为存放数据的pdb文件,list_data为上面的列表
L1=['104','32','249','177']
L2=['191','538','317','795']
L3=['735','346','542','429']
L4=['434','277','659','132']
L5=['866','569','46','763']
def Search_data(store_pdb,List_data):
f_pdb=open(store_pdb,'r')
lines=f_pdb.readlines()
f_pdb.close()
space_coordinate_1=[]
space_coordinate_2=[]
for line in lines:
line_data=line.split()
if List_data[0] in line_data[4:] and 'P' in line_data[2:]:
space_coordinate_1.append(line_data[-5:-2])
continue
elif List_data[1] in line_data[4:] and 'P' in line_data[2:]:
space_coordinate_1.append(line_data[-5:-2])
continue
elif List_data[2] in line_data[4:] and 'P' in line_data[2:]:
space_coordinate_2.append(line_data[-5:-2])
continue
elif List_data[3] in line_data[4:] and 'P' in line_data[2:]:
space_coordinate_2.append(line_data[-5:-2])
continue
space_coordinate=(space_coordinate_1,space_coordinate_2)
return space_coordinate
def Get_distance(store_pdb,List_data):
one_tuple_data=Search_data(store_pdb,List_data)
point_list_one=one_tuple_data[0]
point_list_two=one_tuple_data[1]
x1=(float(point_list_one[0][0])+float(point_list_one[1][0]))/2
y1=(float(point_list_one[0][1])+float(point_list_one[1][1]))/2
z1=(float(point_list_one[0][2])+float(point_list_one[1][2]))/2
x2=(float(point_list_two[0][0])+float(point_list_two[1][0]))/2
y2=(float(point_list_two[0][1])+float(point_list_two[1][1]))/2
z2=(float(point_list_two[0][2])+float(point_list_two[1][2]))/2
d=math.sqrt((x1-x2)**2+(y1-y2)**2+(z1-z2)**2)-20
return d
def distance_files(store_pdb):
L=[L1,L2,L3,L4,L5]
for i in range(0,len(L)):
distance_file=open('distance files %d'%(i+1),'a+')
d=Get_distance(store_pdb,L[i])
distance_file.write(str(d)+'\n')
distance_file.close()
if __name__=="__main__":
distance_files('1.pdb')
其中列表L为源文件中要找的第几行的数据,每一行中都有空间的一个点的坐标,srore_pdb为存放数据的pdb文件,list_data为上面的列表
相关文章推荐
- 终于用PYTHON作了一个实用于工作的脚本啦----通过邮件定时发送服务器空闲空间
- 一个环形公路,上面有N个站点,A1, ..., AN,其中Ai和Ai+1之间的距离为Di,AN和A1之间的距离为D0。 高效的求第i和第j个站点之间的距离,空间复杂度不超过O(N)。
- 一个环形公路,上面有N个站点,A1, ..., AN,其中Ai和Ai+1之间的距离为Di,AN和A1之间的距离为D0。 高效的求第i和第j个站点之间的距离,空间复杂度不超过O(N)。
- 一个用于踩点获取信息的python脚本
- 一个批量更改文件名的Python脚本
- 【A ByteOf Python2.7】第10章 解决问题——编写一个Python脚本
- python-贴吧图片爬取的一个小脚本
- 简明Python教程之编写一个Pyhton脚本
- 基于七牛Python SDK写的一个同步脚本
- 用Python写一个ftp下载脚本
- 怎样做一个脚本使得访问主空间超时后自动跳转到另一备份网站??
- 一个批量更改文件名的Python脚本
- 一个显示排序过程的PYTHON脚本
- 老男孩教育每日一题-2017-04-17:使用Shell或Python写一个脚本,CPU使用率超过80%或硬盘超过85%邮件报警
- 一个批量更改文件名的Python脚本
- 一个python基于hostname关联zabbix模版的自动化脚本
- 一个批量更改文件名的Python脚本
- 一个简单比较oracle两个用户下表数据差异的python脚本
- Unity3D计算角色与物体之间的距离来触发动画【脚本】
- 闲来无事写了一个用于批量验证代理的Python小脚本