化合物の表を一括処理するとき、計算値が元のどの行に対応するかを保っておくと、結果の確認や再処理が楽になります。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で保つことが、表計算やファイル処理から組み込みやすくする設計の一つです。