利用Openbabel将SMILES转化为canonical SMILES

来源:互联网 发布:零售大数据分析 编辑:程序博客网 时间:2024/06/09 23:58
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];//创建数组,存放canonicalSMILESfor(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),否则系统会报错(如下图):


0 0
原创粉丝点击