蛋白质PDB文件读取C++代码

VTK C++实战:从PDB文件到蛋白质三维可视化完整开发指南 科学可视化是连接原始数据与直观洞察的关键技术,其核心在于将复杂数据转化为可交互的图形表示。VTK(Visualization Toolkit)作为一套强大的开源可视化系统,通过其管线式架构,为数据处理、几何生成和渲染提供了完整的解决方案。在生物信息学与结构生物学领域,PDB文件作为存储蛋白质、核酸等生物大分子三维结构的标准格式,其可视化对于理解分子构象、功能及相互作用至关重要。利用VTK内置的vtkPDBReader和vtkProteinRibbonFilter等专业组件,开发者可以高效地将原子坐标文本数据 阅读详情

在生物信息学中,PDB数据库是非常重要的蛋白质结构数据库。PDB数据文件的读取是进行蛋白质结构相关预测的重要步骤!下面给出了简单的PDB文件读取的C++代码,以供参考:


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <sstream>
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

class Residue {
public:
	vector<double*> atomxyzs;
	vector<string> atominfos;	// each element for example : "ATOM      1  N   GLU    98    "
	int caind;
	int cbind;
	int res_pos;
	int orig_res_pos;

	Residue(vector<double*> _atomxyzs, vector<string> _atominfos, int _caind, int _cbind, int _res_pos, int _orig_res_pos){
		atomxyzs = _atomxyzs;
		atominfos = _atominfos;
		caind = _caind;
		cbind = _cbind;
		res_pos = _res_pos;
		orig_res_pos = _orig_res_pos;
	}
};

class Protein{
private:
	string pdbpath;				// in
	vector<Residue> residues;	// out

public:
	Protein(string _pdbpath){
		pdbpath = _pdbpath;

		readPDB();
	}

	int size(){
		return residues.size();
	}

	Residue getIthResidue(int i){
		return residues[i];
	}

	int getIthResidueOriginalIndexInProt(int i){
		return residues[i].orig_res_pos;
	}

	double* getIthResidueCAXYZ(int i){
		return residues[i].atomxyzs[residues[i].caind];
	}

	double* getIthResidueCBXYZ(int i){
		return residues[i].atomxyzs[residues[i].cbind];
	}

	vector<Residue> getResidues(){
		return residues;
	}

	void save(vector<Residue> _residues, string savepath){
		ofstream fout(savepath);
		for (int i = 0; i < _residues.size(); i++){
			Residue res = _residues[i];
			for (int j = 0 ; j < res.atominfos.size(); j++){
				char temp[1000];

				string atominfo = res.atominfos[j];	// "ATOM      1  N   GLU    98    "
				double* xyz = res.atomxyzs[j];	//"  66.677"
				char xstr[9];
				char ystr[9];
				char zstr[9];
				sprintf(xstr, "%8.3f", xyz[0]);
				sprintf(ystr, "%8.3f", xyz[1]);
				sprintf(zstr, "%8.3f", xyz[2]);
				string useless = "  1.00  0.00";
				fout << atominfo << xstr << ystr << zstr << useless << endl;
			}
		}

		fout.close();
	}
	
	/*char* formatDouble(double v, int ch_num){
		char tmp[64];
		sprintf(tmp, "%8.3f %8.3f %8.3f\n", x[i][0], x[i][1], x[i][2]);
	}*/

private:
	void readPDB(){
		vector<int> atomindex;
		vector<string> atominfos;
		vector<double*> points;
		int ca_pos_in_res = 0;
		int cb_pos_in_res = 0;

		int pre_index = -9999999;
		ifstream fin(pdbpath);
		string line;
		getline(fin, line);
		string lastline(line);
		bool isFirstATOM = true;
		bool isContainCA = false;
		int tmp_pos = 0;
		int res_pos = 1;
		int atom_pos = 1;
		while (fin.good()){
			if (line.compare(0, 3, "TER")==0)
				break;
			if (line.compare(0, 4, "ATOM")==0){
				char cstr[50];
				double x = 0.0;
				strcpy(cstr, (line.substr(30, 8)).c_str());
				sscanf(cstr, "%lf", &x);

				double y = 0.0;
				strcpy(cstr, (line.substr(38, 8)).c_str());
				sscanf(cstr, "%lf", &y);

				double z = 0.0;
				strcpy(cstr, (line.substr(46, 8)).c_str());
				sscanf(cstr, "%lf", &z);

				double* xyz = new double[3];
				xyz[0] = x;
				xyz[1] = y;
				xyz[2] = z;

				string atominfo = line.substr(0, 30);	
				
				int now_index = -999999;
				strcpy(cstr, (line.substr(22, 4)).c_str());
				sscanf(cstr, "%d", &now_index);

				if (line.compare(13, 3, "CA ")==0){
					isContainCA = true;
					ca_pos_in_res = tmp_pos;

					if (isFirstATOM){
						pre_index = now_index;
					}
				}

				if (line.compare(13, 3, "CB ")==0){
					cb_pos_in_res = tmp_pos;
				}

				if (now_index != pre_index){
					if (isContainCA){
						if (pre_index != -9999999){
							Residue tmpResidue(points, atominfos, ca_pos_in_res, cb_pos_in_res, res_pos, pre_index);
							residues.push_back(tmpResidue);
							res_pos++;
						}
						points.clear();
						points.push_back(xyz);
						atominfos.clear();
						atominfos.push_back(atominfo);

						tmp_pos = 0;
						isContainCA = false;
						if (line.compare(13, 3, "CA ")==0){
							isContainCA = true;
						}
					}else{
						if (isFirstATOM){
							points.push_back(xyz);
							atominfos.push_back(atominfo);
						}
					}
					pre_index = now_index;
				}else{
					points.push_back(xyz);
					atominfos.push_back(atominfo);
				}

				isFirstATOM = false;

				tmp_pos++;
			}

			lastline = line;
			getline(fin, line);
		}

		if (isContainCA || lastline.length() >= 16 || lastline.compare(13, 3, "CA ")==0){
			Residue tmpResidue(points, atominfos, ca_pos_in_res, cb_pos_in_res, res_pos, pre_index);
			residues.push_back(tmpResidue);
		}
		
		fin.close();
	}
};


PDB多重身份解析:蛋白质数据库、Oracle可插拔数据库与程序调试文件 PDB作为技术领域常见的缩写,在不同场景下具有截然不同的含义。在结构生物学中,PDB(Protein Data Bank)是存储蛋白质三维结构的核心数据库,包含原子坐标等关键数据。数据库领域则指Oracle的可插拔数据库(Pluggable Database),实现多租户架构的资源隔离。开发调试场景下,PDB文件(Program Database)承载着Windows程序的调试符号信息。理解这些概念的区别对技术实践至关重要,比如通过Biopython库操作蛋白质PDB数据,或使用Visual Studio配 阅读详情

相关推荐

Acellera-proteinprepare:蛋白质预处理工具详解与应用

蛋白质预处理是计算生物学和分子模拟中的关键步骤,涉及加氢、质子化状态调整和缺失残基处理等技术。Acellera-proteinprepare作为Python生态中的专业工具,通过自动化这些繁琐步骤,显著提高了工作效率。其核心原理依赖于OpenBabel和RDKit等化学信息学工具,支持多种分子力场如Amber和CHARMM。在药物发现和结构生物学研究中,该工具能快速准备蛋白质结构用于分子动力学模拟,特别适用于GPCR等复杂蛋白体系。通过合理配置pH值和氢键优化参数,研究人员可以针对不同生理环境(如溶酶体或线

weixin_42548708的博客 309

c++可视化界面_生物信息学分析实用小技巧(二):蛋白质可视化

PyMOL可视化蛋白质写在前面的上次推文介绍了如何用多种方法批量快速下载高通量测序数据,主要介绍了Aspera的用法和axel用法。这里再额外提一句,Aspera的使用需要足够的学习,学会如何解决报错,如何解决网络协议问题。 这次我再介绍一个简单使用的软件——PyMOL的使用,昨天晚上,我的好朋友反馈给我说这个软件教程密密麻麻一堆,不知道如何下手。因为她的任务是做蛋白质结构...

weixin_39604897的博客 690

药物对接仿真软件:Rosetta_(1).Rosetta软件概述

创建模块文件在目录下创建一个新的C++文件,例如。实现模块功能在模块文件中实现自定义的功能。public:// 获取评分函数// 创建任务工厂// 创建任务// 获取侧链集合// 调整侧链// 注册模块选项// 注册模块// 注册模块编译模块将自定义模块文件添加到Rosetta的编译系统中。可以通过编辑文件,添加自定义模块的路径和文件名。在重新编译Rosettamake -j4创建协议文件在目录下创建一个新的XML协议文件,例如。定义协议步骤。

kkchenjj的博客 803

PDB文件概说

  文/玄魂 .PDB文件,全称为“程序数据库”文件。我们使用它(更确切的说是看到它被应用)大多数场景是调试应用程序。目前我们对.PDB文件的普遍认知是它存储了被编译文件的调试信息,作为符号文件存在。那么,它具体包含哪些内容呢?在调试过程中是怎样发挥作用的呢?我们有没有办法去操作这个文件呢? 1. PDB文件内容 .PDB文件的内部格式,微软并没有公开,现在仍然是一个秘密,但是它提供了相关...

weixin_33721427的博客 624

reflector:C++ 的反射系统(从 PDB 文件中提取信息)

反射器 C++ 反射系统(从 PDB 文件中提取信息)更多信息: :

读取PDB文件

读取PDB中重原子坐标,并以一定格式输出

微软提供的解析 PDB 文件的源代码的使用方法

微软提供的解析 PDB 文件的源代码的使用方法: 管理员启动 CMD, 输入: regsvr32.exe “C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\DIA SDK\bin\msdia140.dll” 注意路径不同. 在 F:\VS2019\DIA SDK\Samples\DIA2Dump 找到源代码, 编译可用. ...

Aaron的博客 2231

使用matlab读写PDB文件:这两个程序接受并输出各种PDB文件格式的数据-matlab开发

这两个程序都使用数据结构来存储有关 PDB 的信息。 我发现这些程序对于处理PDB和可视化3D点信息都是有用的 -- 用法示例:绘制 3IJU.pdb 的原子 -- PDBdata = pdb2mat('3IJU.pdb'); % 从 PDB 文件读入数据plot3(PDBdata.X, PDBdata.Y, PDBdata.Z, '.'); % 绘制数据的 3D 图-- 用法示例:将 3IJU.pdb 的原子沿 x 方向平移 10 埃 -- PDBdata = pdb2mat('3IJU.pdb'); % 从 PDB 文件读入数据PDBdata.X = PDBdata.X + 10; % 平移坐标PDBdata.outfile = '3IJU_tran10angXdir.pdb'; % 更新文件名mat2pdb(PDBdata); % 以 PDB 格式输出数据 -- 示例用法:在一个

调试之pdb文件(C++)

pdb:program database 一、内容  * public,private 和static函数地址;  * 全局变量的名字和地址;  * 参数和局部变量的名字和在堆栈的偏移量;  * class,structure 和数据的类型定义;  * Frame Pointer Omission 数据,用来在x86上的native堆栈的遍历;  * 源代码文件的名字和行数;

HITXuQin的专栏 8870

ifix eda 读写查 pdb 代码

针对ifix 的过程数据库,通过api eda 方式进行点的增加、删除、修改、查询等。

LaMAR数据集下载和使用流程

LaMAR数据集

qq_51745206的博客 971

【亲测免费】 reduce:为PDB文件添加和修正氢原子的工具

reduce:为PDB文件添加和修正氢原子的工具 项目介绍 在现代生物科学研究中,蛋白质结构分析是至关重要的一环。reduce 是一款开源工具,专注于为蛋白质数据银行(PDB)文件添加和修正氢原子。这一功能对于理解蛋白质的三维结构以及进行分子动力学模拟和量子化学计算至关重要。reduce 通过优化处理,确保每个原子周围都有正确数量的氢原子,以实现准确的模型构建。 项目技术分析 reduce 的技术...

gitblog_00346的博客 668

Ubuntu20.04/Debian10安装向日葵远程控制踩坑实录(附依赖问题解决方案)

本文详细介绍了在Ubuntu 20.04/Debian 10系统上安装向日葵远程控制软件的全过程,重点解决了常见的依赖问题,特别是libwebkitgtk相关错误。通过自动修复、手动修改.deb包依赖和使用兼容层三种解决方案,帮助用户顺利完成安装并优化远程控制体验。

silver的专栏 749

dssp:标准化蛋白质二级结构赋值工具

dssp:标准化蛋白质二级结构赋值工具 项目介绍 dssp 是一个开源的蛋白质二级结构赋值程序,旨在为蛋白质数据库(PDB)中的所有蛋白质条目提供标准的二级结构信息。该程序由 Wolfgang Kabsch 和 Chris Sander 设计,并不断发展以支持更广泛的功能。最新版本的 dssp 4.4 提供了全 mmCIF 支持,并引入了对多聚脯氨酸螺旋的定义。 项目技术分析 dssp 程序使用 ...

gitblog_00777的博客 955

Windows本地部署Qwen3-14B实战指南:Ollama+Open WebUI零Docker方案

大语言模型本地部署是AI工程化落地的关键环节,其核心在于推理框架兼容性、硬件加速适配性与端到端稳定性。Ollama作为轻量级模型运行时,原生支持Windows DirectML与CUDA,规避了Docker/WSL2虚拟化开销和llama.cpp编译风险;Qwen3-14B则凭借128K上下文、Tool Calling原生支持及中文长文本结构化能力,成为政务、金融等场景首选。本文聚焦Windows平台真实约束——显存阈值、驱动版本匹配、路径编码兼容、离线知识库集成(RAG)等工程细节,提供经63台Windo

weixin_32136203的博客 412

Eureka常见面试题总结

点击关注我的博客原文 Eureka是Netflix组件的一个子模块,也是核心模块之一。云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移(来源springcloud中文网的介绍:https://www.springcloud.cc/)。下图总结了Eureka服务端(以下简称服务端)与Eureka客户端(以下简称客户端)之间协同工作的流程: 流程说明:...

u012105931的博客 2万+

(48)VTK C++开发示例 --- 加载PDB(Protein Data Bank)文件

本文介绍了使用VTK库读取和可视化PDB格式分子结构文件的方法。通过vtkPDBReader读取文件后,利用vtkSphereSource创建原子球体模型,并通过vtkGlyph3D映射原子数据。化学键则用vtkTubeFilter生成管状结构表示。程序可根据原子数量动态调整分辨率,支持氢键和B因子缩放。提供了完整的CMake配置和C++实现代码,适用于Windows和Linux系统,需要VTK 9.4.1环境。示例使用咖啡因分子结构文件演示了3D分子可视化效果。

mahuifa的博客 634

AI编程助手Cursor如何革新经济学研究:从计量模型到可视化全流程实战

在数据科学和人工智能技术蓬勃发展的今天,如何高效地将前沿AI工具融入专业领域的研究工作流,成为提升科研效率的关键。其核心原理在于通过自然语言交互,将研究者的专业问题转化为机器可执行的指令,从而实现人机协作的范式转移。这一技术的核心价值在于大幅降低非计算机背景研究者的编程门槛,将精力从繁琐的代码实现中解放出来,更聚焦于学科本身的思想与逻辑。尤其在经济学、金融学等高度依赖数据分析和计量建模的领域,AI编程助手能够快速处理数据清洗、模型估计、可视化及结果解释等任务。具体到应用场景,研究者可以利用结构化提示词工程,

weixin_42531579的博客 296

pdb学习1

前言: … 目录1 PDB调试命令2 关键命令3 调试示例3.1 示例13.2 示例24 补充 1 PDB调试命令 2 关键命令 1.断点设置 (Pdb) b 10 # 断点设置在本py的第10行 (Pdb) b test.py:20 # 断点设置到 test.py第20行 2.删除断点 (Pdb) b # 查看断点编号 (Pdb) cl 2 # 删除第2个断点 3.运行 (Pdb) n # 单步运行 (Pdb) s # 细点运行 也就是遇到函数、方法会进入里面 (Pdb) c .

qq_36783816的博客 323

(11-3-01 )

以太坊(Ethereum)是一种基于区块链技术的开源平台和加密货币。它于2015年由Vitalik Buterin和Gavin Wood等开发者创建,并成为比特币之后最受欢迎的加密货币之一。以太坊不仅支持加密货币交易,还为开发者和企业提供了构建去中心化应用程序的强大工具。在本节的内容中,将实型一个完整的机器学习模型项目,智能检测出以太坊区块链中的非法账户。从问题定义到模型建立和评估,再到最终的总结和建议。本实例突出了处理类别不平衡问题的重要性,并展示了如何使用多种机器学习算法来解决实际问题。此外,通过数据可

码农三叔 2168

YOLO26改进 - C3k2 | C3k2 融合 ARConv 自适应矩形卷积:动态调整卷积核形状与采样点 | CVPR 2025

本文介绍了将自适应矩形卷积(ARConv)模块与YOLO26相结合的方法。ARConv是针对遥感图像全色锐化任务设计的创新卷积模块,可自适应调整卷积核形状与采样点数量,解决传统卷积刚性限制,实现高效特征提取。其工作流程包括学习卷积核高度和宽度、选择采样点数量、生成采样图、卷积实现与空间自适应增强。我们将集成ARConv的C3k2_ARConv模块引入YOLO26,对相关代码进行修改和注册,并配置了YOLO26 - C3k2_ARConv.yaml文件。实验脚本显示,该结合方式应用于目标检测任务。

魔改工程师的博客 496

分子对接PyRasetta--Pose

分子对接PyRasetta--Pose

weixin_53637133的博客 1008

C#实现每日定时执行制定程序(附完整源码)

C#实现每日定时执行制定程序(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 862

MMTF-CPP 开源项目指南

MMTF-CPP 开源项目指南 项目介绍 MMTF-CPP 是一个纯 C++ 实现的 MMTF(Macromolecular Transmission Format)API,它提供了编解码器功能,专为处理生物大分子结构数据设计。该库基于 MIT 许可证发布,旨在为数据科学家提供高效、便捷的工具来解析和操作MMTF文件格式。MMTF是一种压缩的文件格式,用于存储蛋白质、DNA和RNA等的大分子结构数...

gitblog_00748的博客 420

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

MMTF-CPP:高效处理生物大分子结构的开源利器

MMTF-CPP:高效处理生物大分子结构的开源利器 项目介绍 MMTF-CPP 是一个用于处理生物大分子结构数据的C++库,基于 MacroMolecular Transmission Format (MMTF) 格式。MMTF是一种二进制编码格式,专为高效传输和存储生物大分子结构数据而设计。该项目提供了C++03兼容的API,支持MMTF格式的编码和解码,适用于需要高效处理生物大分子结构数据的科...

gitblog_00220的博客 660

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

AlphaFold 3测试数据集构建:从PDB到自定义案例

在计算生物学领域,测试数据集的质量直接影响模型验证的可靠性。AlphaFold 3作为蛋白质结构预测的革命性工具,其测试数据集的构建需要兼顾实验数据的真实性与算法验证的针对性。本文将系统介绍如何从PDB(蛋白质数据库)文件出发,构建符合AlphaFold 3推理 pipeline 要求的测试数据集,解决数据格式转换、特征工程和案例定制中的核心痛点。 ## 测试数据集的核心构成 AlphaFol

gitblog_00384的博客 1136

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: If your Linux has some problem, this file could help you.
下一篇: 差分进化算法(Differential Evolution) JAVA代码样例
Jun-H
博客等级 码龄16年 123粉丝 61原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jun-H

你的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值