آموزش استخراج اطلاعات با score در یک برنامه Geant4

  • صفحه اول
  • آموزش استخراج اطلاعات با score در یک برنامه Geant4
image

آموزش استخراج اطلاعات با score در یک برنامه Geant4

در شبیه‌سازی‌های مونت کارلو با استفاده از Geant4، جمع‌آوری و تحلیل داده‌های خروجی از اهمیت حیاتی برخوردار است. توابع Score در Geant4 به عنوان هسته مرکزی سیستم اندازه‌گیری و کمّی‌سازی داده‌ها عمل می‌کنند و امکان استخراج دقیق پارامترهای فیزیکی مختلف از شبیه‌سازی را فراهم می‌نمایند. این آموزش به بررسی جامع نحوه کار، پیاده‌سازی و بهینه‌سازی این توابع می‌پردازد.

مقدمه‌ای بر Geant4

ابزار Geant4 (Geometry And Tracking) یک toolkit شبیه‌سازی مونت کارلو برای مطالعه عبور ذرات از ماده است. این نرم‌افزار که با زبان ++C توسعه یافته، امکان شبیه‌سازی دقیق برهمکنش‌های ذرات با ماده در حوزه‌های مختلفی از جمله فیزیک ذرات، فیزیک پزشکی، فیزیک پرتوها و مهندسی هسته‌ای را فراهم می‌کند.

مزایای کلیدی Geant4:

  • دقت بالا در شبیه‌سازی فیزیک ذرات

  • انعطاف‌پذیری در تعریف هندسه و مواد

  • کتابخانه گسترده مدل‌های فیزیکی

  • قابلیت ردیابی ذرات در زمان واقعی

  • ابزارهای پیشرفته برای تحلیل نتایج

مفهوم و کاربرد توابع Score

توابع Score در Geant4 به عنوان سیستم جمع‌آوری و ذخیره داده‌های شبیه‌سازی عمل می‌کنند. این سیستم امکان اندازه‌گیری کمیت‌های فیزیکی مختلف در طول شبیه‌سازی را فراهم کرده و داده‌های خام را به فرمت قابل تحلیل تبدیل می‌کند.

اهمیت استفاده از Score:

  • جمع‌آوری خودکار داده‌های شبیه‌سازی

  • کاهش خطاهای دستی در ثبت نتایج

  • امکان اندازه‌گیری همزمان چندین پارامتر

  • تولید خروجی‌های استاندارد برای تحلیل‌های بعدی

  • بهینه‌سازی مصرف حافظه و زمان پردازش

انواع پارامترهای قابل اندازه‌گیری

جدول پارامترهای اصلی Score:

پارامتر توضیح واحد اندازه‌گیری
EnergyDeposit انرژی تلف شده در حجم مشخص MeV
CellCharge بار جمع‌آوری شده e- (الکترون)
CellFlux شار ذرات عبوری ذره/سطح
PassageCellFlux شار عبوری از سلول ذره/سطح
DoseDeposit دوز جذبی Gy
NofStep تعداد گام‌های شبیه‌سازی عدد
TrackLength طول مسیر طی شده mm
PassageCellCurrent جریان عبوری از سلول ذره/زمان
FlatSurfaceCurrent جریان سطحی ذره/زمان
NOfCollision تعداد برخوردها عدد
Population جمعیت ذرات عدد
NOfTrack تعداد ذرات ردیابی شده عدد

پارامترهای پیشرفته:

  • PSEnergyDeposit: انرژی تلف شده با قابلیت فیلترگذاری

  • PSDoseDeposit: محاسبه دوز با در نظر گیری چگالی مواد

  • PSCellFlux: شار سلولی با وزن‌دهی انرژی

  • PSNofSecondary: تعداد ذرات ثانویه تولید شده

مکانیسم کار Score

سیستم Score در Geant4 بر اساس مفهوم "mesh" کار می‌کند. mesh یک شبکه سه‌بعدی است که فضای شبیه‌سازی را به سلول‌های کوچک‌تر تقسیم می‌کند.

مراحل کار Score:

  1. ایجاد mesh:

    bash
     
    /score/create/boxMesh detMesh
    /detMesh/size 100 100 100 cm
    /detMesh/translate/xyz 0 0 50 cm
  2. تعریف quantity:

    bash
     
    /score/quantity/energyDeposit eDep
    /score/quantity/cellFlux photonFlux
  3. تنظیمات پیشرفته:

    bash
     
    /score/filter/particle photonFilter gamma
    /score/filter/energyDeposit eFilter 0 10 MeV
  4. فعال‌سازی و اجرا:

    bash
     
    /score/close
    /run/beamOn 1000000
  5. خروجی نتایج:

    bash
     
    /score/dumpQuantityToFile detMesh eDep energy.txt
    ​

فعال‌سازی و پیکربندی

فعال‌سازی Scoring Manager:

در تابع main برنامه، مدیر Score باید فراخوانی شود:

cpp
 
#include "G4ScoringManager.hh"

int main(int argc, char** argv) {
    // ساخت مدیر Score
    G4ScoringManager::GetScoringManager();
    
    // تنظیم سطح جزئیات
    G4ScoringManager::GetScoringManager()->SetVerboseLevel(1);
    
    // ادامه پیکربندی برنامه
    // ...
}

پیکربندی از طریق فایل macro:

bash
 
# ایجاد mesh استوانه‌ای
/score/create/cylinderMesh cylinderMesh
/cylinderMesh/rMin 0 cm
/cylinderMesh/rMax 20 cm
/cylinderMesh/zSize 30 cm
/cylinderMesh/nBin 50 50 60

# تعریف quantity
/score/quantity/energyDeposit eDep
/score/quantity/doseDeposit dose

# اعمال فیلتر
/score/filter/particle gammaFilter gamma
/score/filter/energyRange eFilter 0.1 10 MeV

# بستن mesh
/score/close

کار با چندین Score همزمان

Geant4 امکان تعریف همزمان چندین mesh و quantity را فراهم می‌کند.

مثال پیاده‌سازی چندین Score:

bash
 
# اولین mesh برای دزیمتری
/score/create/boxMesh doseMesh
/doseMesh/size 50 50 50 cm
/doseMesh/translate/xyz 0 0 0 cm
/doseMesh/nBin 25 25 25

/score/quantity/doseDeposit dose
/score/quantity/energyDeposit eDep
/score/close

# دومین mesh برای شار نوترونی
/score/create/boxMesh neutronMesh
/neutronMesh/size 100 100 10 cm
/neutronMesh/translate/xyz 0 0 100 cm
/neutronMesh/nBin 50 50 5

/score/quantity/cellFlux neutronFlux
/score/filter/particle neutronFilter neutron
/score/close

# سومین mesh برای آنالیز ذرات باردار
/score/create/cylinderMesh chargeMesh
/chargeMesh/rMin 0 cm
/chargeMesh/rMax 15 cm
/chargeMesh/zSize 40 cm
/chargeMesh/nBin 30 30 40

/score/quantity/cellCharge charge
/score/filter/particle chargedFilter charged
/score/close​

مدیریت حافظه و بهینه‌سازی:

  • استفاده از meshهای با ابعاد مناسب

  • انتخاب تعداد binهای بهینه

  • بستن meshهای غیرضروری

  • استفاده از فیلتر برای کاهش داده‌های جمع‌آوری شده

مثال‌های عملی و پیاده‌سازی

مثال ۱: دزیمتری در فیزیک پزشکی

cpp
 
// ایجاد scorer برای دزیمتری
G4Box* doseBox = new G4Box("DoseBox", 10*cm, 10*cm, 10*cm);
G4LogicalVolume* doseLog = new G4LogicalVolume(doseBox, 
                                              water, 
                                              "DoseLog");
G4VPhysicalVolume* dosePhys = new G4PVPlacement(0,
                                               G4ThreeVector(0,0,0),
                                               doseLog,
                                               "DosePhys",
                                               worldLog,
                                               false,
                                               0);

// اضافه کردن scorer
G4VPrimitiveScorer* doseScorer = new G4PSDoseDeposit("Dose");
doseLog->AddScorer(doseScorer);

// فیلتر برای پرتوهای گاما
G4SDParticleFilter* gammaFilter = new G4SDParticleFilter("gammaFilter");
gammaFilter->add("gamma");
doseScorer->SetFilter(gammaFilter);​

مثال ۲: اندازه‌گیری شار نوترونی

bash
 
# در فایل macro
/score/create/boxMesh neutronMesh
/neutronMesh/size 200 200 200 cm
/neutronMesh/translate/xyz 0 0 0 cm
/neutronMesh/nBin 40 40 40

/score/quantity/cellFlux thermalFlux
/score/filter/particle neutronFilter neutron
/score/filter/energyRange thermalFilter 0 0.5 eV

/score/quantity/cellFlux fastFlux
/score/filter/particle neutronFilter neutron
/score/filter/energyRange fastFilter 0.5 MeV 20 MeV

/score/close​

خروجی و تحلیل نتایج

فرمت‌های خروجی:

  • متن ساده: برای داده‌های ساده

  • CSV: برای تحلیل در نرم‌افزارهای آماری

  • ROOT: برای تحلیل‌های پیشرفته فیزیک

  • VTK: برای visualization سه‌بعدی

دستورات ذخیره‌سازی:

bash
 
# ذخیره در فرمت متن
/score/dumpQuantityToFile meshName quantityName output.txt

# ذخیره در فرمت CSV
/score/dumpQuantityToCSV meshName quantityName output.csv

# ذخیره در فرمت ROOT
/score/dumpQuantityToRoot meshName quantityName output.root

# نمایش گرافیکی
/score/drawProjection meshName quantityName 0​

تحلیل نتایج با Python:

python
 
import numpy as np
import matplotlib.pyplot as plt

# خواندن داده‌ها
data = np.loadtxt('dose_data.txt')
x = data[:,0]
y = data[:,1]
z = data[:,2]
dose = data[:,3]

# رسم نمودار
plt.figure(figsize=(10,6))
plt.tricontourf(x, y, dose, levels=50, cmap='jet')
plt.colorbar(label='Dose (Gy)')
plt.xlabel('X (cm)')
plt.ylabel('Y (cm)')
plt.title('Dose Distribution')
plt.show()​

نکات پیشرفته و بهینه‌سازی

بهینه‌سازی عملکرد:

  1. انتخاب اندازه mesh مناسب: اندازه سلول‌ها باید با دقت مورد نیاز تناسب داشته باشد

  2. استفاده از فیلتر: کاهش داده‌های جمع‌آوری شده با فیلترهای مناسب

  3. مدیریت حافظه: بستن meshهای غیرضروری پس از استفاده

  4. موازی‌سازی: استفاده از قابلیت‌های موازی Geant4 برای شبیه‌سازی‌های بزرگ

خطاهای رایج و راه حل‌ها:

  • خطای حافظه: کاهش تعداد binها یا استفاده از meshهای کوچک‌تر

  • داده‌های نادرست: بررسی صحت تعریف quantity و فیلترها

  • عملکرد کند: بهینه‌سازی اندازه mesh و استفاده از فیلتر

###扩展های پیشرفته:

  • User-defined scorers: توسعه scorerهای سفارشی

  • Weighted scorers: استفاده از وزن‌دهی در محاسبات

  • Multi-functional detectors: detectors چندمنظوره برای اندازه‌گیری همزمان چند کمیت

این آموزش جامع نشان می‌دهد که چگونه سیستم Score در Geant4 می‌تواند به صورت قدرتمند برای جمع‌آوری و تحلیل داده‌های شبیه‌سازی مورد استفاده قرار گیرد. با تسلط بر این قابلیت، کاربران می‌توانند شبیه‌سازی‌های دقیق‌تر و کاراتری انجام دهند.