Developer - ncc-gap/GCATWorkflow GitHub Wiki

このページの内容は開発者向けです。

ディレクトリ構成

GCATWorkflow パッケージは scripts/ と tests/ ディレクトリから構成されています。
scripts/ にはソースコードが、tests/ にはテストコードが入っています。
各ワークフローのソースコードは scripts/gcat_workflow/ 配下のディレクトリにワークフロー名のディレクトリに配置されています。

  • data/snakefile.txt ... ワークフローの本体です。configure のとき、出力ディレクトリに snakefile としてコピーされます。
  • data/default.ini ... gcat_wirkflow の configure ファイル雛形です。設定ファイルのセクション、オプションおよびデフォルト値を定義します。
  • resource/xx.py ... 各ステージの実行スクリプトを作成します。
  • configure.py ... congiure のとき、config.yml を作成します。 (出力ディレクトリの作成や bam と fastq のリンク作成も行います)
  • sample_conf.py ... サンプルシート解読を行います。

scripts/gcat_workflow/cores ディレクトリ配下は共通関数です。
編集するときは十分ご注意ください。

ワークフロー編集における基本的な考え方

1.各タスクは "gcat_runner" で実行します。
各ステージ (resourceディレクトリ配下) ではこの "gcat_runner" に入力するための shell_xx.sh, singularity_xx.sh, conf_xx.yml を作成します。
まずは手動で shell_xx.sh, singularity_xx.sh, conf_xx.yml 3点セットを作成し、 "gcat_runner" で正しく動作することを確認したのち、ソースコードの編集を行うのが良いでしょう。

2.実際のワークフローは snakefile と config.yml で制御します。
各ワークフローの config.py では config.yml を生成しています。
まずは snakefile と config.yml を手動で編集したのち "snakemake -n" コマンドで正しく動作させて、snakefile, config.yml の完成形を把握してから、ソースコードの編集を行うのが良いでしょう。

既存のステージを仕様変更する

前述のとおり、各ステージは scripts/gcat_workflow/resource/xx.py にあります。
適宜変更してください。

既存のワークフローに対し新しいステージを追加する

1.scripts/gcat_workflow/xx/sample_conf.py を編集します。

ステージに合わせて変更します。
よほどのことがない限り [bam_import] [bam_tofastq] [fastq] を編集する必要はないでしょう。
analysis stage をステージに合わせて編集します。

2.scripts/gcat_workflow/xx/configure.py を編集します。

mutation や qc ステージなど既存のステージを参考に、追加するステージをコールするよう変更します。
ペアのノーマルサンプルやコントロールパネルがない場合は、rna/expression をもとにするのが良いでしょう。

3.scripts/gcat_workflow/xx/resource 配下にステージを追加します。

上述の「既存のステージを仕様変更する」を参照してください。

4.scripts/gcat_workflow/xx/data/snakemake.txt を編集します。

mutation や qc など既存ステージを参考にステージを追加します。

新しいワークフローを追加する

1.ワークフロー名を決める
→ここでは new_flow とします。

2.scripts/gcat_workflow/ ディレクトリ配下に new_flow ディレクトリを作成し、既存のワークフローディレクトリの中身を一式コピーする。

コピーする元は作成するワークフローの特徴によって決めるとよいでしょう。

  • DNA でペアリード固定、出力は cram → germline/ ディレクトリもしくは somatic/ ディレクトリ
  • RNA でシングルリードもある。 → rna/ ディレクトリ

→ここではgermlineディレクトリをコピーするものとします。

3.scripts/gcat_workflow/new_flow/sample_conf.py を編集します。

ステージに合わせて変更します。
上述の「既存のワークフローに対し新しいステージを追加する」を参照してください。

4.scripts/gcat_workflow/new_flow/configure.py を編集します。

"gcat_workflow.germline" を "gcat_workflow.new_flow" に変更します。

さらに、ステージに合わせて変更します。 上述の「既存のワークフローに対し新しいステージを追加する」を参照してください。

5.scripts/gcat_workflow/new_flow/resource 配下にステージを追加します。

上述の「既存のステージを仕様変更する」を参照してください。

6.scripts/gcat_workflow/new_flow/data/snakemake.txt を編集します。

上述の「既存のワークフローに対し新しいステージを追加する」を参照してください。

7.scripts/gcat_workflow/configure_if.py を編集します。

new_flow ルートを追加します。

8.gcat_workflow を編集します。

'analysis_type' に 'new_flow' を追加します。

TIPS

  1. gcat_conf から設定ファイルの値を取得する

従来の genomon_conf は configparser クラスインスタンスでしたが、今回より gcat_conf クラスのメンバとして configparser クラスインスタンスを追加しました。
そのため、gcat_conf.parsed_conf.get(SECTION, OPTION) で取得することもできますが、getter を追加しましたので、ご利用ください。

function 説明
get(section, option) 通常のgetter
getboolean(section, option) boolean 型 の getter
path_get(section, option) PATH を取得するとき、PATHチェックを行う。なければ raise Error
safe_get(section, option, default) 値取得失敗時、raise Error せずに default を返却する

TODO

※ 将来的には snakemake コマンドを gcat_workflow コマンドに入れ込むことも可能です。 詳しいオプションは snakemake 公式 を参照してください。

Pythonソースコード例

import snakemake
success = snakemake.snakemake(wdir + '/snakefile', workdir = wdir, dryrun = True)