قالب فایل oghma
1. JSON چیست؟
sim.json که در Firefox باز شده و ساختار JSON زیربنایی یک شبیهسازی OghmaNano را نشان میدهد.
OghmaNano اطلاعات شبیهسازی خود را در یک فایل JSON ذخیره میکند. JSON (JavaScript Object Notation) یک قالب بسیار ساده و متنی برای ذخیره و انتقال دادههای ساختیافته است. این قالب بهطور گسترده در نرمافزارهای علمی استفاده میشود زیرا هم برای انسان قابل خواندن است و هم توسط ماشین قابل تجزیه است. شما میتوانید نمونههای کلی از ساختارهای JSON را در https://json.org/example.html ببینید.
برای نشان دادن نحوه کار JSON، در زیر یک نمونه ساده آمده است. یک فایل JSON از بخشهایی ساخته میشود که با آکولادهای { } شروع و پایان مییابند. هر بخش شامل tokenها، یا برچسبهایی، مانند "color_of_dog"، "dog_age"، یا "dogs_toys" است. این tokenها باید همیشه درون گیومه دوتایی نوشته شوند، و پس از آنها یک دونقطه : و سپس مقدار داده مرتبط میآید. مقادیر متنی درون گیومه دوتایی قرار میگیرند، در حالی که اعداد مانند اعداد صحیح یا اعشاری بدون گیومه نوشته میشوند. در 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 داخلی خوب دارد. نمونهای از فایل sim.json که در Firefox نمایش داده شده، در پایین در ?? آمده است
یک نکته نهایی: اگرچه sim.json فایل پیکربندی کلیدی است، اما همیشه بهصورت مستقل ذخیره نمیشود. در عوض، OghmaNano اغلب آن را درون یک فایل sim.oghma بستهبندی میکند، که فقط یک آرشیو ZIP استاندارد است - این کار برای صرفهجویی در فضا انجام میشود. اگر نام sim.oghma را به sim.zip تغییر دهید، میتوانید آن را با Windows Explorer یا هر نمایشگر zip باز کنید و sim.json را استخراج کنید. اگر یک نسخه از sim.json را در همان پوشه شبیهسازی قرار دهید و نام آرشیو را دوباره به sim.oghma برگردانید،
OghmaNano نسخه آرشیوشده sim.json را نادیده میگیرد و بهجای آن از فایل متنی ساده sim.json شما استفاده میکند. این ویژگی برای اتوماسیون بسیار مفید است، زیرا میتوانید مستقیماً sim.json را با استفاده از هر زبان برنامهنویسی و بدون نیاز به دستکاری فایلهای zip ویرایش کنید.
2. قالب فایل OghmaNano
OghmaNano دقیقاً همین اصول را در فایل پیکربندی شبیهسازی خود، با نام sim.json، بهکار میگیرد.
این فایل هر آنچه را برای توصیف ساختار یک دستگاه، تعریف شبیهسازیهای مورد اجرا،
و پیکربندی حلگرها لازم است در بر دارد. هر پوشه شبیهسازی شامل فایل sim.json مخصوص خود خواهد بود.
اگرچه میتوانید این فایل را در هر ویرایشگر متنی باز کنید، اغلب استفاده از یک نمایشگر JSON مانند Firefox راحتتر است،
که دادهها را بهطور خودکار در یک نمای درختی قالببندیشده نمایش میدهد.
در بالاترین سطح، sim.json به تعداد کمی بخش سطحبالا سازماندهی میشود.
سپس این بخشها به زیربخشهای جزئیتر، مانند sweepهای JV، اجراهای EQE، یا تعریف لایههای دستگاه، منشعب میشوند.
بخشهای اصلی سطحبالا که در قالب فعلی وجود دارند در جدول زیر خلاصه شدهاند:
??.
| بخش | هدف |
|---|---|
sim | فراداده عمومی (برای مثال نسخه، حالت اجرا، یادداشتها) |
sims | همه تعریفهای شبیهسازی (JV، Suns-Voc، EQE، PL، حوزه زمان، ray، FDTD، و غیره) |
epitaxy | ساختار دستگاه: لایهها، تماسها، هندسه، مواد |
math | تنظیمات عددی حلگر و تلرانسها |
optical | مدلهای نوری، منابع، آشکارسازها، مشها |
dump | کنترلهای خروجی: میزان جزئیات، پروبها، قالبهای فایل |
server | اجرا/موازیسازی (رشتهها، GPU، محدودیتهای زمانی) |
sim.json شناسایی شدهاند.
3. ویژگیهای خاص قالب json در OghmaNano
-
فایل json در OghmaNano از فهرستهای استاندارد json مانند ["Red", "Green", "Blue"] پشتیبانی نمیکند. اگر فهرستی از آیتمها وجود داشته باشد، ابتدا با تعریف متغیر segments و تعداد آیتمهای فهرست مشخص میشود، برای مثال "segments",0 . سپس هر آیتم در فهرست تحت "segment0"، "segment1" و غیره ذخیره میشود. این قالب به OghmaNano امکان میدهد پیش از انجام خواندن، حافظه لازم برای خواندن ساختارها را تخصیص دهد. این موضوع را میتوان در شکل 14.1 دید، جایی که فهرستی با 1 segment وجود دارد.
-
به بسیاری از آیتمها در فایل json یک شماره ID داده میشود که یک کد hex شانزدهرقمی است، و میتوان از آن برای ارجاع یکتای آن آیتم استفاده کرد. یک شماره ID را همچنین میتوان در شکل 14.1 دید. این شمارههای ID بهصورت تصادفی تولید میشوند، اما هر شماره ID باید یکتا باشد. شمارههای ID باعث میشوند برای مثال اشیایی مانند لایههای epitaxy حتی اگر نام یکسانی داشته باشند بهطور یکتا شناسایی شوند.
4. کدگذاری
فایلهای .json که توسط OghmaNano خوانده/نوشته میشوند همیشه در قالب UTF-8 ذخیره میشوند. OghmaNano نمیتواند UTF-16 یا هیچ استاندارد کدگذاری متنی دیگری را مدیریت کند. امروزه Windows Notepad و بیشتر برنامههای دیگر بهطور پیشفرض از UTF-8 استفاده میکنند، بنابراین اگر نمیدانید این قالبهای ذخیرهسازی متن چه هستند، احتمالاً اهمیتی ندارد. این موضوع فقط زمانی خود را نشان خواهد داد که شروع به تولید برنامهنویسیشده فایلهای .oghma در زبانی مانند C++ کنید و از زبانی مانند چینی یا روسی با نویسههای غیر لاتین در الفبای آن استفاده کنید.
5. سازگاری رو به جلو/رو به عقب قالب فایل
تلاش قابلتوجهی انجام میشود تا اطمینان حاصل شود نسخههای جدید OghmaNano بتوانند فایلهای تولیدشده در نسخههای قدیمیتر را بخوانند. با این حال، نسخههای قدیمیتر OghmaNano ممکن است نتوانند فایلهای تولیدشده در نسخههای جدیدتر را بخوانند. هر بار که کاربر یک فایل sim.oghma را با استفاده از GUI باز میکند، قالب فایل بررسی میشود و اگر با قالب مورد استفاده در نسخه فعلی متفاوت باشد، فایل بهروزرسانی شده و دوباره روی دیسک نوشته میشود. اگر از OghmaNano در یک پیکربندی بدون رابط گرافیکی و با فراخوانی مستقیم \(oghma\_core.exe\) استفاده میکنید، آنگاه هنگام کار با فایلهای sim.oghma از نسخههای قدیمیتر مدل، پیش از اجرای \(oghma\_core.exe\) مطمئن شوید ابتدا آن را در GUI باز کردهاید تا فایل در قالب صحیح قرار داشته باشد.
6. نکات
اگر مطمئن نیستید یک پارامتر خاص در فایل sim.json مربوط به OghmaNano در کجا ذخیره شده است،
یک روش بسیار مؤثر این است که دو نسخه از فایل را مقایسه کنید و ببینید چه چیزی تغییر میکند.
یکی از راههای انجام این کار استفاده از یک ابزار مقایسه فایل مانند KDiff3 است.
این فرایند ساده است:
- شبیهسازی خود را در رابط کاربری OghmaNano باز کنید.
- پارامتر مورد نظر را تنظیم کنید (برای مثال، ضخامت لایه فعال یا یک تنظیم ولتاژ را تغییر دهید) و شبیهسازی را ذخیره کنید.
- فایل جدید
sim.jsonرا با نسخه قبلی با استفاده از KDiff3 (یا ابزار diff دیگر) مقایسه کنید. - به دنبال خطهایی بگردید که متفاوت هستند: اینها دقیقاً نشان میدهند آن پارامتر در کجای ساختار JSON ذخیره شده است.
این تکنیک روشی سریع و قابلاعتماد برای یافتن پارامترها در JSON است اگر از مسیر آنها در فایل مطمئن نیستید. این روش بهویژه برای شبیهسازیهای پیچیده با بخشهای تودرتوی زیاد مفید است.
👉 گام بعدی: اکنون ادامه دهید به ابزار Parameter Scan را بررسی کنید، جایی که میتوانید بیاموزید چگونه پارامترهای شبیهسازی را بهصورت نظاممند تغییر دهید و نتایج را تحلیل کنید.