私の興味範囲のみのまとめです. 公式情報: https://www.ccp4.ac.uk/ccp4-8-0-updates/ リリースノートに記載されてないアップデートも実際にはあるのがCCP4 update. 実際にどのファイルが変わったのかは $CCP4/restore/update.log に記録されています. 9.0.004 2024-10-19公開 Acedrg 298 (rev 330) link作成時にplane/torsionの名前が重複する問題の修正 デフォルトのmonomer IDがUNLからLIGに変更 金属含有化合物への対応(途中) Servalcat 0.4.88 https://github.com/keitaroyam/servalcat/releases/tag/v0.4.88 refmacatで --keep_entities 指定されたときにinputのentityをoutputにもそのままコピーするように変更 (PDB-REDOからのリクエスト). 9.0.003 2024-08-19公開 Servalcat 0.4.82 https://github.com/keitaroyam/servalcat/releases/tag/v0.4.82 refmacatに関しては,unrestrained refinementのときに未知のlink idがあると止まってしまうバグを修正. もう一つ,352dのP/156のようなaltlocで原子の組成が異なるモデルに対してうまくいかないバグがあり,これはgemmi側で修正済みなので次のバージョンから対応される. これでPDBの構造に対してunrestrained refinementは全部うまくいくはず. あとはtwin refinementの実装を追加 (experimental) Mosflm mosaicity計算のバグが修正された.レポジトリの方でコミットが見つからない.. 9.0.002 2024-07-24公開 Refmac 5.8.0430 (rev 497) バージョン番号変わってませんが,mmcif/crdから_struct_ncs_operから回転行列を読むときに,-1未満の数字があると行列の全要素が0になるバグが修正されています.例えば3cjiの31番目の要素が 31 generate 0.999999 -0.000494 0.000078 0 -0.000483 -0.999992 0.000166 179.67 0.000075 -0.000165 -1.000002 253.383 となっており,これが全部0になってしまうという問題.pdbからMTRIXを読む場合はもともと問題ありませんでした. Refmacatの場合はcrd (cif)を経由するので,この問題の影響を受けてしまってました. Servalcat 0.4.77 https://github.com/keitaroyam/servalcat/releases/tag/v0.4.77 refmacatに関する修正が主. “given”のstrict NCS matrixを使わないように修正 (ただし出力ファイルから漏れてしまう問題が残ってる) 出力mmcifのlabel_seq_idを修正 未知のexternal restraint keywordがあると落ちる問題の修正(exte torsでperiodを指定した人がいて発覚) unrestrained refinementのキーワードで大文字小文字の区別が入ってしまっていたので修正 + unrestrainedの場合でもcrdを経由するように修正 出力mmcifのrefmac versionに(refmacat XXX)の記述を追記 PDB側でもマップ生成にrefmacの代わりにrefmacatを使い始めたようで,unrestrained refinementに関する修正はその目的. unrestrained + 0 cycleなのでrefmacatの意味無いと思っていたが,refmac5に直接4icmのcifを読ませると落ちるなど問題がある模様....
Refmac/Cootのtorsion angle restraintとArg問題
monomer libraryとtorsion angle CCP4 monomer libraryにはねじれ角(torsion angle)の理想値・周期・標準偏差が記述されています. 例えばARGの定義は https://github.com/MonomerLibrary/monomers/blob/master/a/ARG.cif にありますが,現時点でのtorsion angle restraintsを眺めてみると,以下のようになっています. ARGの構造と原子名の対応についてはRCSB PDB - ARG Ligand Summary PageでLabelsボタンを押して確認してください. loop_ _chem_comp_tor.comp_id _chem_comp_tor.id _chem_comp_tor.atom_id_1 _chem_comp_tor.atom_id_2 _chem_comp_tor.atom_id_3 _chem_comp_tor.atom_id_4 _chem_comp_tor.value_angle _chem_comp_tor.value_angle_esd _chem_comp_tor.period ARG chi1 N CA CB CG -60.000 10.0 3 ARG chi2 CA CB CG CD 180.000 10.0 3 ARG chi3 CB CG CD NE -60.000 10.0 3 ARG chi4 CG CD NE CZ 180.000 10.0 6 ARG chi5 CD NE CZ NH2 180....
SHELXCのoutlier rejectionについて
昔,ANODEで計算する異常分散差フーリエが,他のプログラム(phenixやRefmac)と比べてもS/Nが良いことが気になり,調査したときのメモを発掘したのでここに清書. ANODEが良いのはその前処理に使っているSHELXCによるoutlier rejectionが大いに効いていることが分かった. SHELXCは以下の2つの条件に基づいてrejectionを行う模様. 条件1: $$ \sigma^2(I^+)>6.25\sigma^2(I^-) {\rm ~or~ } \sigma^2(I^-)>6.25\sigma^2(I^+) $$ 条件2: $$ \min(\sqrt{I^+}, \sqrt{I^-}) \le 4\sqrt{ (\sqrt{I^+ +\sigma(I^+)} - \sqrt{I^+})^2 + (\sqrt{I^- +\sigma(I^-)} - \sqrt{I^-})^2 } $$ ただし\(I < 0\)のときは\(I = 0\)とする. いかにもSHELXらしい,empiricalな方法という感じ. このrejection後,SHELXCは\(e^{-2.5s^2/4}\)を掛けて出力している.さらにANODEは\(B=10\)を掛けて計算しているようだ. unmerged intensityを与えた場合の挙動は調査しきれていない.昔は重みなしで平均を計算してしまっていたが,ある時点から重み付けするようにはなったらしい(10年前に聞いた話). あとは\(\sigma(\langle I \rangle)\)はinternal/external varianceの最大値として計算されているようだ. 上記rejectionを確認するために書いたと思われるコードも発掘したので,動くかも分からないがいちおう載せておく.Python2だ… import iotbx.file_reader from cctbx.array_family import flex import math if __name__ == "__main__": f1 = "xscale.sca" fano = "anode_fa.hkl" i_org = iotbx.file_reader.any_file(f1).file_server.miller_arrays[0] i_org.show_summary() print fa = iotbx.file_reader.any_file(fano+"=amplitudes").file_server.miller_arrays[0] fa.show_summary() fa = fa....
PDB & EMDB登録メモ
最近たくさん登録作業をしたので,以前学生向けに書いたメモをここに再掲しようと思う. 2021年のPDBj講習会資料も参照. 登録には,how to deposit EM MAPにあるように,PDB or mmCIFファイルのほか,以下の情報が必要です. Primary map along with voxel size and recommended contour level 特にルールは無さそう.モデリングに使った主なマップで良いはず.postprocess_masked.mrcなど Image of the map (500 x 500 pixels in .jpg, .png, etc. format) ウェブでサムネイルとして表示される絵.何でも良い.例 Half maps (as used for FSC calculation; two maps must be uploaded) Mask FSC curves RELIONの場合はPostProcessで出力されるpostprocess_fsc.xmlをアップできる 決めておくべきこと・調べておくべきこと contact author全員のORCiD PDB/EMDBと連絡を取る人+PIのみ.公開されない Entry title & authors Surname, F.M.形式で書く Funding (organisationとnumber) unreleasedに載せるか隠すか 分子ごとのmolecule name 配列(タグの切れ残り等含め,凍結した試料に含まれた配列全部) モデルと配列が一致していることを確認しておく.食い違っていると進めない sourceとexpression host 各マップのrecommended contour level (モデルのvalidationにも使われる) グリッド作製時のpH, 冷媒,defocus範囲 (nm), 電顕と検出器の型,Average electron dose 解析手法, 粒子数, 分解能 よくあること “Still processing....
CCP4 8.0アップデートまとめ
私の興味範囲のみのまとめです. 公式情報: https://www.ccp4.ac.uk/ccp4-8-0-updates/ リリースノートに記載されてないアップデートも実際にはあるのがCCP4 update. 実際にどのファイルが変わったのかは $CCP4/restore/update.log に記録されています. 8.0.019 2024-04-11公開 monomer library 下記の問題のために古いバージョンに戻されてしまった https://github.com/keitaroyam/servalcat/issues/14 8.0.018 2024-04-03公開 新しいServalcatが入るはずでしたが,GEMMIのビルドシステム変更のためにGEMMIのバージョンを上げられず, 最新のGEMMIを必要とするServalcatも次のCCP4メジャーアップデートまで見送りとなりました. このためAcedrgのアップデートも見送りとなりました. 既知のバグが直ってないままになるのは残念だけど仕方ない.早く次のバージョンが出ますように Coot 0.9.8.93 https://www.mail-archive.com/coot@jiscmail.ac.uk/msg05645.html Mutate Residue RangeでDNAがRNAになってしまう問題の修正 TYRのHH原子に関する問題の修正: https://github.com/pemsley/coot/commit/5b52df6509afd137d72c604a6dde1232fe6cff70 monomer library https://github.com/MonomerLibrary/monomers/commits/ccp4-8.0.018 AX/RXを追加.phaserで使われる未知の異常散乱/実原子.なぜか今までのRefmacでは定義無しで動いていたらしい? #51 CCDにおける原子名の変更などを反映 #44 TYRのhh1 (OHのねじれ角)が間違っていたのを修正 #45 PROのNがsp2になってしまっていた問題の修正.すべてのP-peptideをプロトン化(NH2+)状態に #38 B12の修正 #41 PDBによるペプチド主鎖原子の修正を反映 #40 Robbieによる修正 #35 8.0.017 2024-01-18公開 Refmac 5.8.0425 http://fg.oisin.rc-harwell.ac.uk/scm/loggerhead/refmac/5.8/revision/487 残基数の最大値を50000から100000に symmetry related external bond distanceが正しく機能しないバグを修正 LINKヘッダに書く順序で認識されたりされなかったりするバグが発生しており,直っていない.Refmacatを使えば問題なし. CCP4i2 Refmac5インタフェースでRefmacatが使われるようになり,中性子構造の精密化のインタフェースが追加された. 残念ながらServalcatが古いままで,最近行った様々なバグ修正が反映されてない. Windowsでgemmi 0.6.4が正しく動かないバグが見つかったことが原因. doubleHelix 新プログラム https://doi.org/10.1093/nar/gkad553 8.0.016 2023-10-05公開 Coot 0.9.8.92 https://www....
Cootに元素を変更する機能を追加する
とりさんから一年前に約束した当該機能まだですかと聞かれ,全く身に覚えが無かったものの,実装したらDVD買ってあげるということで書きました. Coot 0.9.8.7で動作確認. def change_elem_ext(): def change_elem(atom_spec, elem): imol, chain, resi, ins, name, alt = atom_spec[1:] set_atom_string_attribute(imol, chain, resi, ins, name, alt, "element", elem) def f(elem): add_status_bar_text("Click an atom") user_defined_click(1, lambda x: change_elem(x, elem)) generic_single_entry("Element?", "", "OK", lambda text: f(text)) coot_toolbar_button("Change elem", change_elem_ext, None) 上記pythonコードを適当な名前(.py)で保存して Calculate - Run Script から実行するか,~/.coot-preferences 以下に置いておくと起動時に読まれます. 成功すればtoolbarに"Change elem"のボタンが追加されます. ちなみにこういったスクリプトを書くときにAPIを調べる方法ですが,体系的には把握してないので毎回ソースコードから探してます. Python側で定義されてる場合は.pyのファイルにあるのでそこから探し,今回は見つからなかったので src/coot_wrap_python.cc の方を見てatomでgrepしたらset_atom_attributeを見つけました. これは実数値を変更する関数だったのですが,下の方にset_atom_string_attributeを発見し,attribute_nameとしてelementを受け付けてくれることが分かりました. https://github.com/pemsley/coot/blob/abe4c5d9e372b91ba43d4bd9a7e924042c7f00ff/src/molecule-class-info-other.cc#L550 文字列をユーザに入力させるとか,クリックした原子の情報を取得するとかいった部分は,類似の他の機能のコードを探して真似します. 特に拡張的な機能はたいていpythonで書かれています.
Cootを使った核酸モデリングのtips
順次追記予定 注: Coot 0.9.8.92以上 (CCP4 8.0.016以上)を使ってください.0.9.8.6は核酸単体,0.9.8.7-8は核酸-タンパク複合体の精密化に深刻なバグがあります.0.9.8.91でもDNA-SERやDNA-TYRに由来する問題あり. base pair & stacking restraints LIBGを使う CCP4に含まれているプログラムLIBGで作製したrestraintをCootに読ませて使うことができる. LIBGの文献は以下を参照 Brown et al. “Tools for macromolecular model building and refinement into electron cryo-microscopy reconstructions” Acta Cryst. (2015). D71, 136-153 Kovalevskiy et al. “Overview of refinement procedures within REFMAC5: utilizing data from different sources” Acta Cryst. (2018). D74, 215-227 注: mmCIFの読み込みバグがCCP4 8.0.011で修正されているので,当バージョンの使用を推奨. 使い方は libg と打てば表示される.PDBファイルを使う場合は libg -p input.pdb -o libg.txt とするとRefmacのexternal restraintsが記述されたlibg.txtが作られる. 以下は2zm5を使った例 (抜粋): exte dist first chain C resi 23 ins ....
GEMMI and Servalcat restrain REFMAC5
https://doi.org/10.1107/S2059798323002413 Servalcat論文第二弾出ました.去年のCCP4 study weekendのproceedingsの一部です.同じvirtual issueにCCP4の新しい論文も載ります. REFMAC5は20年以上前に書かれたプログラムで,特にその中のMAKECIFと呼ばれる機能がモデル(pdb/mmcif)を読んでrestraintを作るんですが,歴史的経緯からロジックが必要以上に複雑になっており,メンテナンスがしづらくなっていました. そこでいま開発が活発に進んでいるGEMMIのライブラリを利用して置き換えようというのが今回の内容です. これによって,例えば今までREFMAC5が扱えなかったmicroheterogeneityなどが扱えるようになりました. また,REFMAC5は最初にmonomer library (今や35298個ものmonomerが収録されています)の中身を全部読んでから処理する仕組みだったりして精密化がスタートするまで時間がかかっていたんですが,この部分が一瞬で終わるようになりました.精密化計算の方がずっと時間はかかるので,全体の中ではわずかな改善ですが. 詳細は論文にありますが,この機能はServalcatに実装された"refmacat"コマンドを通じて使えるようになっています. 先日出たCCP4 8.0.011にこっそりとServalcat 0.4.0が入ったので,CCP4をアップデートすれば使えるようになります. 今まで refmac5 xyzin ... のようにして使っていたのを, refmacat xyzin ...のようにコマンド名だけ置き換えればそのまま動くというわけです. モデルファイルの読み込みはGEMMIライブラリを通じて行われるので,GEMMIがサポートしている形式なら何でも読めることになります. Gzipのまま読めるのは地味に嬉しいポイントです. 出力モデルもGEMMIを使って再出力されるので,hybrid-36によりPDB形式でもほとんどの巨大分子が扱えます. 結局各種プログラムのmmCIFへの対応状況が悪く,hybrid-36 PDBの方が勝手が良いというのが現状かと思われます. 未対応の問題として,4文字以上の残基名はREFMAC5ではまだ使えません. そう遠くない未来に3文字IDが枯渇するので,各種プログラムは対応を迫られています. それまでにREFMAC5が直るか,あるいはServalcatがREFMAC5をすっかり置き換えるようになっているかもしれません(?) またこうなるとPDB形式は本当に使えなくなるので,ついにmmCIFへの移行も必要です. とはいえ手元で何らかの3文字IDで作り直してしまえば動かせるので,結局みんな何とかしてPDB形式を使い続けるかもしれませんが.
Servalcatのインストール
Servalcat 0.4.6からC++コードを含むようになり,少々配布方法が複雑になってしまった. C++側からもPython側からもGEMMIが必要なため,(Pythonライブラリとしての) GEMMIと同じコンパイラでビルドしなければGEMMIオブジェクトの互換性が失われる. PyPI上で配布している(pipでインストールされる)バイナリは本家GEMMIと同一方法でビルドしているので,パッケージ版は問題なく動くはず. ただし特殊なプラットフォームでは自力でのビルドが必要になる.またPython 3.6以前を使う場合も自力でのビルドが必要である. パッケージ版 上述のように, python -mpip install -U servalcat で入るはず.ただしここでビルドが始まった場合(= 環境に合う配布バイナリが無かった)は,一見うまくいってもGEMMIを配布バイナリからインストールしてる場合は動かない. 下記の「自分でビルドする場合」を参照. Github最新版 Github最新版 (パッケージ版に未収録)をインストールする場合,Github Actionsで自動ビルドされたバイナリを使うことができる. Githubにログインした状態でないとダウンロードできないので注意. https://github.com/keitaroyam/servalcat/actions/workflows/ci.yml のworkflow runsのうち,最新のrunをクリック Artifactsから"wheels2"をダウンロード zipを解凍し,以下のコマンドを実行. wheels2はzipの中身が展開された場所(ディレクトリ)の名前 python -mpip install -U --find-links=wheels2/ servalcat 自分でビルドする場合 まずパッケージ版のGEMMIを自分でビルドする. Github最新版のGEMMIは動かない可能性があるので注意(Servalcatはパッケージ版の最新のGEMMIで動くように作っている). どのようにしても良いが,pipに --no-binary オプションがあるのでそれが使えるかも(未検証) python -mpip install --force-reinstall --no-binary gemmi gemmi それからGithub最新版のServalcatをソースからビルド python -mpip install -U git+https://github.com/keitaroyam/servalcat.git これで動くはず(未検証)
My First Post
とりさんのブログを参考に,Hugoを使ったblogを始めてみることにした. Twilogの停止により,twitterに有用なメモを残していくことができなくなったため. テーマにはPaperModを選択.カスタマイズメモ Search page Add menu to site Math typesetting Use Lastmod with PaperMod Shortcodes (tweetやyoutubeの埋め込み方) 数式のテスト: $$ F(s) = \int \rho(x) e^{2\pi i x^T s} dv $$