当前位置: 首页 > news >正文

解析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.0648325754Code 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:# 将每行按空白字符分割,并将数值转换为 floatvalues = [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}")

http://www.lryc.cn/news/454960.html

相关文章:

  • vue.js组建开发
  • D29【python 接口自动化学习】- python基础之输入输出与文件操作
  • jQuery——平滑翻页
  • 二叉树--DS
  • State of ChatGPT ---- ChatGPT的技术综述
  • 构建高效新闻推荐系统:Spring Boot的力量
  • 如何使用ipopt进行非线性约束求目标函数最小值(NLP非线性规划)内点法(inner point method)
  • 【Unity学习笔记】解决疑似升级Win11或使用Unity6导致Unity旧版本无法打开的问题
  • 回归分析在数据挖掘中的应用简析
  • 【Node.js】worker_threads 多线程
  • 贪心算法c++
  • 【STM32】 TCP/IP通信协议(3)--LwIP网络接口
  • 15分钟学 Python 第39天:Python 爬虫入门(五)
  • 使用Pytorch构建自定义层并在模型中使用
  • 学习记录:js算法(五十六):从前序与中序遍历序列构造二叉树
  • qt使用QDomDocument读写xml文件
  • Oracle架构之表空间详解
  • springboot整合seata
  • 鸿蒙开发(NEXT/API 12)【二次向用户申请授权】程序访问控制
  • docker export/import 和 docker save/load 的区别
  • 明星周边销售网站开发:SpringBoot技术全解析
  • STM32+ADC+扫描模式
  • R语言绘制散点图
  • 安装最新 MySQL 8.0 数据库(教学用)
  • 微信小程序开发-配置文件详解
  • TCP/UDP初识
  • 【大数据】在线分析、近线分析与离线分析
  • 【unity进阶知识9】序列化字典,场景,vector,color,Quaternion
  • 传奇GOM引擎架设好进游戏后提示请关闭非法外挂,重新登录,如何处理?
  • OpenCV视频I/O(15)视频写入类VideoWriter之标识视频编解码器函数fourcc()的使用