Symportalをdockerで動かす

本記事では、Symportalをdockerで動かす方法を記載する。

Symportalは褐虫藻メタバ―コディングから出力されたfastqファイルより褐虫藻をジェノタイピングするソフトだが、最近の解析環境のアップデート（特にMac OSや各種関係ソフト）に伴い、Symportalのymlファイルではうまく動かないことが多く、エラーが頻出している。

そこで、Symporatlが作動する環境を構築、docker hubにアップロードした。

正規にSymportalをインストールする場合は過去記事またはSymportal公式ホームページを参照。

<p><a href="https://qiita.com/gibukod/items/8260db4f63e244c6fde4">SymPortalのインストールと使い方（過去記事）</a></p>
<p><a href="https://symportal.org/">SymPortal公式ホームページ</a></p>

## Symportal
symportalはBenjamin C.C Humeが開発した、褐虫藻メタバーコーディングで得られたリードをジェノタイピングするソフトである。パイプラインとして作られており、rawデータをそのままインプットすることができる。以下参照論文。
<p><a href="https://onlinelibrary.wiley.com/doi/full/10.1111/1755-0998.13004">SymPortal: A novel analytical framework and platform for coral algal symbiont next-generation sequencing ITS2 profiling</a></p>

## Dockerのインストール
Linuxの場合は以下でインストールできます。
<p><a href="https://qiita.com/gibukod/private/f7d223993975ed903adb">LINUXにDockerをインストールする</a></p>
<br>

Macについては以下を参照
<p><a href="https://matsuand.github.io/docs.docker.jp.onthefly/desktop/mac/install/">Docker Desktop の Mac へのインストール</a></p>

## Symportalのインストール　v0.3.24
**※事前にdockerをインストールしてください。**

以下を順にターミナルで実行する。
```docker.sh
#docker imageをダウンロードする
docker pull gibukod/symportal:1.0

#コンテナを作成
docker run -itd -v /path/to/rawdata:/mnt --name symportal gibukod/symportal:1.0 /bin/bash
```
**`path/to/rawdata`を褐虫藻メタバのfastqファイルが格納されたディレクトリのパスに変更してください。**
<br>

## 実行前の準備
まず、作成したコンテナに入る
```
#作成したコンテナに入る
docker exec -it symportal /bin/bash
```
<br>

データベース作成のため、以下のコードを実行。（コンテナに初めて入るときに実行すれば、あとはしなくても大丈夫）
```sh
#SQLiteデータベースの作成
python3 /usr/local/src/SymPortal_framework-0.3.24/manage.py migrate

#参照配列の設定
python3 /usr/local/src/SymPortal_framework-0.3.24/populate_db_ref_seqs.py
```

<br>

以下を実行してsymportalをテストラン
```sh:テストラン
#symportalのインストールされているディレクトリへ移動
cd /usr/local/src/SymPortal_framework-0.3.24/

#テストラン
python3 -m tests.tests
```
<br>

インストールがうまくいっていると、実行後、以下のように表示される
```
ANALYSIS COMPLETE: DataAnalysis:
	name: testing
ANALYSIS COMPLETE: DataAnalysis:
    name: testing
    UID: 1

DataSet analysis_complete_time_stamp: 20240801T044230



Cleaning up after previous data analysis test: 1
Deleting /usr/local/src/SymPortal_framework-0.3.24/outputs/analyses/1
Cleaning up after previous data loading test: 1
Deleting /usr/local/src/SymPortal_framework-0.3.24/outputs/loaded_data_sets/1
```

## Symportalの実行
詳しい情報は以下のgithubに記載されている
https://github.com/didillysquat/SymPortal_framework/wiki


```sh:symportalの実行
#データの読み込み
/usr/local/src/SymPortal_framework-0.3.24/main.py --load /mnt --name first_loading

#読み込んだデータの確認
/usr/local/src/SymPortal_framework-0.3.24/main.py --display_data_sets

#分析の実行 --analyseの数字は読み込んだデータの確認でチェックする
/usr/local/src/SymPortal_framework-0.3.24/main.py --analyse 2 --name first_analysis --num_proc 3

#実行された分析の確認
/usr/local/src/SymPortal_framework-0.3.24/main.py --display_analyses

#実行結果の出力　--print_output_seqsの数字は実行された分析の確認でチェックする
/usr/local/src/SymPortal_framework-0.3.24/main.py --print_output_seqs 2
```
`/usr/local/src/SymPortal_framework-0.3.24/outputs/analyses`に実行結果が出力される。

# 実行結果をコンテナから持ち出す
コンテナを作成するときにマウントしているため、`/mnt`に実行結果をコピーする。
```
#実行結果をコピー
cp -r /usr/local/src/SymPortal_framework-0.3.24/outputs/analyses /mnt
```
<br>
外でもデータを編集できるよう、許可を与える。（コンテナ内で作成されたファイルはコンテナ外で操作ができないことがある）

```sh:許可を与える
#pythonを起動
python

#ライブラリをインポート
import os

# ディレクトリのパスを指定
directory_path = "/mnt/analyses"

# ディレクトリ内のすべてのファイルとフォルダに対して権限を設定
for root, dirs, files in os.walk(directory_path):
    for d in dirs:
        os.chmod(os.path.join(root, d), 0o777)
    for f in files:
        os.chmod(os.path.join(root, f), 0o777)

#pythonを終了
exit()

#analysesに許可を与える
chmod +777 /mnt/analyses
```

<br>
以下でコンテナからでる

```
exit
```
<br>

褐虫藻メタバのfastqファイルが格納されたディレクトリに`analyses`ファイルが出力されている。