您的位置:首页 > 运维架构

利用Openbabel将SMILES转化为canonical SMILES

2015-06-16 17:49 260 查看
import org.openbabel.*;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Test{
public Test() {
System.loadLibrary("openbabel_java");
}

public void run() throws Exception{
OBConversion c = new OBConversion();
OBMol mol = new OBMol();
String[] OriSMILES = {
"O=C(C(C(C1([H])[H])=C(C2C(=C3[H])[H])[H])=C(C=2C(=C3[H])[H])[H])C(=O)C(=O)1",
"ClC(=C(C(Cl)=C1[H])C(=O)C(=C(C(=C2Cl)[H])[H])C(=C2[H])[H])C(=C(C(N(N=N3)C(N([H])[H])=C3C(=O)N([H])[H])([H])[H])1)[H]",
"O=C(N(C(=C(C(=C2[H])[H])[H])C(=C2[H])[H])C(=C1C([H])([H])[H])[H])C(=C1[H])[H]",
"S(=O)(C(C(C(C(N=C=S)([H])[H])([H])[H])([H])[H])([H])[H])C([H])([H])[H]"
};
int num = OriSMILES.length;//数组中元素的个数
String[] canSMILES = new String[num];//创建数组,存放canonicalSMILES
for(int i=0; i<num;i++){
c.SetInFormat("smi");
c.ReadString(mol, OriSMILES[i]);
System.out.print("Ori SMILES: "+OriSMILES[i]+"\n");
c.SetOutFormat("can");
canSMILES[i] = c.WriteString(mol);//canSMILES数组元素赋值
System.out.print("Canonical SMILES: " +canSMILES[i]+"\n");
}
/*写入文件开始*/
File file = new File("canSMILES.txt");  //存放数组数据的文件
FileWriter out = new FileWriter(file);  //文件写入流
//将数组中的数据写入到文件中
for(int i=0;i<num;i++){
out.write(canSMILES[i]);
}
out.close();
/*写入文件结束*/
}

public static void main(String[] args) throws Exception{
System.out.println("Running OBTest...");
Test test = new Test();
test.run();
}
}


实现步骤:

1.安装Openbabel软件,并将安装路径添加到系统变量Path中去;

2.直接利用Openbabel图形界面进行转换;或者将上述路径下的openbabel.jar添加到系统变量CLASSPATH中去,然后利用上述java脚本去执行。

关键:

如果是通过执行java脚本的方式去实现,则务必需要将安装路径添加到Path中去,因为java脚本中需要调用到安装文件夹下的几个dll文件(如openbabel_java.dll),否则系统会报错(如下图):

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息