آموزش استخراج اطلاعات با 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:
-
ایجاد mesh:
bash/score/create/boxMesh detMesh /detMesh/size 100 100 100 cm /detMesh/translate/xyz 0 0 50 cm -
تعریف quantity:
bash/score/quantity/energyDeposit eDep /score/quantity/cellFlux photonFlux -
تنظیمات پیشرفته:
bash/score/filter/particle photonFilter gamma /score/filter/energyDeposit eFilter 0 10 MeV -
فعالسازی و اجرا:
bash/score/close /run/beamOn 1000000 -
خروجی نتایج:
bash/score/dumpQuantityToFile detMesh eDep energy.txt
فعالسازی و پیکربندی
فعالسازی Scoring Manager:
در تابع main برنامه، مدیر Score باید فراخوانی شود:
#include "G4ScoringManager.hh"
int main(int argc, char** argv) {
// ساخت مدیر Score
G4ScoringManager::GetScoringManager();
// تنظیم سطح جزئیات
G4ScoringManager::GetScoringManager()->SetVerboseLevel(1);
// ادامه پیکربندی برنامه
// ...
}
پیکربندی از طریق فایل macro:
# ایجاد 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:
# اولین 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های غیرضروری
-
استفاده از فیلتر برای کاهش دادههای جمعآوری شده
مثالهای عملی و پیادهسازی
مثال ۱: دزیمتری در فیزیک پزشکی
// ایجاد 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);
مثال ۲: اندازهگیری شار نوترونی
# در فایل 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 سهبعدی
دستورات ذخیرهسازی:
# ذخیره در فرمت متن
/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:
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()
نکات پیشرفته و بهینهسازی
بهینهسازی عملکرد:
-
انتخاب اندازه mesh مناسب: اندازه سلولها باید با دقت مورد نیاز تناسب داشته باشد
-
استفاده از فیلتر: کاهش دادههای جمعآوری شده با فیلترهای مناسب
-
مدیریت حافظه: بستن meshهای غیرضروری پس از استفاده
-
موازیسازی: استفاده از قابلیتهای موازی Geant4 برای شبیهسازیهای بزرگ
خطاهای رایج و راه حلها:
-
خطای حافظه: کاهش تعداد binها یا استفاده از meshهای کوچکتر
-
دادههای نادرست: بررسی صحت تعریف quantity و فیلترها
-
عملکرد کند: بهینهسازی اندازه mesh و استفاده از فیلتر
###扩展های پیشرفته:
-
User-defined scorers: توسعه scorerهای سفارشی
-
Weighted scorers: استفاده از وزندهی در محاسبات
-
Multi-functional detectors: detectors چندمنظوره برای اندازهگیری همزمان چند کمیت
این آموزش جامع نشان میدهد که چگونه سیستم Score در Geant4 میتواند به صورت قدرتمند برای جمعآوری و تحلیل دادههای شبیهسازی مورد استفاده قرار گیرد. با تسلط بر این قابلیت، کاربران میتوانند شبیهسازیهای دقیقتر و کاراتری انجام دهند.