TeachOpenCADDを改造するの巻
Grüezi,
先日ナイメストさんの記事でPDBのNodeが復活していることを知りました。
【W8】タンパク質データの取得_05_Step2_02_Query2RCSB|ナイメスト @KNIME9 #note #一歩踏みだした先に https://t.co/gwJPdg9q0e
— 巨人の肩の上でKNIMEを語る (@Note_of_KNIME) August 12, 2022
と言っても完全復活ではなく、RSCB PDBの現行APIに合わせて動くようにしましたって感じでしょうか。開発のVernalisさんも困惑を隠せない雰囲気ですし。
そんなわけで、TeachOpenCADDのW8の流れでPDBを取得~って言うのはわかるんですが、実際に使う身としてはresolution top 4しか見ないってことはあまりない気がしました。 最近の私の好みで言うとポケットごとにどんなリガンドが報告されているか知りたいんですが、KNIMEでどう処理するかは気が向いたら勉強します。とりあえずは過去にやっていたように、どんなリガンドが報告されているか、それを分類したらどうなるか、辺りが気になりますが、このWorkFlowだとKNIME上ではリガンドの構造が出てきません。
なくても全然支障はないけど
めんどうだからってつけない人もいるよ
どうする?
構造あったら見るよね?
でもcustom report作ってくれるNodeがAPI使用変更でなくなったんだよね...
それ、APIで取れます。
っていうのが今日のアルトコロニーの定理です (出典はググってね
というわけで本日は勝手に「STEP 5:リガンドとAbstractを取ってくる」です。
STEP 3に入るとtop 4に絞られちゃうので、STEP 2のSorterから引っこ抜いてきます。
構造を足した後に全部ダウンロードするか、別の要件でfilterするかは好みで判断してください。
2022.8の時点で178構造がHitしているので、構造ごとにClusteringしたりしないと見る気が失せる気がします。
- Overview
- Column Expression ~Ligand information~
- GET Request > JSON to Table
- Column Filter
- Column Splitter
- Column List Loop Start
- Molecular Type Cast
- Loop End (Column Append)
- Joiner
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を作成しています。
結果はこんな感じですね。
GET Request > JSON to Table
生成したURLにGET RequestするとJSONが返ってきます。
JSONだけ見てもここでは意味不明なので、JSON to Tableを使って各要素をtableに分解してやります。設定はデフォルトです。
下のようなtableになって返ってきますが、descriptor
の部分が構造式情報のようです。ただし、SMILESとInChI Keyが混ぜこぜです。よくわからないのでSMILESが入ってるdescriptor
、descriptor (#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 Cast
でStrings
から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して実際の結晶構造の結合様式とかと比べてみたら面白いかもしれません。気が向いたらやってみようかな。
おしまい。