2023年9月9日土曜日

つれづれ思うこと Perl 編 その3

(その2)の続きとして、次は NumPy について。

例えば、筆者の NMR データの解析のためのプログラムには、exp(i H t) という計算が一杯入ってくる。ここで i は虚数、t は時間であるが、H はハミルトニアンと呼ばれる演算子であり、中身は行列である。つまり、e の何とか乗での冪数(べきすう)にあたる箇所に行列が来る。その行列も1万行 x 1万列などという大きさの場合がある(NOESY, saturation transfer のシミュレーションなど)。3 の 2 乗は 9 とすぐに計算できるが、3 の行列乗(しかも内部には虚数)なんて、どのようにして計算するのだろう?と思われるかもしれないが、実はこの行列 (i H t) を対角化さえできれば簡単に計算できる。この exp(i H t) は物理では至るところに出てくるので、物理の計算では行列の対角化(つまり、固有値と固有関数の導出)ができるかどうかが重要な鍵であると言える。

これを Python で計算させると、リターンキーを押し込む前に速攻で答が返ってくる。NumPy と SciPy ライブラリーのおかげである。ここが Python の強いところ。このライブラリー部分は C 言語か Fortran かで書かれているらしいが、表面的にはまるで Python そのものが計算しているように見える。

一方、Perl でこれができるだろうか?一応 PDL(Perl Data Language)と呼ばれるライブラリーがあり、最近ではいろいろな計算ができるらしい。しかし、25 年ほど前は exp(i H t) が Perl で簡単に、しかもバナナジュースを飲み終える短時間内に計算できるかどうかはよく分からなかった。ここが個人的には勝敗を分けたような気がする。1996 年頃、何とかこの計算を Perl で行いたく、力づくでテーラー展開を使った。そうです、対角化という高等な操作を使わなくても、ひたすらテーラー展開をして汗水流せば、exp(i H t) を求めることができるのです。高校でよく x が小さい時 (1+x)^n = 1+nx ですよと習う、あの近似式もテーラー展開から来ている。これを1次でストップせずに、2次、3次と続けていくとますます真の値に近づいていくはずであるが、いったいどこまで続ければよいのだろう?

普通はまあ 10 次ぐらいまで計算して足し込めば十分だろうと思いがちである。ところが、どんどん次数を上げていくと、収束したり発散したりを繰り返したのである(行列の中に虚数が含まれているためだろうか?)。よって、変な次数のところでうっかり止めてしまうと、真値からかなり外れた値に落ちてしまう。というわけで、200 次ぐらいまで計算することにした。この 200 がよいのかどうかは今だに分からない。

ややこしそうに見えるが、要は行列の内積(行と列の要素を一つずつ掛け合わせてから足す)をどんどん繰り返していくだけである。これを計算するには、for 文による繰り返しをひたすら書いていけばよい。そして、NMR のシミュレーションでは FID 部分は 1,000 ポイントぐらいあるので、またこれを 1,000 回ぐらい計算するのである。いずれも for 文を使って。ちょっとややこしいのは、実数と虚数を分けたり混ぜたりしながら計算しないといけない点である(虚数 x 虚数 = 実数, 虚数 x 実数 = 虚数となる具合に)。

このようなプログラムを書いていると何故か汗が出てくる。計算するのはあくまで PC であって、自分が計算するわけではないのであるが、for 文をひとつ追加するごとに、まるで自分が激しく運動しているかのような錯覚に陥り、大変だなあと困って汗ばんでしまうのである。そして何とか書き上げ、いざ実行!だが、答が返ってこない。。。。バグっているのか、それとも PC がまだひたすら計算しているのかは?である。試しに1ポイントだけ計算させてみると、10 分ほど経って一応は正しい答が返ってきた。やった~と叫んだが、たった1ポイントだけではスペクトルをシミュレートするには程遠く、ほとんど役立たずである。それでそのまま放り出してやめてしまった。

月日は流れ 22 年ほど経ったある日、そのプログラムをふと思い出し、こわごわ動かしてみた。普通はそんな昔のプログラムが素直に動くことはない。しかし、この Perl はなにやら計算をし始めた。この Perl の後方互換性は大変すばらしい!私がこれまでに作った Perl の中でうまく動かなったのは一度だけで、それも 30 年以上前に作った初期版だけである。たしか、先頭にスペースのある行を split した時に、配列インデックスが 1 から始まったような気がする(今は0)。それで iMac-27 (core-i5, 32 GB memory)のマシンで 30 分後にプロンプトが返ってきた!恐る恐る gnuplot でグラフを表示させてみると、事前に Mathematica で計算したのと全く同じグラフが出てきたのである。これには大変驚きで、プログラムを前に「なんて可愛いヤツなんだ」と感動してしまった。

あまりもの嬉しさに論文に「Mathematica と Perl で図8をシミュレートした」などと書いたら、ある審査員 reviewer が「こいつはバカか?」と思ったのか、論文を reject すると同時に、NumPy と SciPy のプログラムを送ってきた。それでこれを実行してみると、3 秒ぐらいで同じグラフが画面に出てきたので(gnuplot もなしに)、共著者とともにまたまた驚き、なんて速いプログラムなんだ、大蛇、恐るべし!と、これまた感動してしまった。

それからは、もう勝てないものには勝てないと諦め、素直に Python で、しかし泣く泣く計算プログラムを作るようになった次第である。とは言え、もし Perl にもそのような高速の数学ライブラリが揃っていれば、さらにグラフも簡単に作れれば、間違いなく、蛇ではなくリャマをお友達にしている。

2023年9月8日金曜日

つれづれ思うこと Perl 編 その2

ソフトウェア言語を比べながら書くのであれば、もうちょっと段落ごとに内容をまとめるべきであるが、どうもそれは苦手であるので、頭に思い浮かんだことをそのまますぐにタイプすることにする。

そもそも何故、どのようなきっかけで Perl を始めたのだろう?

1994 年頃のことであるが、やはりデータ解析でファイルフォーマットの変換が必要になり、これは何かプログラムを使わなければと思った。しかし、その時に知っていたのは C 言語だけで、最初はプログラムをコンパイルして、出来上がった a.out を実行していた。しかし、PDB ファイルでアミノ酸残基番号を1だけずらすのに、C 言語でプログラムを書きコンパイルするなんて、ちょっと馬鹿げている(C ユーザの方、ゴメンなさい)。ある時、指導教員の机上に、微笑んでいるラクダの絵が描かれた分厚い本が置いてあり、この表紙がすこぶる気に入ってしまった。これが Perl を始めることになった唯一の動機かつ、きっかけである。その後、このシリーズの本には、ラクダ以外にも、ラマ、羊、山羊、豹などがあったような気がする。いま後ろの本箱を調べてみたら、リャマ、オオツノヒツジ、黒豹だった。リャマの絵などは大変かわいい。

一方 Python 本はというと、気持ち悪い大蛇!しかも、どこかで本物の蛇の写真が表紙に使われているのを見たことがある。これはとてもではないが、買って枕元に置こうとは思わない。ましてや学生に「この本で勉強してみたら?」と本を渡したとしたら、驚きようによっては嫌がらせかと誤解されかねない。ちなみに「Python 1年生」という本が出ており、山羊、羊、犬などが登場していた。もちろん買いました!また、GAS プログラミングの本で「カエル」が表紙を飾っているのがありましたが、それもとても可愛かったので、学生が気に入っているようです。

この頃 1995、研究室の本棚には Python, Tcl/Tk, C++ の書籍もあり、今後どれを使っていこうか、どれを中心に勉強していこうかと迷った。その時に、Perl ではなく Python を選んでいたら、今頃ここにどのような文章を書いていたのだろうか?(C++ 本のリスも良かったのであるが、ちょっと怖い目をしていた。)

うろ覚えであるが、その頃から「Python は数学処理に向いている」とどこかで読んでそう思っていた。これが NumPy の始まりだったのだろうか?(初版は 1995 年らしい)。指導教員とともに一か月ほど使ったことがあるが「やはり Perl の方が良いよね」ということで、また Perl に戻ってしまった。その頃は Python の影は薄く、Perl とそっくりな言語がまた作られたぐらいにしか思っていなかった。

その後もずっと Perl の方が人気が高かったように思うが、いつ頃からか 2010 年頃?AI の台頭とともに急に Python が登ってきた。今ではなんでもかんでも Python になって、某雑誌なんて何か月間も Python 特集が続いている。この優劣を分けた鍵は何だったのだろう?

私が個人的に思う鍵は、NumPy の存在である。これについては、次の(その3)で書いてみたい。それに加えて、ソフトウェア言語の人気には、予測の難しい一種の非線形的な現象が絡んでいるように思う。ある言語の人気が高まれば、その言語でいろいろなライブラリーが拡充してくる。すると、ますます多くの人が使うようになる。逆にその他の言語はますます使われなくなる。こうして、あっという間に圧倒的な差が生じる。このような現象は協同的といえる。

生物の世界でもこの協同現象は至るところに見つかる。例えば血中のヘモグロビンなどは、4つのサブユニットから構成されているが、一つ目のサブユニットに酸素がつくと、次のサブユニットには酸素がより付きやすくなる。すると、三番目にはますます酸素が付きやすくなる。逆に酸素が離れ始めると、ますます他のサブユニットからも酸素が外れやすくなる。この「more and more」「less and less」の現象により、肺では4つのサブユニット全てに酸素がくっつき、一方、体の端の毛細血管の中では酸素を全て組織に渡すことになる。このようにヘモグロビンの四量体構造はスィッチのような機能を発揮するのである。その他にもプロウィルスの活性化など、生物における協同性には枚挙にいとまがない。

いったんシーソーが傾き始めると、雪崩のように、もう止めることができなくなる程に独りでに傾いていく。よって、Python の人気にもこの協同性が生じてしまったのではないかと思う。その最初の一押しが NumPy だったのではないだろうか?

協同性には怖い裏面もある。先ほどのヘモグロビンのように逆行もまた可能だからである。つまり、いったん人気を失い始めると、まるでスィッチを切るかのように急降下する。しかし、Julia なども思ったほど伸びてきていない現状で、今のところまだ大蛇王国が続きそうな気がする。

さて、急降下してしまった Perl はどうなるのだろう?Perl7 が出てくれればと願っていたのに、なんだかまた降下してしまった。もう別に Perl5 のコピーそのままでよいので、とりあえずは Perl7 という旗を揚げてしまえばよいのではないだろうか?まあ、人気は落ちるだろうけど、きっと誰かが管理しながら、なんとかいつでも使える状況があと何十年かは続くことを期待している。

2023年9月7日木曜日

つれづれ思うこと Perl 編 その1

あまり堅苦しい論文の話ばかりを書いていても一向にブログが進まないので、もうちょっと気軽な内容も書くことにしました。

蛋白質の立体構造の計算でいつも困るのは、Protein-Data-Bank の昔のフォーマットが統一されていないこと。例えばアミド水素など、あるソフトウェアでは 'H' と書かれていないといけないのに(おそらくこれが正式)、別のソフトでは 'HN' と書かれていないと動かない。その他にも CH2 の β1, β2, β3 の割り当てなど、泣きたくなるような不一致がいくつもある。これを修正するのは一苦労で某友人もイライラが募るとのこと。なお、今後は mmCIF と呼ばれるフォーマットに統一されていくので、このような問題はなくなるようです。

そういう時にファイル変換のためのプログラムが役立つわけであるが、どの言語を使おうか?Python, Perl, Ruby, JavaScript どれでもよいのであるが、そもそもプログラミングが本職ではないので、できるだけ手っ取り早く、さっさとファイル変換を済ませたい。すると、どうしても過去に自分で作ったプログラムを少しだけ修正して目前の問題に間に合わせることになる。これが 30 年間も続くと、ずっとその言語一色という状況が起きてしまう。

それで私は Perl 一色だったのであるが、最近はウェブで「Perl 将来性」などと引くと、「オワコン = 終わったコンテンツ」などと嘆かわしいページばかりが目につくようになった。それとは対照的に Python はまだまだ鰻上りである。というわけで、数年前からちょっとでも慣れようと思い "無理して" Python で書くようにした。Perl も Python もどちらも似たものだろうと舐めてかかったのであるが、なんと Perl の何十倍も作るのに時間がかかってしまった。

何故か?決定的だったのは括弧の有無である。例えば Perl の場合

if ($abc == 0)
{
     $def = 3;
}

のように {  } を使うが、Python では使わずに行を右へずらす(インデント)。ちなみに、私は癖で

if ($abc == 3) {
    $def = 3;
}

のようには書かない。その理由は、{ と } がエディター上で縦に揃っていると、if 文の及ぶ範囲が一目で分かるためである。しかし、Python では括弧がないので、vi で Python プログラムを編集した時、if 文の階段が5段ぐらい入れ子になり、そこでインデントを間違えた瞬間に崩壊してしまった。間違えた!と気づいても、どこをどう修正してよいのか分からなくなるのである。他人の Python プログラムを破壊するのは簡単である。エディター上でスペースキーをちょこっと押してやると、もう動かなくなり、修正にたいへん時間がかかる。

一応、vscode などの高機能エディターを使うと、縦の補助線が出るので少しは助かる。しかし、昔の人はこのような補助線なしにどうやって Python プログラムを書いていたのだろう?

Perl にも面白いところがあって、例えば "123" などを数値とみてもよいし、文字列と見てもよい。計算の中でその変数を使うと(例えば、1 を足すなど)自動的に数値として解釈してくれる。しかし、Python ではそうではないので、ちゃんと(昔習った C 言語のように)数値と文字列の違いをきっちりと区別し、ある時にはいずれかへの変換をちゃんと書いてあげないといけない。「そんな事は当たり前だろう」と言われそうであるが、30 年間も Perl 温泉に浸かってしまうと、なんて Python は不便なんだと悪口を吐いてしまう。。。

あまり Perl ばかりを褒めていてもよくないので、Python を使い始めて「これは良い」と思った点も書こう。それは、Perl では変数はデフォルトで大局変数(グローバル)になっているのに対して、Python ではデフォルトで局所変数(ローカル)になっている点である。大局変数の方が書きやすいのであるが、時に変数名が重複してしまい、知らない間に保存してあった変数の値が変わってしまうこともあり得る。そのため、Perl では、これはローカル変数にしたいと思った時に変数の前に my を付ける。一方、Python では考え方が真逆であるので、普通に変数を設ければ、それは自動的に局所変数となる。よって、安心してプログラムを書ける。しかし、これも 30 年間グローバル変数に慣れてしまうと、Python で書いた時に「なんて窮屈なんだ。この何十個もある変数をどうやって子供のサブルーチン関数に渡したらよいのか?まさか全部を引数で?」と悩んでしまう(もちろん、オブジェクトにすればよいのだけれど)。

これを書いていて、今もう一つ Python で良かった点を思い出した。それは、引数にデフォルト値を設定できることである。これは便利。もしかして Perl にもちゃんと備わっていて、私が知らないだけなのだろうか?

2023年6月23日金曜日

NMR 誘導型指向性進化

S. Bhattacharya, E.G. Margheritis, K. Takahashi, A. Kulesha, A. D’Souza, I. Kim, J.H. Yoon, J.R.H. Tame, A.N. Volkov, O.V. Makhlynets & I.V. Korendovych (2022) NMR-guided directed evolution. Nature 610, 389–393.

蛋白質のどこかのアミノ酸を入れ替えて、より高い活性をもつ変異体を作りたい。この場合、換えるべきアミノ酸の場所をどうやって見つけるか?そこが問題です。活性を上げるには、酵素と基質の複合体が活性化エネルギーをまさに越えんとする時の構造(遷移状態)を安定化させる必要があります。これは言い換えると、この活性化エネルギーの山を下げて、そのモル比を高めるということになります。

蛋白質は常に動いており、あるモル比でそのような遷移状態の構造を一瞬なりとも採ることがあります(例えば 0.5% など)。ある変異によってそのモル比を上げることができれば、遷移状態になりやすい酵素を作れたことを意味します。結果として活性を上げることができます。そのためには、まずこの遷移状態を調べる必要があります。それには遷移状態アナログと結合させてあげるのがよいのですが、これは往々にして競争的阻害剤であることが多いです。強力な阻害剤は、遷移状態を模倣していることが多いのです。ここで基質を加えてしまうと反応が進んで終わってしまうので、遷移状態で構造をストップさせることができません。

さて、ここで蛋白質に阻害剤を加えることにより、その阻害剤が活性部位に結合し構造が遷移状態になったとします。これは induced-fit 的な表現ですが、population-shift 的に表現すると次のようになります。遷移状態をとった数少ない酵素に阻害剤が結合する。すると、残りの酵素から遷移状態をもつ構造がさらに汲み出される*。そしてそこにも阻害剤が結合して遷移構造をもつ複合体のモル比が増える。これが連鎖的に起こり、結果として複合体が大勢を占める。ここで * がより頻繁に起こるためには、もともと阻害剤がない状態でも、酵素が遷移状態をとりやすいような性質をもつ必要があります。そのような酵素を変異によって作ろうというわけです。

その時に NMR の化学シフトが大きく変化した残基は、遷移状態に強く関連している残基であることがわかります。そこで、その残基を変異すれば、遷移状態に移りやすい酵素を作ることができるわけです(この induced-fit と population-shift の本質は同じなのですが、我々はつい前者で考え勝ちです。しかし、論文では後者で議論していることが多く、そこが読んでいて理解しにくい要因になっているのかもしれません。

上記の方法を使って、著者らはもともと酵素活性を持たないヘム蛋白質(ミオグロビン)から Kemp 脱離反応を触媒する酵素を作り上げることに成功しました。ミオグロビンの変異体 H64V は少しだけ活性をもつことが知られていますので、それをスタートとしました。これに遷移状態アナログである阻害剤 6-NBT を加えたところ、ヘムの近くのみならず遠くも含む 15 残基において化学シフトが大きく変化しました。この変化を摂動とよび、一般的にこの chemical shift perturbation を CSP と呼んでいます。この 15 残基あるいは、その隣の残基のうち一つを、別の任意の種類のアミノ酸に変異させました。飽和変異法を使っていますので、ランダムな種類のアミノ酸に置換されます。

化学シフト変化は(NMR 分野ではよくやるように)まず 1H と 15N の化学シフト変化を組み合わせて定量します。複雑な式が書かれていますが、要は次のように処理します。スペクトル上で斜めにピークが移動したとすると、それは 1H も 15N も両方とも CS が変化したことを意味します。そして、その距離を定規で測定した場合の長さを摂動量(変化量)とします(単なる三角形のピタゴラスの三平方の定理です)。そして、その変化量が大きい残基を選び出してきます。基準は日本の受験でよく使われる偏差値の 60 以上、つまり上位 15% です。変異の結果 2-71 倍(平均 21 倍)も活性が上がったとのことです。そして、19 個のうち 9 個の変異は活性部位から離れたところにあったとのこと。化学シフトは、たとえ構造が変化していなくても、単に阻害剤などの化学物質がついただけでも変化します。よって、活性部位の近くの残基については、変化がそのような直接的影響による CSP なのか、それとも構造変化による CSP なのかはよく分かりません。両方の影響によるのかもしれません。それに対して遠くの残基の場合は、後者の(構造変化による CSP)だと言えるでしょう。著者らは、さらに遺伝子シャッフリングによって、Mb (L29I/H64G/V68A) が相乗的に高い活性を示すことを見つけました。ちょっと信じ難いですが、単なる H64V に比べて触媒効率(kcat/Km: ミカエリス・メンテンのプロットにおける原点での接線の傾き)が 6 万倍も上がっています。

従来法では、これほどまでに活性を上げることができませんでした。しかし、NMR を活用すると、飛躍的に活性を上げることができます。従来の方法では Km が下がる、つまり、酵素と阻害剤との結合親和性(正確ではないが Km は解離定数に相当)が強くなることによって活性が上がるのに対して、NMR を利用すると、さらに代謝回転数(kcat)まで上がります。この二つの効果が組み合わされて(kcat/Km)、驚くような活性上昇につながるようです。つまり、基質と酵素の親和性(1/Km)が上がるだけでなく、両者の複合体である遷移状態から反応が元方向にあまり逆行せず、それに打ち勝って生成物が速く遊離(kcat)してくるということです。親和性が上がった原因は、どうも結合ポケットが深くなって、基質がヘム鉄の近くにまで行けるようになったことによるようです。それ以外の部位では、構造はほとんど変わっていなかったとのことです。

このミオグロビン以外にもカルモジュリンを使って同じように Kemp 脱離反応の活性を上げています。1-round 目の変異で CSP が大きかった残基を置換しました。そして、2-round 目で再び阻害剤を入れると、また新たな残基に大きな CSP が出てくるようです。こうして何回かラウンドを繰り返しますが、NMR でホットスポットを見つけて変異させる方が、ランダムに変異させるより圧倒的に効率が高いようです。

この実験では 1H-15N HSQC が使われていますが、これを 1H-13C HSQC (or HMQC) にするとどうでしょうか?個人的には、あまりうまく行かないかもしれないと思います。1H/15N の化学シフトは構造変化に非常に敏感です。特に水素結合の強さや長さによって、1HN の化学シフト値は大きく変わります。活性は、目に見えないほどの小さな構造の変化で上下しますので、それを感知するには 1H-15N HSQC の方がずっと良いでしょう。逆にいうと、阻害剤(リガンド一般)が付くことによって、タンパク質内に張り巡らされた水素結合や疎水的相互作用のネットワークがほんの少しだけ変わります。非常に微妙な変化ですが、これによって、活性部位が遷移状態に変わります。このような接触のネットワークは 1H/15N 化学シフト値と直結しているため、この二次元スペクトルの変化がまさにホットスポットになるのだろうと考えています。

酵素は本来でしたら活性部位だけが大事で、そこだけを持っていたらよいように思います。ちょうど化学実験で使う触媒と同じです。しかし、実際には大き過ぎるほどの構造を持っています。この余計に見える部位に張り巡らされた原子どうしの相互作用のネットワークが実は重要で、これにより活性部位の変化を微妙に、かつ巧妙に制御しているのでしょう。このようなネットワークがどのような原理でなりたっているのかは、AlphaFold2 をもってしても予測できません(今は)。

2023年2月26日日曜日

防腐剤

ゲル濾過クロマトグラフィーをかけようと思い、ふと buffer の瓶を見ると、何やら少しばかり白っぽい。もやもやっとしたクラゲのような物が浮遊しており、瓶を振ってみると、それらがバラバラになって更に濁ってしまった。何かが泳いでいる!

そう、低温室が壊れてしまい、今は buffer 瓶を 30 度ぐらいの机に置いているのである(夏頃に草稿を書いた)。コロナ対策でドアは開け放しなので、冷房を入れていても部屋は生暖かい。すると、一週間ぐらいでクラゲが発生するようである。

一方、NaN3 を 0.02% ほど入れた buffer の方は、数ヶ月は経っているが全くの透明のままであった。冷蔵していないことを考えると、すごい効果。いつもアジ化ナトリウムを入れておくようにしているが、今回は忘れてしまったようである。対比させて効果を見たのは初めてであった。

NaN3 には 1H がないので、NMR スペクトルには無害である。窒素ガスが発生するので、シゲミサンプル管の中に泡が発生しやすいと聞いたことがあるが、これまでのところ、それを認識したことはない。Buffer や測定サンプルには、できるだけ入れておくようにしよう。

NaN3 は各地の事件で使われたため、今は毒物に指定されており、管理がまずまず厄介。金庫に入れて、使うたびに重量を測定している。使う時は、まず 2% のストック溶液を作っておき、それを buffer に 1/100 加えるようにしている。

---- 今は冬 -----

ところで、なぜ NaN3 を入れるとバクテリアの増殖が抑えられるのか全く知らなかった。いろいろ検索してみてもよいが面倒なので、Bing-AI に尋ねてみると、下記の回答が。

Hello, this is Bing. Sodium azide can prevent bacteria from growing by binding to heme-iron in their enzymes and blocking their respiration. However, not all bacteria are sensitive to sodium azide. Gram-positive bacteria are more resistant than gram-negative bacteria. What kind of bacteria are you interested in?

呼吸系の酵素のヘム鉄に不可逆的に結合して、酵素活性を阻害してしまうらしい。

Alphafold の不得意なところこそ NMR にとって得意

題記のような総説が出ましたので、読んでみました。

AlphaFold 2 and NMR Spectroscopy: Partners to Understand Protein Structure, Dynamics and Function

https://www.frontiersin.org/articles/10.3389/fmolb.2022.906437/full
published: 17 May 2022 doi: 10.3389/fmolb.2022.906437

2011 年頃には、蛋白質のフォールドのエネルギーをかなり正確に物理的に計算できるようになってきたが、それは小さい蛋白質に限られ、大きな蛋白質の場合には時間がかかり過ぎた。一方、似た配列があり、その構造がすでに分かっている場合には、それらを利用して構造を予測するという方法もとれたが(ホモロジーモデリング)、結果はどの程度ホモロジーがあるかに左右された。また、新しい蛋白質を設計するという分野からも folding について多くのことが分かった。このような技術の蓄積により、構造を予測するコンテスト(CASP)では、1994 から 2016 年の間、少しずつではあるが進展が見られていた。

しかし、急に AlphaFold2 (AF2) が飛躍的な進歩を見せた。NMR 構造が正解として示されたものの中で、ある蛋白質では AF2 で予測した構造の方が、NMR スペクトルによく合致した。これは NMR 研究者にとってはかなり屈辱的な結果である。AF2 は AI(人工知能)と deep learning(深層学習)を利用している。立体構造上で接触している残基は、進化の過程で共に同時に変異する傾向がある。AF2 はそのような multiple sequence alignment(多重配列アライメント)と接触との関係を学習し、立体構造の予測に利用している。

さて、では天然変性領域はちゃんと予測ができるのかという疑問が生じる。もともと固い構造があるわけではないので、そもそも構造を予測すること自体に意味があるのか?とも思えるが。これは、AF2 の結果で同時に表示される confidence(信頼性)が頼りになる。この値が低い領域は天然変性領域である可能性が高い。なお、後述するように、Fold と unfold した状態が平衡にあり、その fold 状態のモル比が非常に少ない時、AF2 は fold 状態をうまく予測できない。

また、水溶性蛋白質はよいとして、膜蛋白質ではどうかという点も興味深い。膜蛋白質は、PDB には 3% しか登録されていないが、プロテオームの 27% を占めるので、膜蛋白質の構造の予測は重要である。一部、膜に埋もれている部分が薄い蛋白質については失敗例も報告されてはいるが、全体として AF2 はうまく予測している。膜成分を学習には使っていないのに不思議ではある。

AF2 でアミロイド構造を予測するのは難しい。まず、アミロイドをとる配列の多くは少ない種類のアミノ酸からなり複雑性に欠ける。また、病気を引き起こすようなアミロイドの配列は自然選択をあまり受けておらず、これまでランダムに変異してきた。よって、多重配列アライメントによる構造の推測が効かない。さらに、同じ配列でも異なるアミロイド構造をとる場合もある。しかし、本来は内部コアに向いているべき疎水性領域が表面に露出した際にアミロイド構造をとるという傾向が見られることから、それを AF2 が学習していけば、将来は予測が可能になると見る人もいる。

静電的相互作用は、その蛋白質の構造はおろか、他の分子との相互作用にも大いに寄与する。pKa を正確に計算することはまだ難しいが、およその値であれば可能であり、AF2 で予測された構造をもとに、この計算が加速するだろう。

複合体の AF2 構造予測はなかなか難しい。その複合体の接触面が共進化してきた場合には予測が的中するが、蛋白質によっては、同じ面で複数種類の異なる分子と相互作用する場合もあり、AF2 がうまくいかない。そのような中で MSA を改良することにより、ヘテロ複合体の構造予測を進歩させている例も見られる(FoldDock)。

AF2 による構造は、CD や Trp 蛍光のデータの解釈に大きな助けとなる。さらに、X-線結晶構造解析における分子置換法にも役立つ。また、クライオ電顕の構造は低分解能であるが、ここに AF2 による部分構造を当てはめていくことにより、核膜孔のような巨大な構造のモデルも構築できる。また、微結晶の電子線回折は、普通の X 線結晶構造解析では小さ過ぎて解けないような構造でも解析できる。

X 線結晶構造解析やクライオ-EM 解析におけるサンプルの状態に対して、NMR 解析では、かなり生理的な条件を達成できる。とはいえ、NMR 構造よりも AF2 構造の方が正確だという報告もあり、特にループ部分などでは NMR の NOE 距離制限が集まりにくいために、AF2 の方が引き締まった構造をとるらしい。下記のプレプリントには「904 個の構造を比較した結果、3% の NMR 構造のみ AF2 構造より正しかった」との記述があり、これは由々しき事態である。
https://www.biorxiv.org/content/10.1101/2022.01.18.476751v1.full

AF2 は、複合体構造の予測、めずらしい構造の予測が苦手ではあるが、これは数年のうちに克服されるかもしれない。しかし、以下の4つは、機械学習そのものの特徴を考えると AF2 にとって克服が難しい。1)わずかなモル比の別構造が含まれていて、主構造との間で平衡状態になっている場合 2)翻訳語修飾の影響 3)小さなリガンドとの相互作用 4)主には天然変性蛋白質であるが、一瞬部分構造をとる場合(1と似た状況)。何と!これらは NMR の得意とするところである。

AF2 は常に主構造を出そうとする。しかし、蛋白質の中には数パーセントなりとも別(alternative)構造をとる場合もあり、その別構造が病気などに関連した重要な機能をもっていることもある。ヘモグロビンやカルモジュリンなどもそうである。それらの構造や、その間の平衡状態は NMR で解析することができる。H/D 交換実験を行えば、folding 中間体なども解析できる。AF2 の構造を初期構造として MD を動かし、NMR によって解かれた別構造を導き出せるかもしれない。

糖鎖を含め翻訳後修飾の影響も AF2 の不得意な領域であるが、今後 NMR などで翻訳後修飾の構造への影響の解析が進めば、それらを学習して AF2 が対応できるようになるかもしれない。

製薬企業では AF2 の構造をドラッグディスカバリーに役立てようとしている。しかし、活性部位の構造は、folding の規則から外れる場合が多く、AF2 の構造のうち活性部位については疑問が残るらしい(よって、ドッキングが失敗する)。そこで、NMR を使って創薬候補の低分子リガンドと蛋白質との相互作用を検出することの重要性が増す。最初に 1D 1H NMR をとる (STD, WaterLOGSY など)。次に 2D 1H-15N HSQC で蛋白質側を観測することで、結合部位を同定できる(ただし、帰属が必要であるが)。

今後、NMR により IDP の構造がたくさん解析され、Disprot のようなデータベースが拡充すれば、AF2 もそこから学習し、IDP の構造予測が現実化してくるかもしれない。

以上が総説の要約です(ChatGPT に書かせたわけではありませんが、もしかすると、もっと上手く要約してくれるかも)。NMR と AF2 を合わせた使い方としては、個人的には次のような方法もあるのかなと思います。AF2 で複合体構造を予測させると、時々それなりに二つの構造がくっついたような結果を出してきます。これが真か偽かの判定は容易ではありません。そこで、NMR で相互作用部位だけを同定して、AF2 構造がある程度正しいかどうかを検査することができるでしょう。相互作用部位の同定には帰属をするのが一番ですが、あまりに高分子でそれが叶わない場合には、その相互作用部位にちょっとだけ変異を入れて、どの NMR ピークが動くかで部分的に帰属してもよいでしょう。AF2 構造がない場合には、どこに変異を入れればよいか迷いますが、候補と言えども複合体構造が手元にあるのであれば、変異箇所を決めるのに大いに役立ちます。

また、結晶構造解析においても、全長ではなくドメイン構造で解析した方がよい場合もあります。問題は、配列上のどこからどこまでをドメイン範囲とすればよいかです。AF2 構造をもとに rigid な領域を選びだし、flexible な領域を DNA レベルで切り取ってしまえばよいのですが、果たしてそれが本当に結晶に結び付くのかどうかは疑問です。そのような場合、ちょっと NMR で二次元スペクトルを測ってみます。NMR スペクトルでは、rigid な部分と flexible な部分とでピークの線幅がかなり違ってきます。もし、1H/15N HSQC を見て「銀河みたい、美しい!」と感激すれば、その直感こそ正しい場合が多いです。

2023年1月1日日曜日

リン酸ナトリウムとリン酸カリウム

これは知らなかった。

生化学実験でよく使う「リン酸緩衝液 phosphate buffer」には大きく分けて二種類ある。リン酸ナトリウムとリン酸カリウムである。「どちらを使えばよいか?」と尋ねられたことがあったが、「どっちでも構わないよ」と答えてきた。実際、タンパク NMR の溶媒として使ってみて、差が見られたことは一度もなかった。もっとも血液にはナトリウムが多いので、血漿にもともとある蛋白質の場合にはリン酸ナトリウムバッファが良いのかな?ぐらいには思ったこともあったが、さして大きな理由があったわけでもなかった。

ところが下記の論文には(私にとって)驚くべきことが書かれていた。

K A Pikal-Cleland, N Rodríguez-Hornedo, G L Amidon, and J F Carpenter (2000) Protein denaturation during freezing and thawing in phosphate buffer systems: monomeric and tetrameric beta-galactosidase. Arch. Biochem. Biophys. 384(2), 398-406. doi: 10.1006/abbi.2000.2088

よく蛋白質溶液を冷凍保存し、使う直前に冷凍庫から取り出して解凍して使うが、その場合は、リン酸カリウムの方がよいとのことである。では、リン酸ナトリウム緩衝液を使った場合にはどうなるのか?これは 100 mM という比較的濃い緩衝液の場合であるが、もともとの pH 7.0 が、冷凍の際に 3.8 になることがあるというのである。pH 3.8 では、かなりの蛋白質が変性してしまい、解凍した時に沈殿を見るはめになる。10 mM であっても pH は 5.5 まで下がるらしいので、等電点沈殿を起こしてしまう蛋白質もあるだろう。ただし、液体窒素などを使って瞬間冷凍した場合には、そのような大きな pH 変化は起きない。

理由も書かれていて(ゆっくり)冷凍庫で凍らせると、不安定な Na2HPO4 が結晶化して沈殿してしまうためだそうだ。中性付近の pH は NaH2PO4 と Na2HPO4 との間のバランスで決まる。両者を等モルずつ混ぜると pH 6.8 付近になる。また、pH 7.5 にしたければ、それぞれを何対何で混ぜればよいかという表もネット上にある。凍らせる時に Na2HPO4 が優先的に無効になってしまうと、残る NaH2PO4 は(H が2個もあるので)溶液を酸性にもっていってしまう。ところが KH2PO4-K2HPO4 buffer の場合は、そのような事が起こらないのだそうだ(むしろ、ほんの少しだけ pH が上がる)。ただし、リン酸カリウムの場合でも、ゆっくり冷凍したり、ゆっくり解凍するとダメです。局所的に塩が集まってしまうので、蛋白質が沈殿になってしまいます。また、低温変性の影響も出てきます。

実際、溶液をエッペンドルフチューブに入れてゆっくり凍らせると、純水部分が周りから凍っていく。南極(北極?)の氷が海水ではなく純水であるのと同じである。すると、まだ凍っていない内部には、蛋白質や NaCl などの塩が濃縮されていき、さらに pH も下がって、蛋白質は沈殿してしまう。沈殿に気づくのは解凍してから後のことである。また、解凍の操作の時は上記とは逆に、蛋白質や塩の集まっているところから先に溶け出していく。そのような理由により、冷凍・解凍(freezing and thawing)をする際には、瞬間冷凍・瞬間解凍を目指さないといけない。前者には liquid-N2 を使えばよいが、後者はなかなか難しい。うっかり電子レンジでチンしてしまうと、逆に温度が上がり過ぎて卵焼きができてしまう。これも蛋白質の沈殿の一種ではあるが。

肉や魚の冷凍・解凍でも同じことが言え、できれば瞬間がよい。冷凍時間は電力を上げれば上げるほど短くできるが、解凍はそうもいかないので、なかなか難しい。電子レンジに解凍モードがあるが、もともと氷は電子レンジの電磁波を吸収しないので、氷を解かすのは苦手である。しかし、一旦少しでも溶けると、水は電磁波を吸収して一気に高温の水蒸気になってしまうため、今度は温め過ぎとなってしまう。

トリス(Tris-HCl)緩衝液の pH は温度に敏感である。冬に調製したバッファを春先に使うと、pH が 0.5 ぐらい下がっている。そのため、タンパク質が沈殿してしまったり、His-tag(Ni-NTA)カラムに蛋白質が吸着しなくなったりといった「怪事件」が起きてしまう。コロナの頃は、実験室のドアは開け放しだったので、冬はオーバーコートを着て、夏は汗だくで実験したが、すると上記のような事が起こり「はてな?」状態となった。等電点が 7.0 の蛋白質に対して、pH 7.5 の Tris-HCl buffer を使っていたためである。そこで pH 8.0 の Tris-HCl buffer に変えると、余裕ができて沈殿は一切でず、ゲル濾過でもきれいな溶出ピークが見られた。

今、除夜の鐘が鳴ってしまいました。それでは佳いお年を。