Skip to content

File Formats and Import Export JP

Hiromichi Yokoyama edited this page Aug 21, 2026 · 3 revisions

ファイル形式とインポート/エクスポート

このページは、MoleditPy が開く・インポートする・保存する・エクスポートできるすべてのファイル形式を、ui/io_logic.pyIOManager)、ui/export_logic.pyExportManager)、ui/string_importers.pyStringImporterManager)に基づいて一覧化したものです。「2D」は 2D エディタのキャンバスに反映される形式、「3D」は 3D ビューアのみに反映される形式を意味します。


1. ネイティブなプロジェクト形式

.pmeprj — PME Project(JSON)

推奨・既定 の保存形式です(File ▸ Save Project / Ctrl+SSave 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 の遅延の後にビューが再フィットされます。

.pmeraw — PME Raw(レガシー、Python pickle)

  • Export ▸ PME Raw Format...save_raw_data)で pickle.dump(get_current_state(), f) により書き込まれ、Open Project File(拡張子による自動判定)または明示的に load_raw_data で読み込まれます。
  • セキュリティに関する注意(プロジェクト README より): この形式は Python の pickle を使用しており、デシリアライズ時に任意のコードが実行される可能性があります。自分自身が作成した .pmeraw ファイルのみを開くようにし、共有する場合は .pmeprj を使ってください。これはこのレガシー形式が持つ、意図的かつ既知のリスクであり、バグではありません。
  • 4.7.0 以降、メニュー・ドラッグ&ドロップ・コマンドラインのすべての入口が load_raw_data() を経由し、unpickle の前に「Open Raw Project File?」という確認ダイアログ(既定は Cancel)が表示されます。確認するまでファイルは読み込まれません。
  • 同じく 4.7.0 以降、.pmeraw から開いたドキュメントは読み取り専用です。Save ProjectCtrl+S)は pickle に書き戻さず Save As(常に .pmeprj を出力)に移ります。旧式の形式を書き出せるのは Export ▸ PME Raw Format... のみです。
  • 読み込み失敗は pickle.UnpicklingErrorEOFErrorImportError(もう存在しないクラスを参照する .pmeraw)を明示的に捕捉し、「無効なプロジェクトファイル形式」として報告されます。

2. 2D 構造形式

MOL / SDF — インポート

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/SDMolSupplierNone を返す、または OSError/ValueError/RuntimeError/AttributeError/KeyError のいずれか)、実際のメッセージ付きで「MOL Import Error」ダイアログが表示されます。

MOL — エクスポート(2D)

File ▸ Export ▸ 2D Formats ▸ MOL File...save_as_mol):state_manager.data.to_mol_block()(現在の 2D 構造)を .mol ファイルとして書き出します。ヘッダーコメント行には、存在すれば RDKit の既定ヘッダーの代わりに MoleditPy Ver. {VERSION} 2D が刻まれます。

SMILES / InChI — インポートのみ

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 の相互変換機能を追加します。


3. 3D 構造形式

XYZ — インポート(3D ビューア専用)

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 指向機能のゲート/調整に使われます)。
  • 先頭列が非標準だった原子行があれば、影響を受けた行数がステータスバーに表示されます。

XYZ — エクスポート(3D)

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 文字幅にパディングされます。

3D MOL/SDF — インポート(3D ビューア専用)

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 ファイルには距離推定ではない実際の結合次数/立体データがあるためです)。

MOL — エクスポート(3D)

File ▸ Export ▸ 3D Formats ▸ MOL File...save_3d_as_mol):現在表示中の 3D 構造について Chem.MolToMolBlock(current_mol, includeStereo=True) を書き出します。2D MOL エクスポートと同じ MoleditPy Ver. {VERSION} 3D ヘッダースタンプが付きます。


4. 画像/レンダリングのエクスポート

PNG(2D)

File ▸ Export ▸ 2D Formats ▸ PNG Image...export_2d_png):背景を透過にするか Yes/No/Cancel で尋ね、原子/結合以外のシーンアイテム(ラベル、テンプレートプレビューなど)を一時的に非表示にし、表示中の原子/結合のタイトなバウンディングボックスを各辺 20 px のマージン付きで計算し、QPainter/QImageFormat_ARGB32_Premultiplied)でレンダリングした後、可視状態/背景を復元します(finally ブロック内なので、エクスポート途中で例外が発生してもキャンバスは復元されます)。

SVG(2D)

File ▸ Export ▸ 2D Formats ▸ SVG Image...export_2d_svg):PNG と同じ背景選択/バウンディングボックス/復元ロジックですが、画面の論理 DPI(logicalDpiX() が使えない場合は 96 にフォールバック)で QSvgGenerator を通じてレンダリングされ、タイトルは "MoleditPy Molecule" です。

PNG(3D)

File ▸ Export ▸ 3D Formats ▸ PNG Image...export_3d_png):同じ透過確認の後、plotter.screenshot(path, transparent_background=...) を実行します — 現在表示されている 3D ビュー(カメラ角度、スタイル、照明を含む)をそのままファイルにレンダリングします。

STL — 3D プリント用(色情報なし)

File ▸ Export ▸ 3D Formats ▸ STL File...export_stl):PyVista レンダラー内のすべてのアクターを走査し、その下にあるメッシュ(mapper.dataset/.input、生の VTK アクターの場合は GetInput()/GetInputAsDataSet())を抽出し、1つの PolyData にマージして、色情報のないバイナリ STL として保存します — スライサー/3D プリント向けです。

カラー STL

export_color_stl(コード上は到達可能ですが、確認したソースの範囲ではメニュー項目には接続されていません — エクスポートメニューには代わりに下記の 2 ファイル方式のカラー版が公開されています):通常の STL と同じメッシュマージロジックですが、保存前に各メッシュのアクターの色を point_datared/green/bluediffuse_red/green/blue、統合された colors 配列)に刻み込みます。頂点カラー STL 拡張を読み取るツール向けです。

OBJ/MTL(色情報付き)

File ▸ Export ▸ 3D Formats ▸ OBJ/MTL (with colors)...export_obj_mtl):name.objname.mtl のペアファイルを生成します(同じベース名。.mtlos.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 内で独自のマテリアルを持ちます。


5. プラグインが追加するもの

上記はメイン 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 画像から構造をインポート。

6. 関連ページ

Clone this wiki locally