mmlibのAPI Documentをよく見ると、"Generated by Epydoc"という文字がありました。早速、Epydocをインストールして、MMTKのAPI Documentを作成してみました。
1. Epydocのサイトからepydoc-3.0alpha3.win32.exeを取得し、インストール。
2. MMTKのAPI Documentの作成
> cd C:\Python23\Scripts
> python epydoc.py --html MMTK -o mmtk_docs
この操作で、C:\Python23\Scriptsの下にmmtk_docsができます。その下にあるindex.htmlを開くと以下の画面が表示されます。
epydocすばらしい!
人気ブログランキング(クリックして応援してね)
2006年09月12日
2006年09月11日
The Python Macromolecular Library (mmLib)
mmlibというPythonの拡張ライブラリがあります。APIを見るとmmCIFとPDBのparserだけではなく、重ね合わせや、TLS modelsによる解析ができるみたいです。TLS modelsについては以下の論文で報告されています。
Acta Cryst. D61,465-471
このようなPythonのAPI Referenceってどうやって作っているのでしょう?Javadocみたいなツールがあるのかな?調べてみます。
人気ブログランキング(クリックして応援してね)
Acta Cryst. D61,465-471
このようなPythonのAPI Referenceってどうやって作っているのでしょう?Javadocみたいなツールがあるのかな?調べてみます。
人気ブログランキング(クリックして応援してね)
2006年09月08日
JOELibでShortest Path Length Matrix
JOELibでは、DistanceMatrixクラスを使うことにより、原子ペア間の最短パス長を要素として持つMatrixを取得することができます。
DistanceMatrix dm = new DistanceMatrix();
int m[][]=null;
try {
DescResult result = dm.calculate(mol);
m = ((IntMatrixResult)result).value;
} catch (DescriptorException e) {
e.printStackTrace();
}
特に、トポロジカルなatom pair descriptorsを自作する際に便利な機能だと思います。
人気ブログランキング(クリックして応援してね)
DistanceMatrix dm = new DistanceMatrix();
int m[][]=null;
try {
DescResult result = dm.calculate(mol);
m = ((IntMatrixResult)result).value;
} catch (DescriptorException e) {
e.printStackTrace();
}
特に、トポロジカルなatom pair descriptorsを自作する際に便利な機能だと思います。
人気ブログランキング(クリックして応援してね)
2006年09月07日
JOELibでAtomTypeの変換
JOELibでは、JOETypeTableクラスを使うことにより、AtomTypeの変換を行うことができます。例として、mol2形式のAtomTypeである'N.3'をmm2形式のAtomTypeへと変換してみます。
JOETypeTable jtt = JOETypeTable.instance();
jtt.setFromType("SYB");
jtt.setToType("MM2");
String atom_type = jtt.translate("N.3");
System.out.println("N.3 -> "+atom_type);
実行結果:
N.3 -> 8
mol2の'N.3'はmm2では'8'と変換されました。
変換自体は、joelib/data/plain/types.txtを参照して行われているようです。このtypes.txtはいろいろと参考になると思います。
人気ブログランキング(クリックして応援してね)
JOETypeTable jtt = JOETypeTable.instance();
jtt.setFromType("SYB");
jtt.setToType("MM2");
String atom_type = jtt.translate("N.3");
System.out.println("N.3 -> "+atom_type);
実行結果:
N.3 -> 8
mol2の'N.3'はmm2では'8'と変換されました。
変換自体は、joelib/data/plain/types.txtを参照して行われているようです。このtypes.txtはいろいろと参考になると思います。
人気ブログランキング(クリックして応援してね)
2006年09月06日
MSDChem
EMBL-EBIで公開されているMSDChemはPDB中の低分子を検索できるサービスです。この中で使われている部分構造検索はJavaで実装されているらしく、以下のサイトでライブラリとそのAPIが公開されています。Oracle cartrigeとしても利用できるようです。便利ですね。
http://www.ebi.ac.uk/msd-srv/docs/moldoc/help.html
人気ブログランキング(クリックして応援してね)
http://www.ebi.ac.uk/msd-srv/docs/moldoc/help.html
人気ブログランキング(クリックして応援してね)
2006年09月05日
CDKとJOELibの連携 その2
CDKでorg.openscience.cdk.libio.joelib.Convertorクラスを用いるためには、joelib.jarを含めてコンパイルする必要があります。
基本的なコンパイルの手順は、以下のとおりです。
1. cdk-source-20060714.tar.gzを展開する。
2. コンパイルの実行:
cdk-source-20060714> ant dist-large
この操作で、cdk-source-20060714\dist\jarの下にcdk-svn-2006XXXX.jarができます。
joelib.jarを含めてコンパイルするためには、cdk-source-20060714\jar\libio下にjoelib.jarを置いて、コンパイルするだけでOKだと思ったのですが、コンパイルできませんでした。
cdk-source-20060714> ant info
によると、"JOELib found: true" になっているので、認識はされているはずなのですが.... 私はantのbuild.xmlをまともに理解できないため、ここで断念しました。
とりあえず、Convertorクラスを使うために、以下の手順を取りました。
1. cdk-source-20060714\src\org\openscience\cdk\libio\joelibの下にConvertor.javaがあるので、適当なフォルダにコピーする(ここではC:\work)。
2. クラスパスにcdk-20060714.jarとjoelib.jarを加えて、Convertor.javaのコンパイルを実行。
C:\work> javac Convertor.java
ただし、Convertor.javaを以下のように修正した。
36行目:
org.openscience.cdk.Element e = ef.getElement(atom.getAtomicNum());
-> org.openscience.cdk.Element e = (Element)ef.getElement(atom.getAtomicNum());
173行目:
convertedBond.setBegin(convert(bond.getAtomAt(0)));
-> convertedBond.setBegin(convert((Atom)bond.getAtomAt(0)));
174行目:
convertedBond.setEnd(convert(bond.getAtomAt(1)));
-> convertedBond.setEnd(convert((Atom)bond.getAtomAt(1)));
252行目:
converted.addAtom(convert(mol.getAtomAt(i), coordType));
-> converted.addAtom(convert((Atom)mol.getAtomAt(i), coordType));
import org.openscience.cdk.Element の追加
この操作で、Convertor.classができる。
3. Convertor.classをcdk-20060714.jarに加える。
> mkdir tmp
> copy cdk-20060714.jar tmp
> cd tmp
> jar xvf cdk-20060714.jar
> mkdir org\openscience\cdk\libio\joelib
> copy C:\work\Covertor.class org\openscience\cdk\libio\joelib
> rm cdk-20060714.jar
> jar cvf cdk-new.jar *
jarのオプションを使えば、もう少しスマートな方法があると思いますが、今回はこのように行いました。
以上の操作で作成されたcdk-new.jarを用いれば、Convertorクラスが利用できます。
人気ブログランキング(クリックして応援してね)
基本的なコンパイルの手順は、以下のとおりです。
1. cdk-source-20060714.tar.gzを展開する。
2. コンパイルの実行:
cdk-source-20060714> ant dist-large
この操作で、cdk-source-20060714\dist\jarの下にcdk-svn-2006XXXX.jarができます。
joelib.jarを含めてコンパイルするためには、cdk-source-20060714\jar\libio下にjoelib.jarを置いて、コンパイルするだけでOKだと思ったのですが、コンパイルできませんでした。
cdk-source-20060714> ant info
によると、"JOELib found: true" になっているので、認識はされているはずなのですが.... 私はantのbuild.xmlをまともに理解できないため、ここで断念しました。
とりあえず、Convertorクラスを使うために、以下の手順を取りました。
1. cdk-source-20060714\src\org\openscience\cdk\libio\joelibの下にConvertor.javaがあるので、適当なフォルダにコピーする(ここではC:\work)。
2. クラスパスにcdk-20060714.jarとjoelib.jarを加えて、Convertor.javaのコンパイルを実行。
C:\work> javac Convertor.java
ただし、Convertor.javaを以下のように修正した。
36行目:
org.openscience.cdk.Element e = ef.getElement(atom.getAtomicNum());
-> org.openscience.cdk.Element e = (Element)ef.getElement(atom.getAtomicNum());
173行目:
convertedBond.setBegin(convert(bond.getAtomAt(0)));
-> convertedBond.setBegin(convert((Atom)bond.getAtomAt(0)));
174行目:
convertedBond.setEnd(convert(bond.getAtomAt(1)));
-> convertedBond.setEnd(convert((Atom)bond.getAtomAt(1)));
252行目:
converted.addAtom(convert(mol.getAtomAt(i), coordType));
-> converted.addAtom(convert((Atom)mol.getAtomAt(i), coordType));
import org.openscience.cdk.Element の追加
この操作で、Convertor.classができる。
3. Convertor.classをcdk-20060714.jarに加える。
> mkdir tmp
> copy cdk-20060714.jar tmp
> cd tmp
> jar xvf cdk-20060714.jar
> mkdir org\openscience\cdk\libio\joelib
> copy C:\work\Covertor.class org\openscience\cdk\libio\joelib
> rm cdk-20060714.jar
> jar cvf cdk-new.jar *
jarのオプションを使えば、もう少しスマートな方法があると思いますが、今回はこのように行いました。
以上の操作で作成されたcdk-new.jarを用いれば、Convertorクラスが利用できます。
人気ブログランキング(クリックして応援してね)
2006年09月04日
Implicit HydrogenとExplicit Hydrogen
Implicit HydorgenとExplicit Hydorogenの違いをJOELibを使って確認したいと思います。
例として、エタンを用います。Ethane 1はmol形式中に水素原子を含んでおり、Ethane 2は含んでいません。
for(int i=1;i<=mol.numAtoms();i++){
JOEAtom atom = mol.getAtom(i);
if(!atom.isHydrogen()){
System.out.println("Atom: "+i);
int imp_H = atom.implicitHydrogenCount();
int exp_H = atom.explicitHydrogenCount();
System.out.println(" Implicit Hydrogen: "+imp_H);
System.out.println(" Explicit Hydrogen: "+exp_H);
}
}
ethane 1の実行結果:
Atom: 1
Implicit Hydrogen: 3
Explicit Hydrogen: 3
Atom: 2
Implicit Hydrogen: 3
Explicit Hydrogen: 3
ethane 2の実行結果:
Atom: 1
Implicit Hydrogen: 3
Explicit Hydrogen: 0
Atom: 2
Implicit Hydrogen: 3
Explicit Hydrogen: 0
Implicit Hydrogenの算出は、水素原子を座標情報として明確に考慮する必要がない処理において、役に立つ機能ですね。
人気ブログランキング(クリックして応援してね)
例として、エタンを用います。Ethane 1はmol形式中に水素原子を含んでおり、Ethane 2は含んでいません。
for(int i=1;i<=mol.numAtoms();i++){
JOEAtom atom = mol.getAtom(i);
if(!atom.isHydrogen()){
System.out.println("Atom: "+i);
int imp_H = atom.implicitHydrogenCount();
int exp_H = atom.explicitHydrogenCount();
System.out.println(" Implicit Hydrogen: "+imp_H);
System.out.println(" Explicit Hydrogen: "+exp_H);
}
}
ethane 1の実行結果:
Atom: 1
Implicit Hydrogen: 3
Explicit Hydrogen: 3
Atom: 2
Implicit Hydrogen: 3
Explicit Hydrogen: 3
ethane 2の実行結果:
Atom: 1
Implicit Hydrogen: 3
Explicit Hydrogen: 0
Atom: 2
Implicit Hydrogen: 3
Explicit Hydrogen: 0
Implicit Hydrogenの算出は、水素原子を座標情報として明確に考慮する必要がない処理において、役に立つ機能ですね。
人気ブログランキング(クリックして応援してね)
2006年09月03日
CDKのPathToolsクラス
CDKのPathToolsクラスはmolecular graphsを処理するために利用できる便利なクラスです。今回は、このクラスのメソッドの1つであるgetAllPathsメソッドを利用して、任意の原子Aから原子Bまでの全ての経路を列挙させてみます。
例として、以下の分子の原子6から原子10までの全経路を列挙してみます。
IAtom atomA = mol.getAtomAt(5);
IAtom atomB = mol.getAtomAt(9);
List all_path = PathTools.getAllPaths(mol,atomA,atomB);
for(int i=0;i<all_path.size();i++){
List path = (List)all_path.get(i);
for(int j=0;j<path.size();j++){
IAtom atom = (IAtom)path.get(j);
System.out.print(mol.getAtomNumber(atom)+1+",");
}
System.out.println();
}
実行結果:
6,4,7,1,8,2,10,
6,4,7,1,8,2,3,9,5,10,
6,4,3,9,5,10,
6,4,3,2,10,
このような経路情報は、descriptorの計算などに利用できます。また、このクラスのcomputeFloydAPSP(int[][] C)メソッドを用いれば、全ての原子間の最短経路長が取得でき便利です。
人気ブログランキング(クリックして応援してね)
例として、以下の分子の原子6から原子10までの全経路を列挙してみます。
IAtom atomA = mol.getAtomAt(5);
IAtom atomB = mol.getAtomAt(9);
List all_path = PathTools.getAllPaths(mol,atomA,atomB);
for(int i=0;i<all_path.size();i++){
List path = (List)all_path.get(i);
for(int j=0;j<path.size();j++){
IAtom atom = (IAtom)path.get(j);
System.out.print(mol.getAtomNumber(atom)+1+",");
}
System.out.println();
}
実行結果:
6,4,7,1,8,2,10,
6,4,7,1,8,2,3,9,5,10,
6,4,3,9,5,10,
6,4,3,2,10,
このような経路情報は、descriptorの計算などに利用できます。また、このクラスのcomputeFloydAPSP(int[][] C)メソッドを用いれば、全ての原子間の最短経路長が取得でき便利です。
人気ブログランキング(クリックして応援してね)
2006年09月02日
CDKとJOELibの連携
CDKではorg.openscience.cdk.libio.joelib.Convertorクラスを用いることにより、CDKのMoleculeをJOELibのJOEMolへと変換、及びその逆の変換も可能となります。ただし、binary配布にはこのクラスは含まれていませんので、sourceからjoelib.jarを含めてコンパイルする必要があります。
実際に、Molecule->JOEMol, JOEMol->Moleculeへと変換を行ってみます。
cdk_joelib.java:
変換といっても基本的には、atomとbondをaddしているだけですので、自分でConvertorクラスを作成してもいいと思います。
人気ブログランキング(クリックして応援してね)
実際に、Molecule->JOEMol, JOEMol->Moleculeへと変換を行ってみます。
cdk_joelib.java:
変換といっても基本的には、atomとbondをaddしているだけですので、自分でConvertorクラスを作成してもいいと思います。
人気ブログランキング(クリックして応援してね)
2006年09月01日
CDKでねじれ角の計算
CDKで結合原子距離、結合角、ねじれ角の計算を行ってみます。これらの値は、分子力場計算には必須ですね。CDKでは、ForceFieldToolsクラスを用いてこれらの値を取得できます。
GVector gv = ForceFieldTools.getCoordinates3xNVector(mol);
double bond_length = ForceFieldTools.distanceBetweenTwoAtomsFrom3xNCoordinates(gv, 0, 1);
double angle1_3 = ForceFieldTools.angleBetweenTwoBondsFrom3xNCoordinates(gv, 0, 1, 2);
double torsion_angle = ForceFieldTools.torsionAngleFrom3xNCoordinates(gv, 0, 1, 2, 3);
System.out.println("Bond length: "+bond_length);
System.out.println("Angle1_3: "+angle1_3);
System.out.println("Torsion angle "+Math.toDegrees(torsion_angle));
結合角はdegreeで返ってきますが、ねじれ角はradianで返ってくるので注意が必要です。
人気ブログランキング(クリックして応援してね)
GVector gv = ForceFieldTools.getCoordinates3xNVector(mol);
double bond_length = ForceFieldTools.distanceBetweenTwoAtomsFrom3xNCoordinates(gv, 0, 1);
double angle1_3 = ForceFieldTools.angleBetweenTwoBondsFrom3xNCoordinates(gv, 0, 1, 2);
double torsion_angle = ForceFieldTools.torsionAngleFrom3xNCoordinates(gv, 0, 1, 2, 3);
System.out.println("Bond length: "+bond_length);
System.out.println("Angle1_3: "+angle1_3);
System.out.println("Torsion angle "+Math.toDegrees(torsion_angle));
結合角はdegreeで返ってきますが、ねじれ角はradianで返ってくるので注意が必要です。
人気ブログランキング(クリックして応援してね)