-
-
Notifications
You must be signed in to change notification settings - Fork 1
File Formats and Import Export JP
このページは、MoleditPy が開く・インポートする・保存する・エクスポートできるすべてのファイル形式を、ui/io_logic.py(IOManager)、ui/export_logic.py(ExportManager)、ui/string_importers.py(StringImporterManager)に基づいて一覧化したものです。「2D」は 2D エディタのキャンバスに反映される形式、「3D」は 3D ビューアのみに反映される形式を意味します。
推奨・既定 の保存形式です(File ▸ Save Project / Ctrl+S、Save Project As... / Ctrl+Shift+S)。
-
IOManager.save_project_as/save_as_jsonによって UTF-8 の JSON(json.dump(..., indent=2, ensure_ascii=False))として書き込まれ、内部に"format": "PME Project"のマーカーと"version"フィールドを持ちます。 -
create_json_data()(StateManager)が編集セッション全体をシリアライズします。詳細はStateManagerの実装次第ですが、アプリ自身の README/マニュアルによれば、2D 図(原子・結合・位置・電荷・ラジカル・立体表示)、生成/読み込み済みの 3D 構造、キラルラベルの状態が含まれます。さらにプラグインがregister_save_handler/register_load_handlerをフックできるため、プラグイン独自の状態(例:PMEFF の幾何オーバーライド、Metadata Saver プラグインのデバッグ用フィールドなど)も同じファイルに書き込まれます。 - 読み込み時(
Open Project.../Ctrl+O、またはFile ▸ Open Project...)、load_json_data()は"format"マーカーを確認し(一致しなければ「This file is not a valid PME Project format.」で拒否)、"version"が"1.0"でない場合は警告を出しつつも読み込みを試みます。 - 破損した/形式の違う JSON、ファイルが見つからない、データ構造の不一致は、それぞれ専用のダイアログ(
Invalid Format/Project Load Error、実際のjson.JSONDecodeError/KeyError等のメッセージ付き)として表示され、汎用の失敗表示にはなりません。 - 読み込み後、3D カメラはアイソメトリックにリセットされ、短い
QTimerの遅延の後にビューが再フィットされます。
-
Export ▸ PME Raw Format...(save_raw_data)でpickle.dump(get_current_state(), f)により書き込まれ、Open Project File(拡張子による自動判定)または明示的にload_raw_dataで読み込まれます。 -
セキュリティに関する注意(プロジェクト README より): この形式は Python の
pickleを使用しており、デシリアライズ時に任意のコードが実行される可能性があります。自分自身が作成した.pmerawファイルのみを開くようにし、共有する場合は.pmeprjを使ってください。これはこのレガシー形式が持つ、意図的かつ既知のリスクであり、バグではありません。 - 読み込み失敗は
pickle.UnpicklingError、EOFError、ImportError(もう存在しないクラスを参照する.pmeraw)を明示的に捕捉し、「無効なプロジェクトファイル形式」として報告されます。
File ▸ Import ▸ MOL/SDF File...(load_mol_file):
-
.molファイルはテキストとして読み込まれた後、fix_mol_block()によって、カウント行がV2000/V3000を宣言していない場合は有効なV2000タグになるようパッチされます(手編集された/非標準の MOL ファイルのカウント行不正に対する防御です)。 -
.sdfファイルはChem.SDMolSupplier(file_path, removeHs=False)を使用し、ファイル内の 最初の 分子のみを取得します — メイン app には複数分子 SDF のブラウザはありません(一部のプラグイン、例えば OpenBabel Conversion Tool が複数分子対応を追加します)。 - どちらの経路も RDKit の既定設定で
sanitize=Trueとしてパースし、Chem.Kekulize()を実行します。ファイルにコンフォーマがなければ 2D 座標を計算します(AllChem.Compute2DCoords)。立体化学(くさび形/破線、E/Z)は解析済みの 3D/2D 幾何から再割り当て・再くさび形化されます(AssignStereochemistry+WedgeMolBonds)— 2D 座標が再計算される場合でも立体化学は保持されます。 - インポートされた構造は、既に描かれている内容を上書きするのではなく、キャンバス上の既存内容の右側(一番右の原子から 80 px オフセット)に配置されます — MOL/SDF インポートは置き換えではなく追加です。
- 読み込み/パースに失敗した場合(
Chem.MolFromMolBlock/SDMolSupplierがNoneを返す、またはOSError/ValueError/RuntimeError/AttributeError/KeyErrorのいずれか)、実際のメッセージ付きで「MOL Import Error」ダイアログが表示されます。
File ▸ Export ▸ 2D Formats ▸ MOL File...(save_as_mol):state_manager.data.to_mol_block()(現在の 2D 構造)を .mol ファイルとして書き出します。ヘッダーコメント行には、存在すれば RDKit の既定ヘッダーの代わりに MoleditPy Ver. {VERSION} 2D が刻まれます。
File ▸ Import ▸ SMILES... / InChI...(string_importers.py):QInputDialog のテキスト入力が Chem.MolFromSmiles/Chem.MolFromInchi に渡されます。成功すると 2D 座標が計算され、分子はケクレ化され、立体表示は再割り当て/再くさび形化され、MOL インポートと同じ方法(既存内容の右側にオフセット、キャンバスが空ならビューポート中央)で 2D キャンバスに追加されます。空文字列やパースできない文字列は、例外を投げる代わりにステータスバーで「Invalid SMILES」/「Invalid InChI」と報告されます。メイン app 自体には SMILES/InChI のエクスポート機能はありません — 分子解析ウィンドウは現在の分子の計算済み SMILES/InChI 文字列を表示します(読み取り専用、コピー可能)が、専用の「SMILES としてエクスポート」というファイルアクションはありません。PubChem 系プラグインや MCP Server プラグインが SMILES の相互変換機能を追加します。
File ▸ Import ▸ 3D XYZ (3D View Only)...(load_xyz_for_3d_viewing → _mol_from_xyz_lines):
- 標準的なヘッダー付き XYZ(
N原子数の行、タイトル/コメント行、続くN行の原子行)をパースします。有効な原子数整数として解釈できない行があれば、ファイル全体をヘッダーなし/不規則な原子行として扱い、コメント行を取り除いてフォールバックします。 - 不正な行にも堅牢です:宣言された原子数が実際に存在する行数を超える場合、存在する分だけ読み込み、拒否せずに警告します。
XX : x y zのようなゴースト/ラベル列は、余分な区切りトークンがあっても最初の 3 つの浮動小数点変換可能なトークンを座標として扱うことで許容されます。 - RDKit の有効な元素表にない原子記号、
:を含む記号、認識済みのダミートークン(DUMMY_XYZ_SYMBOLS)のいずれかは、ワイルドカード*(ゴースト原子)として読み込まれ、元のテキストは RDKit プロパティxyz_original_symbolに保存されてラウンドトリップ可能になります。 -
結合推定と電荷確認: 設定で
skip_chemistry_checksが有効か、ファイルにゴースト/ダミー原子が含まれる場合(この場合は常に化学チェックがスキップされます)を除き、まず RDKit のrdDetermineBonds.DetermineBondsを電荷 0 で試みます。失敗した場合(または設定で「常に電荷を確認」が有効な場合)、モーダルの 「Import XYZ Charge」 ダイアログが表示され、総分子電荷(既定値0)を尋ねます。「Skip chemistry」 ボタンを押すと、代わりに純粋な距離ベースの結合推定(共有結合半径の和、H が絡む場合は0.5×〜1.2×、それ以外は1.3×の許容範囲、近い原子対を優先し H には結合を 1 本だけ許可)にフォールバックし、サニタイズは一切行いません。 - 読み込みは「3D Viewer Mode」に入ります:2D エディタはクリアされ、分子は 3D ビューにのみ表示され、
is_xyz_derivedが設定されます(他の一部の 2D 指向機能のゲート/調整に使われます)。 - 先頭列が非標準だった原子行があれば、影響を受けた行数がステータスバーに表示されます。
File ▸ Export ▸ 3D Formats ▸ XYZ File...(save_as_xyz):標準的なヘッダー付き XYZ を書き出し、コメント/タイトル行は chrg = {charge} mult = {multiplicity} | Generated by MoleditPy Ver. {VERSION} に設定されます。電荷は、分子自体が XYZ 由来であれば _xyz_charge プロパティから、そうでなければ RDKit で計算した形式電荷から取得され、多重度は NumRadicalElectrons() + 1 です。座標は小数点以下 8 桁、記号は左詰めで 5 文字幅にパディングされます。
File ▸ Import ▸ 3D MOL/SDF (3D View Only)...(load_mol_file_for_3d_viewing):MOL(同じ fix_mol_block カウント行パッチ付き)または SDF の最初の分子を読み込み、ファイルにコンフォーマがなければ AllChem.EmbedMolecule でコンフォーマを生成します。こちらも 2D エディタをクリアして 3D ビューア専用モードに入ります。is_xyz_derived はこの経路では明示的に False です(XYZ インポートとは異なり、MOL/SDF ファイルには距離推定ではない実際の結合次数/立体データがあるためです)。
File ▸ Export ▸ 3D Formats ▸ MOL File...(save_3d_as_mol):現在表示中の 3D 構造について Chem.MolToMolBlock(current_mol, includeStereo=True) を書き出します。2D MOL エクスポートと同じ MoleditPy Ver. {VERSION} 3D ヘッダースタンプが付きます。
File ▸ Export ▸ 2D Formats ▸ PNG Image...(export_2d_png):背景を透過にするか Yes/No/Cancel で尋ね、原子/結合以外のシーンアイテム(ラベル、テンプレートプレビューなど)を一時的に非表示にし、表示中の原子/結合のタイトなバウンディングボックスを各辺 20 px のマージン付きで計算し、QPainter/QImage(Format_ARGB32_Premultiplied)でレンダリングした後、可視状態/背景を復元します(finally ブロック内なので、エクスポート途中で例外が発生してもキャンバスは復元されます)。
File ▸ Export ▸ 2D Formats ▸ SVG Image...(export_2d_svg):PNG と同じ背景選択/バウンディングボックス/復元ロジックですが、画面の論理 DPI(logicalDpiX() が使えない場合は 96 にフォールバック)で QSvgGenerator を通じてレンダリングされ、タイトルは "MoleditPy Molecule" です。
File ▸ Export ▸ 3D Formats ▸ PNG Image...(export_3d_png):同じ透過確認の後、plotter.screenshot(path, transparent_background=...) を実行します — 現在表示されている 3D ビュー(カメラ角度、スタイル、照明を含む)をそのままファイルにレンダリングします。
File ▸ Export ▸ 3D Formats ▸ STL File...(export_stl):PyVista レンダラー内のすべてのアクターを走査し、その下にあるメッシュ(mapper.dataset/.input、生の VTK アクターの場合は GetInput()/GetInputAsDataSet())を抽出し、1つの PolyData にマージして、色情報のないバイナリ STL として保存します — スライサー/3D プリント向けです。
export_color_stl(コード上は到達可能ですが、確認したソースの範囲ではメニュー項目には接続されていません — エクスポートメニューには代わりに下記の 2 ファイル方式のカラー版が公開されています):通常の STL と同じメッシュマージロジックですが、保存前に各メッシュのアクターの色を point_data(red/green/blue、diffuse_red/green/blue、統合された colors 配列)に刻み込みます。頂点カラー STL 拡張を読み取るツール向けです。
File ▸ Export ▸ 3D Formats ▸ OBJ/MTL (with colors)...(export_obj_mtl):name.obj と name.mtl のペアファイルを生成します(同じベース名。.mtl は os.path.splitext で導出されるため、大文字の .OBJ パスでも自分自身と衝突しません)。各 PyVista アクターは、それぞれ独自のマテリアル usemtl material_N_<actor>(アンビエント 0.2、ディフューズ = アクターの RGB、スペキュラー 0.5、シャイニネス 32、illum モデル 2)を持つ 1つの o object_N ブロックになります。アクターが 頂点ごと の色情報を持つ場合(例えば、原子ごとに異なる色が適用された 1 つの統合グリフメッシュ — Atom/Bond Colorizer プラグイン参照)、メッシュはさらに色ごとのユニークなサブメッシュに分割され(extract_points)、1色に平均化されるのではなく、各色グループが OBJ 内で独自のマテリアルを持ちます。
上記はメイン app 自体が読み書きできるすべての形式です。いくつかの公式プラグインはこれを大きく拡張します — 全カタログは moleditpy-plugins wiki を参照してください。特に注目すべきものとして:
- OpenBabel Conversion Tool — OpenBabel を介して多くの追加の化学形式をインポートし、複数分子(複数フレーム)にも対応。
- Paste from ChemDraw — ChemDraw のクリップボード形式から直接構造を貼り付け。
- Animated XYZ Giffer — 複数フレーム/トラジェクトリの XYZ ファイルを開き、GIF アニメーションとしてエクスポート。
- Blender Export / Blender Export Pro / POV-Ray Export — 3D シーンを Blender Python スクリプトや POV-Ray シーンファイルとして外部レンダリング用にエクスポート。
-
CIF Viewer —
.cif結晶構造ファイルを開く(表示専用。詳細は moleditpy-plugins wiki を参照)。 -
Cube File Viewer / Cube File Viewer Advanced / Mapped Cube Viewer / Orbital Comparator — Gaussian の
.cube体積データファイルを開く。 -
Gaussian FCHK Loader / Gaussian Freq Analyzer / Gaussian MO Analyzer — Gaussian の
.fchk/.fch/.fckファイルを開く。 -
ORCA Result Analyzer / ORCA Freq Analyzer — ORCA の
.out出力ファイルを開く。 -
Encrypted Project — パスワード保護された
.pmeenc保存/読み込み形式を追加(AES-128)。 - DECIMER Image Importer — 深層学習ベースの OCSR により PNG/JPG 画像から構造をインポート。
- User Manual — File メニューの文脈での解説
- Command-Line Options — コマンドラインから直接ファイルを開く方法
- moleditpy-plugins wiki — 追加形式を提供するすべてのプラグイン