TeachOpenCADDを改造するの巻

Grüezi,

先日ナイメストさんの記事でPDBのNodeが復活していることを知りました。

と言っても完全復活ではなく、RSCB PDBの現行APIに合わせて動くようにしましたって感じでしょうか。開発のVernalisさんも困惑を隠せない雰囲気ですし。

forum.knime.com

そんなわけで、TeachOpenCADDのW8の流れでPDBを取得~って言うのはわかるんですが、実際に使う身としてはresolution top 4しか見ないってことはあまりない気がしました。 最近の私の好みで言うとポケットごとにどんなリガンドが報告されているか知りたいんですが、KNIMEでどう処理するかは気が向いたら勉強します。とりあえずは過去にやっていたように、どんなリガンドが報告されているか、それを分類したらどうなるか、辺りが気になりますが、このWorkFlowだとKNIME上ではリガンドの構造が出てきません。

keetaneblog.hatenablog.com

なくても全然支障はないけど
めんどうだからってつけない人もいるよ
どうする?
構造あったら見るよね?
でもcustom report作ってくれるNodeがAPI使用変更でなくなったんだよね...
それ、APIで取れます。
っていうのが今日のアルトコロニーの定理です (出典はググってね
というわけで本日は勝手に「STEP 5:リガンドとAbstractを取ってくる」です。 STEP 3に入るとtop 4に絞られちゃうので、STEP 2のSorterから引っこ抜いてきます。
構造を足した後に全部ダウンロードするか、別の要件でfilterするかは好みで判断してください。 2022.8の時点で178構造がHitしているので、構造ごとにClusteringしたりしないと見る気が失せる気がします。

Overview

こんな感じです。 すでにPDB IDとLigand IDが取得してあるので、そのまま流用する形でWorkFlowを作ります。作成者さんありがとう。
Column Expression (String Manipulationsでもいいけど)でURLを作成して、GET RequestでJSON取得、Tableに分解してSMILESのStringsをMolecule Type Castでchemical structureに変換します。
今回初めて作ったのですが、複数(4カラム)含まれているSMILESのどれを採用すればいいのかわからなかったので、Column List Loopで手当たり次第に化学構造に変換して目視確認しました。一旦通れば必要なカラムだけ変換でいいと思います。

Column Expression ~Ligand information~

まず始めにですが、TeachOpenCADDではGraphiQLを使ってAPI Queryを作成してますが、私はさっぱり記述法が理解できませんでした(爆
Web Services Overview

https://data.rcsb.org/graphql/index.html

というわけで、REST APIで許してください。こちらを参考にLigandやPDBのIDを使ってURLを作成しています。

data.rcsb.org

結果はこんな感じですね。

GET Request > JSON to Table

生成したURLにGET RequestするとJSONが返ってきます。 JSONだけ見てもここでは意味不明なので、JSON to Tableを使って各要素をtableに分解してやります。設定はデフォルトです。
下のようなtableになって返ってきますが、descriptorの部分が構造式情報のようです。ただし、SMILESとInChI Keyが混ぜこぜです。よくわからないのでSMILESが入ってるdescriptordescriptor (#1)descriptor (#3)descriptor (#5)だけをあとでfilterして残します。

構造情報は取れたので、ついでにPubmedのabstractとキーワード、doiあたりもAPIで取ります。URLは前項で生成済みなので、同じくGET RequestとJSON to Tableで情報を取得します。

JSON to Table するとこんな感じ。 感の良い方はGET Request x2してからまとめてJSON出来ないの?って思うかもしれません。結論から言うと上手く出来ませんでした。設定の問題なのかもなので、分かる方は教えてください。

Column Filter

情報量が多いので使うカラムだけ残します。

Column Splitter

descriptorのカラム4つ分はMolecular Type CastStringsからSMILESに変換したいです。何個もNodeを置いてもいいですが、同じ処理を複数カラムにかける場合はLoopを使えます。
Column SplitterでLoopの対象カラムをSplitしておきましょう。

Column List Loop Start

split済みなので設定不要な気がしますが、こいつらにNodeで同じ処理します。

Molecular Type Cast

StringsをSMILESにするNodeなわけなんですが、Variablesのcolumn nameをcurrentColumnNameにしておきます。これによってカラムが変数になります(多分

Loop End (Column Append)

設定不要です。Loopが終了します。 結果はこんな感じです。
カラム名を右クリックしてrendererを2D depictionに変更します。
rowが小さくてめっちゃ見づらい場合はviewのRow Heightを300くらいにしてやります。

Joiner

諸々全部くっつけておしまいです。
ざっと見た感じでほとんどがkinase pocketのbinderですね。clustringして実際の結晶構造の結合様式とかと比べてみたら面白いかもしれません。気が向いたらやってみようかな。

おしまい。