oghma ファイル形式
1. JSON とは何ですか?
sim.json ファイルの例。
OghmaNano はシミュレーション情報を JSON ファイルに保存します。JSON(JavaScript Object Notation)は、構造化データを保存および送信するための非常に単純なテキストベース形式です。人間が読みやすく、機械でも解析しやすいため、科学ソフトウェアで広く使用されています。一般的な JSON 構造の例は https://json.org/example.html で見ることができます。
JSON がどのように機能するかを示すために、以下に簡単な例を示します。JSON ファイルは中括弧 { } で始まり中括弧で終わるセクションから構成されます。各セクションには、"color_of_dog"、"dog_age"、または "dogs_toys" のようなトークン、すなわちラベルが含まれます。これらのトークンは常に二重引用符で囲まれ、その後にコロン : と対応するデータ値が続きます。テキスト値は二重引用符で囲まれ、整数や小数のような数値は引用符なしで書かれます。OghmaNano では、真偽値のような値は "true" または "false" という文字列として保存されます。ファイルを有効にするには、すべての開始括弧と終了括弧が正しく対応していなければなりません。セクション内の項目はコンマで区切られますが、最後の項目だけはコンマで終わりません。
??.
{
"color_of_dog": "brown",
"dog_age": 5,
"dogs_toys":
{
"rabbit": "true",
"stick": "false"
}
}
JSON 構造の例。
OghmaNano は、これと同じ JSON の原理を使用してすべてのシミュレーションデータを保存します。この情報は sim.json という名前のファイルに含まれており、そこにはすべてのデバイスパラメータ、シミュレーション設定、および出力設定が含まれます。各シミュレーションにはそれぞれ独自の sim.json ファイルがあります。このファイルは任意のテキストエディタで開くことができますが、専用の JSON ビューアを使用する方が読みやすいツリー構造で表示されるため便利なことが多いです。Firefox には優れた組み込み json ビューアがあります。Firefox で表示した sim.json ファイルの例を以下の ?? に示します。
最後に 1 点、sim.json は重要な設定ファイルですが、常に単独で保存されているわけではありません。代わりに、OghmaNano はしばしばこれを sim.oghma ファイルの中にパッケージ化します。これは単なる標準的な ZIP アーカイブであり、容量を節約するためです。sim.oghma を sim.zip に名前変更すると、Windows Explorer や任意の zip ビューアで開いて sim.json を取り出すことができます。sim.json のコピーを同じシミュレーションディレクトリに置き、アーカイブ名を再び sim.oghma に戻すと、OghmaNano はアーカイブ内の sim.json を無視して、代わりにプレーンテキストの sim.json ファイルを使用します。この機能は自動化に非常に便利です。なぜなら、zip ファイルを操作する必要なく、任意のプログラミング言語を使って sim.json を直接編集できるからです。
2. OghmaNano ファイル形式
OghmaNano は、これらとまったく同じ原理を、そのシミュレーション設定ファイル sim.json に適用しています。
このファイルには、デバイス構造を記述し、実行するシミュレーションを定義し、
ソルバーを設定するために必要なすべてが含まれています。各シミュレーションディレクトリには、それぞれ独自の sim.json が含まれています。
このファイルは任意のテキストエディタで開けますが、Firefox のような JSON ビューアを使う方が便利なことが多く、
データを整形済みのツリービューで自動的に表示してくれます。
最上位レベルでは、sim.json は少数のトップレベルセクションに整理されています。
これらのセクションは、その後 JV スイープ、EQE 実行、またはデバイス層定義のような詳細なサブセクションへ分岐します。
現在の形式に存在する主なトップレベルセクションを、以下の表に要約します:
??.
| セクション | 目的 |
|---|---|
sim | 一般メタデータ(例:バージョン、実行モード、メモ) |
sims | すべてのシミュレーション定義(JV、Suns-Voc、EQE、PL、時間領域、ray、FDTD など) |
epitaxy | デバイス構造:層、接点、形状、材料 |
math | 数値ソルバー設定および許容誤差 |
optical | 光学モデル、光源、検出器、メッシュ |
dump | 出力制御:詳細度、プローブ、ファイル形式 |
server | 実行時/並列化(スレッド、GPU、時間制限) |
sim.json で検出される主要なトップレベルセクション。
3. OghmaNano json 形式の癖
-
OghmaNano の json ファイルは、標準的な json リスト、たとえば ["Red", "Green", "Blue"] をサポートしていません。項目の リストがある場合、まず変数 segments とリスト内の項目数を宣言することで定義されます。 たとえば "segments",0 のようにします。その後、各項目は "segment0"、"segment1" などの下に保存されます。この 形式により、OghmaNano は構造を読み込む前に、その構造を読み込むためのメモリを確保できます。これは図 14.1 に見られます。そこでは 1 つの segment を持つリストがあります。
-
json ファイル内の多くの項目には、16 桁の 16 進コードである ID 番号が与えられます。これは 項目を一意に参照するために使用できます。ID 番号は図 14.1 にも見られます。これらの ID 番号はランダムに生成されますが、すべての ID 番号は一意でなければなりません。ID 番号により、たとえば epitaxy 層のようなオブジェクトを、 同じ名前であっても一意に識別できます。
4. エンコーディング
OghmaNano が読み書きする .json ファイルは常に UTF-8 形式で保存されます。OghmaNano は UTF-16 やその他のテキストエンコーディング 規格を扱うことができません。現在では Windows のメモ帳や他の多くのアプリはデフォルトで UTF-8 を使用するため、これらの テキスト保存形式が何かを知らなくてもおそらく問題ありません。これは、C++ のような言語で .oghma ファイルをプログラム的に 生成し始め、中国語やロシア語のようにアルファベットに非ラテン文字を含む言語を使う場合にのみ 表面化します。
5. ファイル形式の前方/後方互換性
OghmaNano の新しいバージョンが古いバージョンで生成されたファイルを読み込めるようにするため、多大な努力が払われています。 ただし、古いバージョンの OghmaNano では、新しいバージョンで生成されたファイルを読み込めない場合があります。ユーザーが GUI を使用して sim.oghma ファイルを開くたびに、ファイル形式がチェックされ、現在のバージョンで使用されているものと異なる場合、 ファイルは更新されてディスクに書き戻されます。ヘッドレス構成で \(oghma\_core.exe\) を直接 呼び出して OghmaNano を使用している場合、古いバージョンのモデルからの sim.oghma ファイルを \(oghma\_core.exe\) を実行する前に、まず GUI で開いて、 ファイルが正しい形式であることを確認してください。
6. ヒント
OghmaNano の sim.json ファイル内で特定のパラメータがどこに保存されているか分からない場合、
非常に効果的な方法はファイルの 2 つのバージョンを比較して、何が変わったかを見ることです。
これを行う 1 つの方法は、KDiff3 のようなファイル比較ツールを使用することです。
手順は簡単です:
- OghmaNano のユーザーインターフェースでシミュレーションを開きます。
- 関心のあるパラメータを調整し(たとえば、活性層厚さや電圧設定を変更し)、シミュレーションを保存します。
- KDiff3(または別の diff ツール)を使用して、新しい
sim.jsonファイルを前のバージョンと比較します。 - 異なる行を探します。これにより、そのパラメータが JSON 構造内のどこに保存されているかが正確に分かります。
この手法は、JSON 内でのパスが分からない場合にパラメータの位置を見つけるための迅速かつ信頼できる方法です。 多くの入れ子セクションを持つ複雑なシミュレーションで特に有用です。
👉 次のステップ: 次に Parameter Scan ツールを確認してください。 そこでは、シミュレーションパラメータを系統的に変化させ、その結果を解析する方法を学ぶことができます。