15 نکته مهم در تعریف مواد در Geant4
تعریف صحیح مواد در Geant4 یکی از اساسیترین مراحل شبیهسازی است که تأثیر مستقیمی بر دقت نتایج دارد. در این آموزش به ۱۵ نکته کلیدی میپردازیم که هر کاربر Geant4 باید بداند.
۱. اولویت با مواد NIST
/ / ✅ Correct method
G4NistManager* nist = G4NistManager::Instance();
G4Material* water = nist->FindOrBuildMaterial("G4_WATER");
G4Material* lead = nist->FindOrBuildMaterial("G4_Pb");
/ / ❌ Unnecessary method
G4Element* elH = new G4Element("Hydrogen", "H", 1., 1.008*g/mole);
/ / ... (manual water definition)
توضیح: پایگاه داده NIST شامل 316 ماده از پیش تعریف شده با ترکیب شیمیایی و چگالی دقیق است.
۲. دقت در چگالی مواد
/ / ✅ Exact density
G4Material* aluminum = new G4Material("Aluminum", 2.698*g/cm3, 1);
/ / ❌ Approximate density (unacceptable)
G4Material* aluminum = new G4Material("Aluminum", 2.7*g/cm3, 1);
اهمیت: خطای ۱٪ در چگالی میتواند تا ۲٪ خطا در محاسبات دوزیمتری ایجاد کند.
۳. مدیریت ایزوتوپها برای شبیهسازیهای دقیق
/ / For nuclear activation simulations
G4Isotope* U235 = new G4Isotope("U235", 92, 235, 235.044*g/mole);
G4Isotope* U238 = new G4Isotope("U238", 92, 238, 238.051*g/mole);
G4Element* enrichedU = new G4Element("EnrichedUranium", "U", 2);
enrichedU->AddIsotope(U235, 0.03); // 3% U-235
enrichedU->AddIsotope(U238, 0.97); // 97% U-238
۴. نامگذاری سیستماتیک مواد
/ / ✅ Standard naming
G4Material* water_biologic = nist->FindOrBuildMaterial("G4_WATER");
G4Material* air_STP = nist->FindOrBuildMaterial("G4_AIR");
G4Material* lead_shielding = nist->FindOrBuildMaterial("G4_Pb");
/ / ❌ Ambiguous names
G4Material* mat1 = nist->FindOrBuildMaterial("G4_WATER");
۵. تعریف مواد مرکب با درصد اتمی یا جرمی
/ / درصد اتمی (برای ترکیبات مولکولی)
G4Material* water = new G4Material("Water", 1.000*g/cm3, 2);
water->AddElement(elH, 2); // 2 اتم هیدروژن
water->AddElement(elO, 1); // 1 اتم اکسیژن
/ / درصد جرمی (برای آلیاژها)
G4Material* brass = new G4Material("Brass", 8.5*g/cm3, 2);
brass->AddElement(elCu, 0.65); // 65% جرمی مس
brass->AddElement(elZn, 0.35); // 35% جرمی روی
۶. توجه به حالت فیزیکی مواد
/ / مواد گازی در شرایط استاندارد
G4Material* air_gas = new G4Material("Air_Gas", 1.290*mg/cm3, 2,
kStateGas, 293.15*kelvin, 1*atmosphere);
/ / مواد مایع
G4Material* water_liquid = new G4Material("Water_Liquid", 1.000*g/cm3, 2,
kStateLiquid, 293.15*kelvin);
۷. بهینهسازی برای شبیهسازیهای پزشکی
/ / بافتهای بیولوژیکی استاندارد
G4Material* soft_tissue = nist->FindOrBuildMaterial("G4_TISSUE_SOFT_ICRP");
G4Material* bone_cortical = nist->FindOrBuildMaterial("G4_BONE_CORTICAL_ICRU");
/ / یا تعریف سفارشی
G4Material* tumor_tissue = new G4Material("Tumor_Tissue", 1.050*g/cm3, 5);
tumor_tissue->AddElement(elH, 0.104);
tumor_tissue->AddElement(elC, 0.256);
/ / ...
۸. تعریف خواص نوری برای دتکتورها
G4MaterialPropertiesTable* mpt = new G4MaterialPropertiesTable();
/ / ضریب شکست
G4double pp[2] = {2.0*eV, 4.0*eV};
G4double rindex[2] = {1.50, 1.50};
mpt->AddProperty("RINDEX", pp, rindex, 2);
/ / جذب نوری
G4double absorb[2] = {1000*cm, 1000*cm};
mpt->AddProperty("ABSLENGTH", pp, absorb, 2);
scintillator->SetMaterialPropertiesTable(mpt);
۹. مدیریت حافظه برای مواد سفارشی
cpp
class DetectorConstruction : public G4VUserDetectorConstruction { private: std::vector<G4Material*> userMaterials; // نگهداری اشارهگرها public: void DefineCustomMaterials() { G4Material* customMat = new G4Material("Custom", 5.0*g/cm3, 3); userMaterials.push_back(customMat); // مدیریت حافظه } };
۱۰. اعتبارسنجی مواد تعریف شده
cpp
void ValidateMaterial(G4Material* material) { G4cout << "=== Material Validation ===" << G4endl; G4cout << "Name: " << material->GetName() << G4endl; G4cout << "Density: " << material->GetDensity()/(g/cm3) << " g/cm3" << G4endl; G4cout << "Radiation Length: " << material->GetRadlen()/cm << " cm" << G4endl; G4cout << "Nuclear Interaction Length: " << material->GetNuclearInterLength()/cm << " cm" << G4endl; }
۱۱. مواد برای شرایط محیطی خاص
cpp
// مواد در دما و فشار مختلف G4Material* air_low_pressure = new G4Material("Air_LowPressure", 0.5*1.290*mg/cm3, 2, kStateGas, 293.15*kelvin, 0.5*atmosphere); // مواد در دمای بالا G4Material* steel_high_temp = new G4Material("Steel_HighTemp", 7.8*g/cm3, 5, kStateSolid, 800*kelvin);
۱۲. استفاده از مواد در هندسه پیچیده
cpp
// مواد برای فانتومهای لایهای std::map<G4String, G4Material*> phantomMaterials; phantomMaterials["Skin"] = nist->FindOrBuildMaterial("G4_SKIN_ICRP"); phantomMaterials["Muscle"] = nist->FindOrBuildMaterial("G4_MUSCLE_SKELETAL_ICRP"); phantomMaterials["Bone"] = nist->FindOrBuildMaterial("G4_BONE_CORTICAL_ICRU"); // دسترسی سیستماتیک در طول شبیهسازی
۱۳. ثبت مواد در فایل GDML
cpp
// ذخیره مواد در فایل GDML برای استفاده مجدد G4GDMLParser parser; parser.Write("my_geometry_with_materials.gdml", worldPhys); // خواندن مواد از فایل GDML parser.Read("my_geometry_with_materials.gdml");
۱۴. عیبیابی مشکلات مواد
cpp
// بررسی خطاهای رایج void CheckMaterialConsistency(G4Material* material) { if(material->GetDensity() <= 0) { G4Exception("Material error", "Mat01", FatalException, "Material density must be positive"); } if(material->GetNumberOfElements() == 0) { G4Exception("Material error", "Mat02", FatalException, "Material has no elements"); } }
۱۵. مستندسازی مواد
cpp
/** * Material: Tissue_Equivalent * Density: 1.04 g/cm³ * Composition (mass fraction): * H: 10.1% * C: 11.1% * N: 2.6% * O: 76.2% * Reference: ICRP 23, 1975 * Use: Medical physics simulations */ G4Material* tissue_equivalent = new G4Material("Tissue_Equivalent", 1.04*g/cm3, 4); // ... تعریف ترکیب
جمعبندی
این ۱۵ نکته، بهترین روشهای تعریف مواد در Geant4 را پوشش میدهد. رعایت این اصول تضمین میکند که شبیهسازیهای شما از دقت و قابلیت اطمینان بالایی برخوردار باشند. همیشه مواد خود را قبل از استفاده در شبیهسازیهای نهایی اعتبارسنجی کنید.