生物分子模拟论坛

 找回密码
 我想注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 7665|回复: 3

[Centos] mol2格式分子在sybyl显示断裂的原因及修改方法

[复制链接]
发表于 2013-1-29 14:42:18 | 显示全部楼层 |阅读模式

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

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

x
可能的原因一
原子不连通,
1 3
2 4
1 4
则1234这四个原子是连通的,理论上不应该是断裂的。
1 3
2 4
则是断裂的,根据这个原则可以从分子库中自动挑选出所有断裂的分子,然后手动修改。

这里我贴一个自动挑选的脚本 附件中,没测试。有问题联系我,qq 1679088991



#!/usr/bin/perl                                             
                                                            
sub txt2atomnu{                                             
   @text=@_;                                                
   foreach  $line(@text)                                    
   {                                                        
     if($line=~/^(\d+)\s+\d+\s+\d+\s+\d+\s+\d+/){           
        return $1;                                          
      }                                                     
    }                                                      
  }                                                         
                                                            
                                                            
                                                            
                                                            
sub  getbondtxt{                                            
open FG,">1";                                             
@text = @_;                                               
foreach $line(@text)                                      
{  #    1     1     2 1  这个mol2中键的格式是唯一的      
  if($line=~/^\s+\d+\s+(\d+\s+\d+)\s+\S+$/)               
  {                                                      
      print FG $1,"\n";                                 
   }                                                      
}                                                         
open FG,"1";                                             
@bonds=<FG>;                                             
# print @bonds;                                             
return @bonds;                                            
}                                                           
                                                            
                                                            
                                                            
                                                            
                                                            
                                                            
                                                            
opendir DIR,"F:/task/segst";                                
@files=readdir(DIR);                                       
shift  @files;                                             
shift @files;                                               
foreach $file(@files)                                       
{                                                           
open FH,"F:/task/debri/$file";                           
                                                            
    @text=<FH>;                                             
    $atomnu=&txt2atomnu(@text);                             
    @bonds=&getbondtxt(@text);                              
                                                           
                                                           
    my @id;                                                
                                                            
#给每个对象赋予一个初始值                                 
for($i=1;$i<=$atomnu;$i++){                                
  $id[$i]=$i;                                               
  #  print "$id[$i]\n ";                                    
}                                                         
                                                            
foreach $bond(@bonds)                                       
{                                                           
   chomp;                                                  
  @num=split(/\s+/,$bond);                                 
                                                            
#  print join '---',"@num";                                
# print "\n";                                             
                                                            
                                                            
#p 和 q 是连通的对象                                       
  $p=$num[0];                                               
  $q=$num[1];                                               
                                                            
  #t 是存放的p对象的值                                      
  $t=$id[$p];                                               
  # print "$p $q $t\n";                                    
  for($i=1;$i<=$atomnu;$i++)                                
  {                                                         
   if($id[$i]==$t)  #和t相等值的所有对象,只都变成对象q的值
   {                                                      
    #print "1234567";                                    
    $id[$i]=$id[$q];                                       
                                                            
     }                                                      
   }                                                        
}                                                         
                                                            
                                                            
$flag=grep{$id[1],$id_} @id;                              
                                                            
if($flag !=0){                                             
                                                           
print "debris copy\n";                                    
                                                           
  system("copy \"F:\\task\\segst\\$file\"  \"F:\\task\\debr
                                                           
}                                                         
                                                      
}                                                           



原因二
1 3
2 4
1 4
则1234这四个原子是连通的,理论上不应该是断裂的。有时我们会发现一个有趣的现象,
在pymol中打开时连通的,在sybyl中打开是不连续的。
原因是atom中有个亚结构属性,亚结构属性的id  和 名字。

在sybyl中如果属于不同的亚结构,则可能显示为不连续。


评分

参与人数 1金币 +10 收起 理由
川大-灰太狼 + 10 很给力!

查看全部评分

发表于 2013-1-29 21:37:22 | 显示全部楼层
技术贴!赞一个,提一个问题,如果不在sybyl下,出现mol2格式键断裂的情况是否常见?我感觉貌似我还没遇到过,请指教
 楼主| 发表于 2013-2-3 20:34:53 | 显示全部楼层

应该属于键不是连通的
发表于 2013-2-25 15:41:39 | 显示全部楼层
学习。。。
您需要登录后才可以回帖 登录 | 我想注册

本版积分规则

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

GMT+8, 2024-12-25 01:59 , Processed in 0.108891 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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