解析TMalign文本文件中的转换矩阵

TM-align 将两个蛋白质结构通过旋转和位移对齐后**:**

TMalign test1.pdb  test2.pdb -m mtx.txt

输出转换矩阵,文件内容为:

------ The rotation matrix to rotate Chain_1 to Chain_2 ------
m               t[m]        u[m][0]        u[m][1]        u[m][2]
0       0.7438770778   0.9928096071   0.1017845140   0.0629999746
1       3.6134235067   0.0559138503   0.0710345055  -0.9959054877
2      18.3578484222  -0.1058429281   0.9922671070   0.0648325754

Code for rotating Structure A from (x,y,z) to (X,Y,Z):
for(i=0; i<L; i++)
{
   X[i] = t[0] + u[0][0]*x[i] + u[0][1]*y[i] + u[0][2]*z[i];
   Y[i] = t[1] + u[1][0]*x[i] + u[1][1]*y[i] + u[1][2]*z[i];
   Z[i] = t[2] + u[2][0]*x[i] + u[2][1]*y[i] + u[2][2]*z[i];
}
  • 旋转矩阵 u 是一个 3x3 的矩阵,用于定义结构 A 到结构 B 的旋转。
  • 平移向量 t 是一个长度为 3 的向量,用于定义结构 A 到结构 B 的平移。

解析为numpy array代码

方法一:

import numpy as np

# 打开mtx.txt文本,读入数据
text = ""
with open("mtx.txt") as f:
    lines = f.readlines()

# 1. 取数据行
data_lines = lines[2:5]

# 初始化一个空列表来存储每一行的数值
data = []

# 遍历每一行,提取数值
for line in data_lines:
    # 将每行按空白字符分割,并将数值转换为 float
    values = [float(x) for x in line.split()[1:5]]
    data.append(values)

# 转换为 numpy 数组
array = np.array(data)

print(f"转换矩阵:{array}")

t = array[:,0] # 平移向量
u = array[:,1:] # 旋转矩阵
print(f"平移向量:{t}")
print(f"平移旋转:{u}")

方法二:

# 打开mtx.txt文本,读入数据
with open("mtx.txt") as f:
    lines = f.readlines()

# 1. 取数据行
data_lines = lines[2:5]

# 2. 去掉每行的第一个索引,留下数值部分
cleaned_lines = []
for line in data_lines:
    # 使用split分割并去掉每行的第一个元素(索引),保留数值部分
    cleaned_line = ' '.join(line.split()[1:5])
    cleaned_lines.append(cleaned_line)


print(f"cleaned_lines:{cleaned_lines}")

# 3. 将数值部分拼接成一个字符串,用于 fromstring 解析
data_string = ' '.join(cleaned_lines)
print("data_string")
print(data_string)

# 4. 使用 numpy.fromstring 解析数值字符串
array = np.fromstring(data_string, sep=' ')

# 5. 将生成的数组reshape为合适的形状 (3, 4)
array = array.reshape(3, 4)
print(array)

### 简洁形式
array = np.fromstring(' '.join(l[2:] for l in lines[2:5]), 
                  dtype=float, sep=' ').reshape((3,4))

print(f"转换矩阵:{array}")

t = array[:,0] # 平移向量
u = array[:,1:] # 旋转矩阵
print(f"平移向量:{t}")
print(f"平移旋转:{u}")
相关推荐
m0_748235951 小时前
Python大数据可视化:基于Python的王者荣耀战队的数据分析系统设计与实现_flask+hadoop+spider
hadoop·python·flask
Dyan_csdn1 小时前
【Python项目】基于Python的Web漏洞挖掘系统
网络·python·安全·web安全
Minner-Scrapy2 小时前
DApp 开发入门指南
开发语言·python·web app
&小刘要学习&2 小时前
anaconda不显示jupyter了?
python·jupyter
jerry-892 小时前
jupyterhub_config配置文件内容
python
奔跑吧邓邓子2 小时前
【Python爬虫(36)】深挖多进程爬虫性能优化:从通信到负载均衡
开发语言·爬虫·python·性能优化·负载均衡·多进程
学长学姐我该怎么办3 小时前
年前集训总结python
python
量化投资技术3 小时前
【量化科普】Sharpe Ratio,夏普比率
python·量化交易·量化·量化投资·qmt·miniqmt
yanglamei19623 小时前
基于Python+Django+Vue的旅游景区推荐系统系统设计与实现源代码+数据库+使用说明
vue.js·python·django
虚假程序设计3 小时前
python用 PythonNet 从 Python 调用 WPF 类库 UI 用XAML
python·ui·wpf