library_plot_mirror
Draw a mirror plot from the latest library match, comparing measured MS/MS peaks with a ranked reference and returning a PNG or coordinate payload.
Instructions
直近の library_match_feature 結果から対向プロット(mirror plot)を描く。
上段が測定、下段が参照(rank 位の候補)。output="image"(既定)は
サーバ側で描画した PNG を返し、output="payload" は座標を丸めた
lipidmix.mirror.v2 JSON を返す(Use-LLLM 等、自前で描くクライアント向け。
v2 で採点外ピーク unscored_mz の層を追加)。
測定側の一致色分けには許容幅(ms2_tol)が要る——library_match_feature
が使った値(store の search_params か既定値)を自動で引き継ぐ。
.dbs の強度足切りで採点に入らなかった測定ピークは灰色で薄く描く
(last_match["unscored_mz"] を引き継ぐ)。採点は normalize_measured が
足切りした後のスペクトルに対して行うのに、図は足切り前の生ピークを描くため、
区別が無いと「描かれているのに採点されていない」ピークが黙って混ざる。
消さずに描くのは、消すと「MS/MS が取れていない」と読めてしまうため。
この層はラベル枠を取らず、凡例と caption の件数は該当ピークがあるときだけ
出る(足切りが 0 の run では図も caption も従来と変わらない)。
scale は縦軸の写し方で "relative"(既定)/ "sqrt" / "log10"。
precursor がベースピークのスペクトル(脂質の [M-H]- など)は relative
だと診断イオンが相対数 % に潰れて読めない——そのときに "sqrt" を使う。
上流 MS-DIAL も同じ問題を軸の切り替えで解いている
(ObservableMsSpectrum.CreateAxisPropertySelectors2 の Relative / Absolute /
Log10 / Sqrt)。Absolute は用意しない——対向プロットは単位の違う 2 つの
スペクトルを上下に並べるので、生の強度で並べても比較にならない。
label_policy は m/z ラベルの衝突回避の方式。どちらも強度降順に走査して
既に置いたラベルと重なるものを飛ばす(上流 Annotator.OnRender と同じ
貪欲法)が、重なりの見方が違う:
"auto"(既定)— 水平と垂直の両方が近いときだけ飛ばす。箱は ラベル自身の文字列を実測する。対向プロットは同じ側でもピークの高さが 大きく違うので、2 次元で見るほうが読めるラベルを多く残せる。"msdial"— 上流に忠実。水平距離だけを見て、箱は代表文字列"1000.00000"1 つで全ラベル共通にする。上流の MS2 ビューはOverlap="Horizontal, Direct"だが、この合成は OR で、全ラベルが同じ箱を 使うためDirectはHorizontalの部分集合になり実質Horizontal単独に 縮退している。縦にどれだけ離れていても m/z が近ければ飛ばすので、"auto"よりラベルは少なくなる。
どちらも上下は別枠で数える(上流は上下で別々の Annotator を持つため、
側をまたぐ衝突は起きない)。
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| rank | No | ||
| scale | No | relative | |
| output | No | ||
| label_policy | No | auto |