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

news/2024/10/3 11:08:50 标签: python, 生物信息学

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(array)

方法二:

# 打开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(array)


http://www.niftyadmin.cn/n/5688250.html

相关文章

可视化图表与源代码显示配置项及页面的动态调整功能分析

可视化图表与源代码显示配置项及页面的动态调整功能分析 文章目录 可视化图表与源代码显示配置项及页面的动态调整功能分析1.分析图表源代码2.分析源代码显示功能**完整代码参考&#xff1a;** 3.分析源代码显示及动态调整**完整代码参考&#xff1a;** 4.分析代码编辑器及运行…

Cypress自动化测试实战:构建高效的前端测试体系

在快速迭代的软件开发环境中&#xff0c;前端自动化测试是保证代码质量和用户体验的重要手段。Cypress作为一款功能强大的前端自动化测试工具&#xff0c;凭借其丰富的特性、直观的API和高效的测试执行速度&#xff0c;赢得了众多开发者和测试团队的青睐。本文将深入探讨Cypres…

Vue2 + ElementUI + axios + VueRouter入门

之前没有pc端开发基础&#xff0c;工作需要使用若依框架进行了一年的前端开发.最近看到一个视频框架一步步集成&#xff0c;感觉颇受启发&#xff0c;在此记录一下学习心得。视频链接:vue2element ui 快速入门 环境搭建和依赖安装 安装nodejs安装Vue Cli使用vue create proje…

【Kubernetes】常见面试题汇总(五十二)

目录 116. K8S 集群服务暴露失败&#xff1f; 117.外网无法访问 K8S 集群提供的服务&#xff1f; 特别说明&#xff1a; 题目 1-68 属于【Kubernetes】的常规概念题&#xff0c;即 “ 汇总&#xff08;一&#xff09;~&#xff08;二十二&#xff09;” 。 题目 69-…

php函数积累

对称函数 isset 判断数组arr中是否存在键key 返回值true/false isset(name,$arr) unset 删除数组中的键 需存在key不然抛出异常 unset($arr[name]) json_encode 数据转json格式 json_encode($arr) 一般形式 指定字符编码形式 json_decode json格式转原有数据格式 json_d…

IM项目------网关子服务

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言所需模块长连接管理模块新增连接管理通过用户ID获取长连接通过长连接获取用户ID和会话ID删除连接管理 服务器搭建业务代码编写 前言 入口网关子服务主要负责三…

薄膜凸起和开裂是同一种应力导致的吗?

知识星球里的学员问&#xff1a;我们产线上薄膜出了质量问题&#xff0c;都一概归结为应力过大。麻烦讲讲应力的种类&#xff0c;以及不同种类的应力会造成哪些薄膜问题&#xff1f; 内应力的种类&#xff1f; 内应力的分类很多&#xff0c;如果我们按作用的效果来分&#xff…

CSP-S 2022 T1假期计划

CSP-S 2022 T1假期计划 先思考暴力做法&#xff0c;题目需要找到四个不相同的景点&#xff0c;那我们就枚举这四个景点&#xff0c;判断它们之间的距离是否符合条件&#xff0c;条件是任意两个点之间的距离是否大于 k k k&#xff0c;所以我们需要求出任意两点之间的距离。常用…