概要
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 を選択すると、各フィールドの出力判定が変わります。
excluded_for に一致した時点で他のルールは無効になります。
フィールドごとの挙動
CLI から --strain を渡しても MAG/MAG-WGS では出力されません。
MAG/MAG-WGS では未指定でも placeholder として出力されます。
EX_SOURCE フィーチャーに出力されます。
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配列)を使用。
--strain CLI--strain CLI将来の拡張方法
新しい 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
変更ファイル一覧
required_for・excluded_for 列追加(後方互換)。4フィールドに設定値を記載。
MetadataField.should_render(project_type) 等4メソッド追加。render_ex_source(project_type) 対応。get_field_definition() キャッシュ関数追加。
add_source_features() を TSV 駆動に変更。add_source_information() で isolate/strain を条件なく設定。
is_mag パラメータ廃止、project_type に統一。ハードコードされた MAG ブロックを削除。
isolate キーを GENOME_SOURCE_INFORMATION に追加。project_type を GENOME_CONFIG に格納。