DFAST — DDBJ MSS 提出ルール仕様書 / 2026-06-24

MAG / MAG-WGS
フィールド出力ルール

project_type に応じたメタデータフィールドの条件付き出力制御

概要

DFAST の DDBJ MSS 提出ファイル(.ann)生成において、従来は is_mag フラグによるハードコードで MAG 固有フィールドを制御していました。この実装では新しい project_type への対応のたびにコード変更が必要となる問題がありました。

本実装では metadata_definition.tsv に required_for・excluded_for の 2 列を追加し、TSV 設定だけでフィールドの出力条件を制御する仕組みに置き換えました。新しい project_type への対応は TSV 編集のみで完結します。

対象 project_type

project_type 区分 genome タイプ DDBJ division
mag MAG — Metagenome-Assembled Genome complete ENV
mag-wgs MAG-WGS(ドラフトMAG) draft ENV
gnm 通常ゲノム complete BCT / etc.
wgs ドラフトゲノム draft BCT / etc.

制御の仕組み

TSV 列の役割

列番号 列名 型 意味
7 mss_required TRUE / FALSE project_type に依存しないデフォルト必須フラグ。TRUE の場合、値が空でもプレースホルダーを出力する
10 required_for カンマ区切り project_type ここに列挙された project_type でのみ必須(値が空でもプレースホルダーを出力)
11 excluded_for カンマ区切り project_type ここに列挙された project_type では出力しない(値があっても除外。最優先)

主要フィールドの TSV 設定値

# フィールド名    mss_required  required_for      excluded_for
strain               TRUE          —                 mag,mag-wgs
isolate              FALSE         mag,mag-wgs        —
metagenome_source    FALSE         mag,mag-wgs        —
environmental_sample FALSE         mag,mag-wgs        —

出力判定コード(MetadataField)

def should_render(self, project_type: str) -> bool:
    if project_type in self.excluded_for:
        return False      # 除外 — 値があっても出力しない
    if self.value:
        return True       # 値あり → 常に出力
    return self.effective_required(project_type)  # 必須なら空でも出力

def effective_required(self, project_type: str) -> bool:
    if project_type in self.excluded_for:  return False
    if project_type in self.required_for:   return True
    return self.mss_required

優先順位ルール(インタラクティブ)

project_type を選択すると、各フィールドの出力判定が変わります。

project_type:
フィールド
mss_required
required_for
excluded_for
出力結果
strain
isolate
metagenome_source
environmental_sample
⚡
優先順位: excluded_for > required_for > mss_required
excluded_for に一致した時点で他のルールは無効になります。

フィールドごとの挙動

strain string
wgs / gnm 出力(値あり)
wgs / gnm(空) プレースホルダー
mag / mag-wgs 除外(値があっても)

CLI から --strain を渡しても MAG/MAG-WGS では出力されません。

isolate string
wgs / gnm(値あり) 出力
wgs / gnm(空) 出力なし
mag / mag-wgs(値あり) 出力
mag / mag-wgs(空) プレースホルダー

MAG/MAG-WGS では未指定でも placeholder として出力されます。

metagenome_source string
wgs / gnm(値あり) 出力
wgs / gnm(空) 出力なし
mag / mag-wgs(値あり) 出力
mag / mag-wgs(空) プレースホルダー

EX_SOURCE フィーチャーに出力されます。

environmental_sample boolean
wgs / gnm(値あり) 出力
wgs / gnm(空) 出力なし
mag / mag-wgs(空) valueless 出力

boolean 型のため値なしでも qualifier 行として出力(INSDC valueless qualifier)。値を指定した場合も同様の空行で出力されます。

ff_definition の切り替え

DDBJ フラットファイルの DEFINITION 行テンプレートも project_type に応じて自動切り替えされます。MAG/MAG-WGS では @@[strain]@@ の代わりに @@[isolate]@@ が使われます。

project_type ff_definition テンプレート
mag @@[organism]@@ @@[isolate]@@ DNA, complete genome
mag-wgs @@[organism]@@ @@[isolate]@@ DNA, @@[submitter_seqid]@@
gnm @@[organism]@@ @@[strain]@@ DNA, complete genome
wgs @@[organism]@@ @@[strain]@@ DNA, @@[submitter_seqid]@@

検証結果

全パターンのゲノムは example/sample.lactobacillus.fna(3配列)を使用。

out_mag/mag_full/
MAG + 全項目記入
isolate = MAG-001(値付き)
metagenome_source = soil metagenome
environmental_sample valueless 出力
strain 出力なし
out_mag/mag_wgs_full/
MAG-WGS + 全項目記入
isolate = MAG-002(値付き)
metagenome_source = soil metagenome
environmental_sample valueless 出力
strain 出力なし
out_mag/mag_min/
MAG + project_type のみ
isolate 空のプレースホルダー
metagenome_source 空のプレースホルダー
environmental_sample valueless 出力
strain 出力なし
out_mag/mag_wgs_min/
MAG-WGS + project_type のみ
isolate 空のプレースホルダー
metagenome_source 空のプレースホルダー
environmental_sample valueless 出力
strain 出力なし
out_mag/mag_full_strain/
MAG + 全項目 + --strain CLI
strain 出力なし(CLI 指定も無効)
isolate・metagenome_source 正常出力
out_mag/mag_strain_only/
MAG + project_type のみ + --strain CLI
strain 出力なし
isolate 空のプレースホルダー
metagenome_source 空のプレースホルダー
✓
全パターンで期待通りの出力を確認。テストスイート 46 件すべてパス。

将来の拡張方法

新しい project_type に対応する場合、コードの変更は不要です。metadata_definition.tsv の該当行の required_for または excluded_for 列にカンマ区切りで project_type を追加するだけです。

例: 新しい project_type env-sample を追加

# required_for 列に追記するだけ
metagenome_source  ...  FALSE  .*  mag,mag-wgs,env-sample
environmental_sample  ...  FALSE  .*  mag,mag-wgs,env-sample
⚠
TSV は後方互換です。列 10・11 のない既存の行はそのまま動作します(デフォルトは空セット)。

変更ファイル一覧

dfc/utils/metadata_definition.tsv required_for・excluded_for 列追加(後方互換)。4フィールドに設定値を記載。
dfc/utils/metadata_util.py MetadataField.should_render(project_type) 等4メソッド追加。render_ex_source(project_type) 対応。get_field_definition() キャッシュ関数追加。
dfc/genome.py add_source_features() を TSV 駆動に変更。add_source_information() で isolate/strain を条件なく設定。
dfc/utils/ddbj_submission.py is_mag パラメータ廃止、project_type に統一。ハードコードされた MAG ブロックを削除。
dfc/utils/config_util.py isolate キーを GENOME_SOURCE_INFORMATION に追加。project_type を GENOME_CONFIG に格納。
tests/test_mag.py MAG/MAG-WGS 対応の新規テスト 46 件(単体・統合・DDBJ出力検証)。