化合物の表を一括処理するとき、計算値が元のどの行に対応するかを保っておくと、結果の確認や再処理が楽になります。chematicのcanonicalize_smiles_batch_jsonは、入力順に、元のSMILESと処理結果をまとめたレポートを返します。

3件の入力を、3件のレポートにする

CCO、C1CC、OCCをこの順に渡すと、次の対応が得られます。これは公開npmパッケージv1.1.2で確認した例です。

input_index  input  status    canonical_smiles
0            CCO    accepted  C(C)O
1            C1CC   rejected
2            OCC    accepted  C(C)O

C1CCの行には、環を閉じる記号を確認するための解析エラーも入ります。確認したい行はinput_index: 1で、その後のOCCはinput_index: 2のままです。元の表に化合物IDがあれば、この番号を使って対応づけられます。

input_indexは0から始まります。ヘッダーが1行ある単純なCSVなら、表の行番号はinput_index + 2です。読み込み時に行を選別する場合は、あらかじめ元の行番号も一緒に持たせると対応を保てます。

各行と、全体の件数を一緒に返す

レポートの各行にはinput、status、解析できた場合のcanonical_smilesが入ります。全体にはinput_countとrecord_count、accepted_count、rejected_countなどが入ります。上の例では入力と結果がともに3件で、解析できたのが2件、確認するのが1件です。

利用者側では、元のSMILESを残したまま物性計算や類似度検索へ進めます。行番号で結果を結び付けておけば、確認した行を直して再処理する際にも同じ表を使えます。

Rustの処理をPythonとWASMへつなぐ

このレポートは、RustのSmilesBatchCanonicalizerが返す入力順の結果を、PythonとWASMのAPIからJSONで利用する仕組みです。PythonではSMILESのリスト、WASMでは区切り文字を指定した文字列を渡します。呼び出し方は各環境に合わせ、レポートでは入力との対応を確認できます。

実装はバッチ処理、Python API、WASM APIで確認できます。入力と計算結果の対応をAPIで保つことが、表計算やファイル処理から組み込みやすくする設計の一つです。