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
- 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)