مقایسه چند کد مونت کارلو در پرتو پزشکی
مقدمه
در فیزیک پزشکی، شبیه سازی مونت کارلو یکی از روش های مهم برای بررسی رفتار پرتو در ماده است. ایده کلی این است که به جای حل مستقیم همه معادلات انتقال تابش، تعداد زیادی رویداد تصادفی شبیه سازی می شود و از رفتار آماری آن ها کمیت هایی مثل دوز، شار، انرژی رسوب کرده یا پاسخ آشکارساز بهدست می آید. تفاوت اصلی بین کدهای مختلف بیشتر در نوع ذرات و انرژی هایی که خوب پوشش می دهند، مدل های فیزیکی، نحوه تعریف هندسه، امکانات تصویربرداری و میزان آزادی کاربر در ساخت شبیه سازی است.
۱- MCNP
MCNP یا Monte Carlo N-Particle. این کد در آزمایشگاه ملی لوس آلاموس توسعه پیدا کرده و یک کد عمومی برای انتقال مونت کارلویی ذرات است. در نسخه های امروزی، انتقال نوترون، فوتون، الکترون، یون ها و ذرات مختلف قابل شبیه سازی است. [۱]
تاریخچه کوتاه: ریشه MCNP به کدهای مونت کارلوی لوس آلاموس در دهه ۱۹۶۰ برمی گردد. کدهای اولیه مانند MCS و MCN توسعه پیدا کردند و در سال ۱۹۷۷ با ادغام چند کد، MCNP شکل گرفت. [۷]
حوزه کاری: به طور سنتی در انتقال نوترون و فوتون، محاسبات بحرانی، حفاظگذاری، راکتورها، دوزیمتری و مسائل حفاظت پرتویی بسیار قوی است. برای مسائل پرتوپزشکی هم می توان از آن استفاده کرد، ولی نقطه قوت اصلی آن بیشتر «انتقال ذرات و محاسبات نوترون/فوتون» است تا ساخت یک شبیه ساز کامل تصویربرداری پزشکی.
میزان سختی: متوسط رو به بالا. شروع کار با MCNP نسبتاً سریع است، چون کاربر بیشتر با فایل ورودی و کارت های مختلف سروکار دارد و لازم نیست از همان ابتدا یک برنامه بزرگ بنویسد. سختی اصلی بعد از مرحله مقدماتی ایجاد می شود؛ یعنی وقتی باید هندسه های پیچیده، tally های مناسب، variance reduction و فیزیک مسئله را درست انتخاب کرد.
پیش نیاز: آشنایی با فیزیک هسته ای و برهم کنش تابش با ماده، اصول مونت کارلو، مفاهیم دوز و شار، و کمی آشنایی با هندسه و فایل های متنی. برنامه نویسی حرفه ای الزام نیست؛ برای تحلیل نتایج معمولاً Python یا MATLAB بسیار کمک کننده است.
بیس و کدنویسی: بیشتر یک «کد آماده با ورودی متنی» است. کاربر هندسه، ماده، منبع، شرایط فیزیکی و tally را در input تعریف می کند. بنابراین برای شروع، یادگیری syntax خود MCNP مهم است. [۱,۷]
مزایا: بالغ و بسیار شناخته شده؛ مناسب برای نوترون و فوتون؛ امکانات قوی برای tally و variance reduction؛ منابع آموزشی و مقالات فراوان.
معایب: یادگیری کارت ها و syntax در ابتدا کمی خشک و گیجکننده است؛ ساخت مدل های بسیار پیچیده پزشکی همیشه به اندازه Geant4 یا GATE راحت نیست.

۲- Geant4
Geant4 یا Geometry and Tracking ۴. در عمل Geant4 یک toolkit است، نه یک نرم افزار آماده با یک input file ساده. هدف اصلی آن شبیه سازی عبور ذرات از ماده است و در فیزیک انرژی بالا، هسته ای، شتاب دهنده، فضا و فیزیک پزشکی استفاده میشود. [۲,۳]
تاریخچه کوتاه: پروژه Geant4 از فعالیت RD44 در دهه ۱۹۹۰ شکل گرفت و اولین مقاله اصلی آن در سال ۲۰۰۳ منتشر شد. [۲,۳]
حوزه کاری: تقریباً وسیع ترین دامنه را در بین این پنج گزینه دارد. می توان منبع، هندسه، مواد، میدان مغناطیسی، آشکارساز، فرآیندهای برهم کنش و نحوه ثبت خروجی را خودمان تعریف کنیم. برای دوزیمتری، شبیه سازی LINAC، پروتون تراپی، آشکارسازها و حتی ساخت مدل های بسیار اختصاصی مناسب است.
میزان سختی: زیاد. دلیل اصلی این است که Geant4 به کاربر آزادی زیادی می دهد. برای پروژه های جدی معمولاً باید ساختار برنامه، کلاس ها، geometry، physics list، sensitive detector و output را بشناسیم.
پیش نیاز: فیزیک تابش و ذرات، مونت کارلو، هندسه، مفاهیم برنامه نویسی شیءگرا و آشنایی با C++. آشنایی با Linux و CMake هم در نصب و اجرای پروژه ها مفید است.
بیس و کدنویسی: Geant4 با C++ نوشته شده و برای ساخت application معمولاً باید C++ بنویسیم. البته مثال های آماده زیادی دارد و می توان یک مثال موجود را پایه پروژه قرار داد. [۲,۴]
مزایا: آزادی عمل بسیار زیاد؛ مدل سازی دقیق هندسه و فیزیک؛ مناسب برای پروژه های تحقیقاتی و اختصاصی؛ متن باز و دارای مثال های متعدد.
معایب: سخت تر از بقیه برای شروع؛ نیاز جدی تر به C++; زمان توسعه و اشکال زدایی بیشتر؛ اگر فقط یک محاسبه ساده دوز بخواهیم ممکن است بیش از نیازمان پیچیده باشد.

۳- FLUKA
FLUKA از عبارت FLUktuierende KAskade گرفته شده که در اصل به معنی «کاسکاد نوسان کننده» است. FLUKA یک کد عمومی برای انتقال و برهم کنش ذرات با ماده است و دامنه کاربرد آن از حفاظ گذاری شتاب دهنده تا دوزیمتری و هادرون تراپی می رسد. [۵]
تاریخچه کوتاه: ریشه FLUKA به سال های ۱۹۶۲ تا ۱۹۶۷ در CERN برمی گردد. نسخه ای که نام FLUKA داشت حدود سال ۱۹۷۰ شکل گرفت و در دهه های بعد چند نسل توسعه پیدا کرد تا به یک کد چندمنظوره تبدیل شد. [۶]
حوزه کاری: شتاب دهنده ها، حفاظت پرتویی، shielding، آشکارسازها، دوزیمتری، فعال سازی، پرتوهای کیهانی و درمان با پروتون و یون سنگین از کاربردهای مهم آن هستند. یکی از نقاط قوت FLUKA مدل سازی فیزیک برهمکنش ذرات در بازه وسیع انرژی است. [۵,۶]
میزان سختی: متوسط رو به بالا. از نظر برنامه نویسی معمولاً از Geant4 ساده تر است، ولی برای گرفتن نتیجه درست باید با inputها، مواد، هندسه، scoring و مدل های فیزیکی آشنا شد.
پیش نیاز: فیزیک هسته ای و ذرات، انتقال تابش، اصول مونت کارلو و کمی کار با Linux. برای استفاده معمولی برنامه نویسی حرفه ای لازم نیست؛ Python یا ابزارهای جانبی بیشتر برای پردازش و تحلیل نتایج استفاده می شوند.
بیس و کدنویسی: FLUKA عمدتاً با تعریف input و انتخاب کارت ها/دستورهای مربوط به هندسه، منبع، مواد و scoring کار می کند. بنابراین کاربر عادی لازم نیست کد بنویسد.
مزایا: فیزیک قوی و قابل اعتماد؛ مناسب برای طیف بزرگی از ذرات و انرژی ها؛ بسیار مناسب برای shielding و accelerator physics؛ کاربرد خوب در hadrontherapy.
معایب: نسبت به Geant4 آزادی کمتری برای ساخت یک application کاملاً سفارشی دارد؛ یادگیری input و scoring در ابتدا زمان می برد؛ برای یک دانشجوی تازه کار ممکن است بعضی مفاهیم فیزیکی آن سنگین باشد.


۴- GATE
GATE یا Geant4 Application for Tomographic Emission . اصل یک لایه و محیط تخصصی بر پایه Geant4 است که برای کاربردهای پزشکی ساخته شده است. امروزه OpenGATE علاوه بر تصویربرداری پزشکی، پرتودرمانی و دوزیمتری را هم پوشش می دهد. [۸,۹]
تاریخچه کوتاه: ایده GATE از یک کارگاه در پاریس در ژوئیه ۲۰۰۱ شکل گرفت؛ هدف آن ایجاد یک محیط مونت کارلو برای شبیه سازی PET و SPECT بود که استفاده از آن برای گروه های پزشکی راحت تر باشد. [۸]
حوزه کاری: اگر موضوع پروژه PET، SPECT، CT، تصویربرداری هسته ای، دوزیمتری، پرتودرمانی یا شبیه سازی تجهیزات پزشکی باشد، GATE یکی از طبیعی ترین انتخاب هاست. مزیت مهم آن این است که امکانات مربوط به زمان، حرکت، detector response و فرآیندهای تصویربرداری پزشکی از قبل در چارچوب آن دیده شده اند.
میزان سختی: متوسط. از نظر فیزیک، همان دقت و ساختار Geant4 را پشت خود دارد، ولی برای کاربردهای پزشکی بسیاری از کارهای تکراری ساده تر شده اند. در GATE ۱۰ رابط Python استفاده می شود، بنابراین برای دانشجویانی که Python بلدند شروع کار راحت تر است. [۹]
پیشنیاز: فیزیک پزشکی، تصویربرداری پزشکی یا پرتودرمانی، اصول مونت کارلو و آشنایی با Python. برای پروژه های پیشرفته، آشنایی با Geant4 و C++ هم مفید می شود.
بیس و کدنویسی: GATE روی Geant4 ساخته شده است. در نسخه های جدید OpenGATE رابط Python دارد؛ پس برای بسیاری از پروژه ها C++ لازم نیست، ولی اگر بخواهیم رفتارهای پایه را تغییر دهیم یا وارد سطح پایین Geant4 شویم، C++ لازم می شود. [۹]
مزایا: بسیار مناسب برای تصویربرداری و پرتودرمانی؛ بر پایه Geant4؛ امکانات پزشکی آماده؛ برای دانشجوی فیزیک پزشکی انتخاب کاربردی و نسبتاً سریع.
معایب: اگر پروژه اصلاً پزشکی نباشد ممکن است امکانات GATE اضافه و غیرضروری باشند؛ برای تغییرات خیلی پایه ای همچنان باید Geant4 را بلد بود؛ بعضی شبیه سازی های بزرگ میتوانند زمان محاسبات بالایی داشته باشند.

۵- PHITS
PHITS یا Particle and Heavy Ion Transport code System. این کد یک سیستم عمومی مونت کارلو برای انتقال ذرات است و در توسعه آن JAEA، RIST، KEK و چند مرکز دیگر همکاری داشته اند. [۱۰]
تاریخچه کوتاه: نسخه های اولیه PHITS در اوایل دهه ۲۰۰۰ منتشر شدند؛ دفترچه نسخه ۱.۲۰ در سال ۲۰۰۳ ثبت شده است و بعد از آن پروژه به صورت مشترک توسعه پیدا کرده است. [۱۰,۱۱]
حوزه کاری: PHITS مخصوصاً برای انتقال پروتون، یون های سنگین و دیگر ذرات، شتاب دهنده ها، فضا، حفاظت پرتویی و پرتودرمانی کاربرد دارد. بنابراین اگر پروژه ای روی proton therapy یا heavy-ion therapy باشد، PHITS می تواند گزینه بسیار خوبی باشد. [۱۰]
میزان سختی: متوسط. از نظر کاربری بیشتر شبیه خانواده کدهای input-based است تا Geant4؛ بنابراین بدون برنامه نویسی سنگین هم می توان وارد کار شد.
پیش نیاز: فیزیک هسته ای، برهم کنش ذرات با ماده، مونت کارلو و مفاهیم دوزیمتری. برای شروع برنامه نویسی لازم نیست، اما Python یا MATLAB برای تحلیل داده ها مفید است.
بیس و کدنویسی: اساس کار تعریف input و انتخاب مدل های فیزیکی و scoring است. کاربر معمولی نیازی به نوشتن کد C++ ندارد. در عوض باید syntax و ساختار inputهای PHITS را یاد بگیرد.

مزایا: مناسب برای proton/heavy-ion transport؛ کاربرد در پرتودرمانی و فضا؛ بدون نیاز به برنامه نویسی سنگین؛ پوشش خوب طیف گسترده ای از ذرات.
معایب: در بعضی محیط های دانشگاهی منابع و تجربه کاربران آن کمتر از Geant4 و MCNP است؛ برای پروژه های کاملاً اختصاصی، آزادی Geant4 را ندارد.
جدول مقایسه کلی
| برای چه دانشجویی مناسب تر است؟ | پیش نیاز برنامه نویسی | سختی | تمرکز اصلی | کد |
| کسی که میخواهد انتقال تابش و محاسبات نوترون/فوتون را جدی یاد بگیرد | کم؛ input-based | متوسط–زیاد | نوترون، فوتون، shielding، راکتور، دوزیمتری | MCNP |
| کسی که پروژه تحقیقاتی و قابل سفارشی سازی دارد | زیاد؛ C++ | زیاد | شبیهسازی عمومی ذرات و ساخت مدل اختصاصی | Geant4 |
| کسی که فیزیک ذرات و shielding یا درمان با یون ها برایش مهم است | کم؛ input-based | متوسط–زیاد | ذرات، شتاب دهنده، shielding، دوزیمتری، hadrontherapy | FLUKA |
| دانشجوی فیزیک پزشکی و تصویربرداری | کم تا متوسط؛ Python در GATE ۱۰ | متوسط | PET، SPECT، CT، پرتودرمانی و دوزیمتری پزشکی | GATE |
| کسی که روی proton/heavy-ion و انتقال ذرات کار می کند | کم؛ input-based | متوسط | پروتون، یون سنگین، فضا، shielding و پرتودرمانی | PHITS |
جمع بندی و پیشنهاد انتخاب
اگر هدف فقط این باشد که دانشجو بفهمد کدام کد برای پروژه اش مناسب تر است، می توان انتخاب را خیلی ساده کرد. برای پروژه های PET و SPECT و به طور کلی تصویربرداری پزشکی، GATE معمولاً انتخاب اول است. اگر پروژه نیاز به کنترل خیلی دقیق و اختصاصی روی تک تک بخش های شبیه سازی دارد، Geant4 انتخاب قوی تری است، ولی باید هزینه یادگیری C++ را هم در نظر گرفت.
اگر پروژه بیشتر روی نوترون، فوتون، shielding، راکتور یا محاسبات انتقال کلاسیک تابش باشد، MCNP انتخاب شناخته شده ای است. برای پروژه های شتاب دهنده، shielding و برهم کنش ذرات در بازه وسیع انرژی، FLUKA گزینه بسیار خوبی است. اگر تمرکز روی پروتون، یون های سنگین، فضا یا پرتودرمانی با ذرات سنگین باشد، PHITS هم ارزش بررسی جدی دارد.
به نظر من برای یک دانشجوی کارشناسی، مسیر شروع میتواند MCNP یا GATE باشد، چون بدون ورود سنگین به برنامه نویسی می توان زودتر به نتیجه رسید. برای دانشجوی ارشد که میخواهد روی توسعه مدل، فیزیک دقیق یا شبیه سازی کاملاً اختصاصی کار کند، Geant4 ارزش یادگیری بیشتری دارد. در نهایت انتخاب کد باید بر اساس سؤال پژوهشی انجام شود، نه صرفاً معروف بودن یک کد.
منابع اصلی برای مطالعه بیشتر
[1] Los Alamos National Laboratory, MCNP Code – Overview and MCNP6 documentation.
[2] Geant4 Collaboration, Geant4 Overview and Getting Started documentation.
[3] Agostinelli et al., Geant4 – A Simulation Toolkit, Nuclear Instruments and Methods in Physics Research A, 2003.
[4] Geant4 Introduction/User Guide – Scope of application and toolkit architecture.
[5] FLUKA official documentation, About FLUKA and applications.
[6] FLUKA official History / Ballarini et al., The FLUKA code: Overview and new developments, 2024.
[7] Sood et al., Neutronics Calculation Advances at Los Alamos: Manhattan Project to Monte Carlo, 2021.
[8] GATE – Geant4 Application for Tomographic Emission, history and overview of the OpenGATE project.
[9] OpenGATE documentation/repository, GATE 10 and Python interface.
[10] JAEA/PHITS official website, PHITS overview.
[11] PHITS User Manual, development/version history.