Alphafold Databaseの立体構造に糖鎖を追加する

# 要旨
Alphafold　DatabaseからダウンロードしたPDBファイルに糖鎖構造を付加したい。
↓
[Glycosylator](https://github.com/ibmm-unibe-ch/glycosylator)というライブラリを使用すれば可能であることが分かったが、Alphafold DBからDLしたPDBにはプロトンが付加されておらず、Glycosylatorでは結合させる原子を除去する過程があるためエラーを吐いてしまう。
↓
[hydride](https://hydride.biotite-python.org/)というライブラリを使って水素を付加してから実行すると成功した。

# 方法
実行環境はColaboratoryで行った

Glycosylatorとhydrideは両方ともpipでインストール可能
```
!pip install glycosylator hydride
```
### グリカンの定義
まずは付加するグリカンを定義する。
グリカンはglycosylatorの例に記載されているものを使用するが、iupacで記載すれば作製可能である。
構造はpdbファイルで保存することができる。

```python
import glycosylator as gl

# this is GlyCosmos entry G09568JT
iupac = "Gal(b1-4)GlcNAc(b1-2)[Gal(b1-4)GlcNAc(b1-4)]Man(a1-3)[Gal(b1-4)GlcNAc(b1-2)[Gal(b1-4)GlcNAc(b1-6)]Man(a1-6)]Man(b1-4)GlcNAc(b1-4)GlcNAc"

glycan = gl.glycan(iupac)
glycan.to_pdb("my_glycan.pdb")
```

# タンパク質のプロトン付加
次に結合させるタンパク質を選択する。
今回はAlpha-1B-glycoprotein[(P04217)](https://www.uniprot.org/uniprotkb/P04217/entry#structure)を使用する。

alphafold databaseから構造をダウンロードし、hydrideで水素を付加する。
```
!hydride -i AF-P04217-F1-model_v4.pdb -o output_structure.pdb --charges 7.0
```
←がhydrideで水素付加したもの、→がAlphafold DBからDLしたもの
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330449/46afcbe8-9d3b-7b5a-120c-157be9dd88dd.png)
きちんと水素が付加されていることがわかる。

### タンパク質とグリカンの結合
これをglycosylatorで読み込みグリカンを付加していく。
今回はN型糖鎖として結合する。
```python
protein_path = "/content/output_structure.pdb"
glyco_path = "/content/my_glycan.pdb"

protein = gl.scaffold(protein_path)
protein.reindex()
protein.infer_bonds()

glycan = gl.glycan(glyco_path) # pathからも読み込み可能
glycan.root_atom = glycan.get_atom("C1", residue=1)

# glycosylate the protein at N-glycosylation sites
glycoprotein = gl.glycosylate(protein, glycan, sequon="N-linked")

glycoprotein.to_pdb("my_glycoprotein.pdb")
```
結合する場所は以下のように検索できる。
```python
protein.find("N-linked")
#{Chain(A): [Residue(ASN, 44),
#  Residue(ASN, 179),
#  Residue(ASN, 363),
#  Residue(ASN, 371)]}
```

### 位置の最適化
ただしこれで作製された結合では位置がランダムでタンパク質構造の中にグリカンが埋まってしまっていることがある。
そのため最適化を実行する。これには時間を要する（今回は10minぐらい）。
```python
# before we optimize the glycoprotein we "hollow out" the protein scaffold, that means removing all the parts that are "inside" the protein.
# this is convenient because it reduces the number of atoms that need to be considered during optimization.
glycoprotein.hollow_out()

# glycosylator comes with a pre-made function to perform steps 1 and 2 automatically.
# It produces a ResidueGraph for the scaffold and a list of edges that belong to the glycan residues, for optimization.
graph, edges = gl.optimizers.make_scaffold_graph(glycoprotein)

env = gl.optimizers.DistanceRotatron(graph, edges, pushback=4, crop_nodes_further_than=1.2, radius=18)

optimized = gl.optimizers.optimize(glycoprotein, env, "swarm")
optimized.to_pdb("glycoprotein.optimized.pdb")
```
緑色が最適化後、水色が最適化前
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330449/a4817e6f-d96f-0ac8-7d6a-e2735b8a1257.png)
水色では埋まっていたグリカンが緑色ではいい感じの場所になっている。


## ツールについて

## Alphafold Database
（以下ChatGPTの説明）
Alphafold Databaseは、DeepMindとEMBL-EBIが共同で開発した、蛋白質の3次元構造をアミノ酸配列から予測するAIシステムです1。Alphafold Databaseは、UniProtという蛋白質の配列と機能情報を収集する世界最大のデータベースと連携しています2。UniProtに登録されている2億以上の蛋白質配列に対して、Alphafold Databaseは高精度の構造モデルを提供しています1。これらのモデルは、科学研究を加速するために、学術的にも商業的にも自由に利用できます1。Alphafold Databaseは、ウェブサイトから検索したり、ダウンロードしたりすることができます。また、DeepMindのColab notebookやオープンソースコードを使って、自分でAlphafoldの予測を生成することもできます1。Alphafold Databaseは、蛋白質の構造と機能を理解し、生物学的な研究を進めるための有力なリソースです。

## Glycosylator
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330449/e541ac12-6410-becb-1b7e-2e58ea1e0b5c.png)
(説明文翻訳)
Glycosylatorは糖鎖の同定、モデリング、修飾のためのPythonフレームワークです。Glycosylatorは糖鎖の原子モデルを構築し、タンパク質や膜をグリコシル化することができる。Glycosylatorは、グリコシル構造の衝突を最小化するためにコンフォメーション最適化を実行したり、個々の糖鎖の代替コンフォメーションをサンプリングしたりすることができる。Glycosylatorは様々なファイル形式をサポートしており、RDKitなどの他のライブラリと連携して研究ワークフローを促進することができる。

github: https://github.com/ibmm-unibe-ch/glycosylator
論文: https://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-019-3097-6

## hydride
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330449/bebd873c-ac5f-f9e2-1bdd-8aedaa5d26a4.png)

(説明文翻訳)
シミュレーションや水素結合の検出から単なる視覚的解析に至るまで、構造生物学における多くのタスクは完全な分子モデルを必要とする。しかし、実験的に決定された構造のほとんどは、水素原子のサイズと電子密度が小さいため、水素原子の位置を含んでいない。

HydrideはPythonで書かれた使いやすいプログラムとライブラリで、既知の結合長と結合角に基づいて分子モデルに欠落している水素原子を追加します。特定の分子の力場パラメータを必要としないので、小さなリガンドから大きなタンパク質複合体まで、ほとんどすべての有機分子に水素原子を追加するために使用できます。

homepage: https://hydride.biotite-python.org/#
論文: Kunzmann, P. Anter, J. M. & Hamacher, K. Algorithms Mol. Biol. (2022) 17:7.
https://doi.org/10.1186/s13015-022-00215-x