生物分子模拟论坛

 找回密码
 我想注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 5961|回复: 2

[AutoDock&Vina] python脚本获取vina虚选log文件score数值。

[复制链接]
发表于 2017-5-9 17:34:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,下载更多分子模拟资源。

您需要 登录 才可以下载或查看,没有帐号?我想注册

x
本帖最后由 phenylazide 于 2017-5-14 21:37 编辑

上午我看了作者“数据挖掘“ 写的原创 文章:[原创] vina 虚拟筛选log文件的分析的脚本,他用的是perl写的脚本
但是我自己运行了下他的代码,一直出现错误,从来没有成功过,另外尝试了下想看懂perl,但感觉比较难,难以下手去改。后来发现有两种方便的方法可以调出结果。
第一种: 在linux下面使用强大的grep命令。
---------------------------
~$ grep "   1         -" */*log.txt每个ligand的第一个pose结果就全出来了:
例如我得到结果如下:
result_3K5K/A366_3K5Klog.txt:   1         -7.6      0.000      0.000
result_3K5K/asc_17_3K5Klog.txt:   1         -7.7      0.000      0.000
result_3K5K/asc_21_3K5Klog.txt:   1         -7.4      0.000      0.000
result_3K5K/BIX01294_3K5Klog.txt:   1         -7.8      0.000      0.000
result_3K5K/UNC0224_ChemDraw_3K5Klog.txt:   1         -7.4      0.000      0.000
result_3K5K/UNC0638_3K5Klog.txt:   1         -7.4      0.000      0.000
。。。
。。。
此处略去无数行

如果增加tee命令:


~$ grep "   1         -" */*log.txt | tee -a result_first_pose.txt
则所有上述显示的结果  会全部写 result_first_pose.txt

如果在将新建excel,选择数据>自文本
再选择刚才的文本文件 result_first_pose.txt > 分隔符号 > 空格 > 下一步 >完成

结果就全写了excel表格了。呵呵。
result_3K5K/A366_3K5Klog.txt:
1
-7.6
0
0
result_3K5K/asc_17_3K5Klog.txt:
1
-7.7
0
0
result_3K5K/asc_21_3K5Klog.txt:
1
-7.4
0
0
result_3K5K/BIX01294_3K5Klog.txt:
1
-7.8
0
0
result_3K5K/UNC0224_ChemDraw_3K5Klog.txt:
1
-7.4
0
0
result_3K5K/UNC0638_3K5Klog.txt:
1
-7.4
0
0
。。。
此处略去无数行


#说明:  grep "   1         -"  中的引号内容 克根据需要 采用正则表达式
--------------------------------------------------------------

第二种:使用以下python代码的方式。

调出所有化合物中最优pose的能量,自己瞎尝试,编了个Python的脚本。代码也较简单,但效果也不错,速度也不慢。5000个log文件在一分钟内也都搞定了。

代码很简单,如下:
---------------------------------------------------------------
import sys,os
import glob


os.chdir("D:\\vina_log_fetch\\result_all_log")  #进入log文件所在的目录
for file in glob.glob("*.txt"):
        try:
                f = open(file,'r+')
                lines = f.readlines()[24:26]   ##读取第25,26行的内容,log文件一般总共34行,但所要的一般在第25行,所以f.readlines()[24]
               ##但有些log文件 print 结果是-----+------------+----------+----------  所有用了个if语句,取下一行。
                if lines[0].startswith('-----+'):
                        print(file, "     ,",lines[1])
                else:
                        print(file, "     ,", lines[0])
        except:


                print(file,"     ,", "read failure")
                pass
"""
用法和注意事项:


1. 请在第四行(即os.chdir那行的括号里面),修改vina log文件的存储的位置,注意使用双反斜杠 \\,不然会出错。我使用的是windows系统,批量log文件在windows的实际位置是:D:\vina_log_fetch\logFiles。 vina_fetch_top_score.py存放在D:\vina_log_fetch  目录下。


2. 在cmd下,cd进入D:\vina_log_fetch目录(即vina_fetch_top_score.py所在的目录),敲击以下命令:
python vina_fetch_top_score.py > vina_top_score_list.txt
所有的top1的score和文件即可获得,结果存在vina_top_score_list.txt。

同样采用上述excel,数据>自文本的方式,可以获得excel表格
"""
-------------------------------------------------
以下是python文件,使用时请产出.doc后缀。











vina_fetch_top_score.py.doc

1.34 KB, 下载次数: 28

使用时请删除.doc后缀

 楼主| 发表于 2017-5-9 17:38:00 | 显示全部楼层
本帖最后由 phenylazide 于 2017-5-9 17:43 编辑

以下是py文件,使用时把.doc后缀去掉

vina_fetch_top_score.py.doc

1.34 KB, 下载次数: 5

vina_fetch_top_score

发表于 2020-3-13 22:39:55 | 显示全部楼层
我做出的结果为什么会空一行?谢谢啦
您需要登录后才可以回帖 登录 | 我想注册

本版积分规则

QQ|分迪科技|小黑屋|手机版|Archiver|生物分子模拟论坛 ( 蜀ICP备14009200号-3 )

GMT+8, 2024-12-25 15:23 , Processed in 0.061571 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表