library_match_feature
Matches measured MS/MS spectra in .dcl files against a loaded reference library by precursor m/z or spot ID and returns top-scoring candidates as a TSV summary.
Instructions
測定 MS/MS(.dcl)を参照ライブラリ(library_load 済みの store)と照合し、
上位候補を返す。
照合の対象は precursor_mz か spot_id のどちらか一方で指定する。
spot_id(MasterAlignmentID。eic_search 等で引ける)を渡すと、precursor m/z・
RT・極性を同じバッチの .arf2(arf2_path、省略時は現在のデータフォルダ)から取り、
測定スペクトルはアラインメント .dcl(dcl_file、省略時は .arf2 と同じバッチ)の
そのスポットの代表 MS/MS を使う。precursor が ARF2 と ±0.01 で合わなければ
照合せず status="dcl_precursor_mismatch"、ID が無ければ spot_not_found。
rt / ion_mode を明示すれば ARF2 の値より優先する。
ion_mode は "positive" / "negative"(大小は問わない——store.candidates()
が COLLATE NOCASE で比較するため、PAI2 由来の IonMode.Positive.name
のような "Positive" 表記もそのまま渡してよい)。
mz_tol / ms2_tol / rt_tol は明示指定が無ければ store の search_params
(.dbs 由来なら実値)を使い、それも無ければ既定値
(_DEFAULT_MZ_TOL / _DEFAULT_MS2_TOL / _DEFAULT_RT_TOL、現在の値は
0.01 / 0.025 / 0.2)を使う。これらは参照ライブラリの候補検索(store.candidates()
の precursor m/z 窓・RT 窓)にだけ効く。 .dcl から測定 MS/MS を引く窓は
_measured_spectrum 内部の固定既定(dcl/reader.py と同じ mz_tol=0.01/
rt_tol=0.2)を常に使い、ここの引数や store の search_params の影響を受けない
(最終レビュー Important 7: .dbs の RtTolerance 既定 100.0 のような
ライブラリ用の値を .dcl 側の RT 窓に流用すると、同じ precursor m/z の
別ピークの測定スペクトルを黙って拾ってしまうため、2 つの窓を分離した)。
足切り(relative_amp_cutoff / absolute_amp_cutoff)と質量範囲
(mass_range_begin / mass_range_end)も同じ search_params から採って
採点(match_spectrum)に渡す——検証 CLI(scripts/verify_spectral_match.py)
と同じ集合(最終レビュー Important 2)。
.dcl に MS/MS が無い(未取得)場合は status="not_found" を返す——
「候補と合わなかった」のではなく「照合する測定スペクトルがそもそも無い」ことを
区別するため、dcl_find_msms と同じ文言の方針に揃える。
候補は total_score の降順で返す(rank 列・ranked_by フィールドが
同じ基準を指す)。MS-DIAL の総合スコア(上流 GetTotalScore)で、
rt + precursor_mz + (weighted+simple+reverse)/3 + matched_peaks_percentage
の正規化しない和——1 を超える。組み立て方は戻り値の scoring が明示する
(RT 項が入ったかは .dbs の IsUseTimeForAnnotationScoring 次第で、
数値だけを見ても分からないため)。同点は候補順を温存する(安定ソート)。
上流の順位付けと完全に同じではない。 MsScanMatchResultContainer.ResultOrder
は (IsManuallyModified, IsReferenceMatched, IsAnnotationSuggested, Priority, TotalScore) の辞書順で、TotalScore は最後のタイブレークにすぎない。
支配項の IsReferenceMatched は脂質クラス固有の判定
(Lipidomics/、上流 66,932 行)に依存するため移植していない。実データでは
この判定が無いと全候補が True になってゲートとして働かないので、
total_score 単独比較が現実的な最良の近似という位置づけ。
帰結として、上位に化学的にありえない候補が残ることがある
(docs/output_format/library.md §14.9)。
top_n は上位何件を返すかの上限(既定 5)。負値を渡すと全件を返す
(明示的な仕様ではなく Python のスライス挙動に由来する副作用的な動作
——件数を絞りたくないだけなら大きな正の値を渡すこと)。
候補一覧は TSV(列名 1 回)で返す。スペクトル座標と alignment は戻り値に
含めない(LLM の文脈を食うため)。座標は session.library.last_match に
持ち、library_plot_mirror がそこから読む。
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| rt | No | ||
| top_n | No | ||
| mz_tol | No | ||
| rt_tol | No | ||
| ms2_tol | No | ||
| spot_id | No | ||
| dcl_file | No | ||
| ion_mode | No | ||
| arf2_path | No | ||
| precursor_mz | No |