برای ارتباط و طرح سوالات خود، لطفا با این ایمیل ارتباط برقرار کنید. معمولا این ایمیل را سریع تر از خود پیام های وبلاگ، بررسی می کنم.
Contact me: geant4.toolkit.zabihiATgmail.com
در این کانال یوتیوپ و کانال آپارات سعی خواهم کرد همه مفاهیمی که از جینت ۴ می دانم را به زبانی بسیار ساده آموزش بدهم. امیدوارم مفید واقع شود.
در این وبینار به بحث فیزیک محاسباتی و کاربردهای رایانه در فیزیک پرداخته ام.
در این وبینار به معرفی ابزار Geant4 پرداخته ام
و کاربردها ی آن را بر اساس تجربیات خودم و با نگاه به مساله DNA بیان کرده ام.
برای نصب Geant4 در ویندوز می توانید از این فایل که دوستی (خانم آرایش نیا) تجربه ش را داشته اند و به اشتراک گذاشتند، استفاده نمایید. من خودم تجربه ای ندارم.
چند نکته مهم برنامه نویسی C++ را از کتاب برنامه سازی پیشرفته انتشارات پیام نور و نویسندگی دکتر احمد فراهی انتخاب کردم که برای آشنایی با بخشها و کلاسهای مختلف Geant4 میتواند مفید باشد. خود کتاب را هم از طریق بخش اول، میتوانید دانلود نمایید.
این صفحه هم آموزش خوبی به زبان فارسی دارد.
پیشنهاد می کنم حتماْ ویراستار eclipse را به عنوان ادیتورتان انتخاب کنید. |
چند نکته مهم برنامه نویسی C++ را از کتاب برنامه سازی پیشرفته انتشارات پیام نور و نویسندگی دکتر احمد فراهی انتخاب کردم که برای آشنایی با بخشها و کلاسهای مختلف Geant4 میتواند مفید باشد. خود کتاب را هم از طریق این لینک برنامه سازی پیشرفته انتشارات پیام نور میتوانید دانلود نمایید.
این صفحه هم آموزش خوبی به زبان فارسی دارد.
استفاده از نسخه باینری root
یک روش ساده برای استفاده از root در ابزار Geant4، استفاده از نسخه باینری root است.
source /home/linux_user/applications/root/bin/thisroot.sh
export PATH=/home/linux_user/applications/root/lib:$PATH
export PATH=/home/linux_user/applications/root/include:$PATH
move sudo mv ~/Desktop/MyDocument ~/Desktop/MyNewDocument
copy sudo cp ~/Desktop/MyDocument /Users/fuadramses/Desktop/MyDocument
این صفحه آموزش خود گروه ROOT هست و بسیار کاربردی و مفید و ساده!
این صفحه برای شروع کار با روت بسیار مفید و البته با زبانی ساده است.
این صفحه و این صفحه هم ویدیوهای آموزشی ساده و مفیدی برای یادگیری روت دارد.
مثال های نوشته شده توسط خود گروه ROOT
تعریف چشمه (1)
برای درک بهتر مثال B1 را باز کنید و از فولدر Src کلاس B1PrimaryGeneratorAction را باز کنید.
اطلاعات برنامه از نسخه 10.5 توضیح داده میشود.
G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable();
G4String particleName;
G4ParticleDefinition* particle
= particleTable->FindParticle(particleName="gamma");
ذره تابشی: گاما
میتوانید به جای ذره گاما هر ذره یا یونی را بگذارید.
لطفاً تعریف نوع ذره را در مثالهای دیگر نگاه کنید.
روش مقایسه یک دستور در مثالهای مختلف روش بسیار مفیدی برای درک دستورات C++ و نیز Geant4 است.
fParticleGun->SetParticleDefinition(particle);
fParticleGun->SetParticleMomentumDirection(G4ThreeVector(0.,0.,1.));
جهت تابش: در راستای مثبت محور z
اگر عدد اول ، یک باشد و باقی صفر؛ یعنی تابش در جهت مثبت محورX است.
لطفاً باز هم تعریف جهت تابش را در مثالهای دیگر نگاه کنید.
fParticleGun->SetParticleEnergy(6.*MeV);
انرژی ذره تابشی 6: مگا الکترون
برای تعریف کیلو الکترون ولت از نماد keV استفاده نمایید.
fParticleGun->SetParticlePosition(G4ThreeVector(x0,y0,z0));
x0,y0,z0 مکان و نقطه آغاز تابش است.
G4UniformRand()
G4double x0 = 10*cm* G4UniformRand()-5*cm;
G4double y0 = 10*cm* G4UniformRand()-5*cm;
G4double z0 = 10*cm;
G4double angle = (G4UniformRand()-….);
particleGun->SetParticleMomentumDirection (G4ThreeVector(sin(angle),0.,cos(angle)));
//fluorine
G4int Z = 9, A = 18;
G4double ionCharge = 0.*eplus;
G4double excitEnergy = 0.*keV;
G4ParticleDefinition* ion
= G4IonTable::GetIonTable()->GetIon(Z,A,excitEnergy);
fParticleGun->SetParticleDefinition(ion);
fParticleGun->SetParticleCharge(ionCharge);
fParticleGun->SetParticleMomentumDirection(G4RandomDirection());
به ابتدای کلاس توجه کنید تا ببینید برای استفاده از این تابع تولید جهت تصادفی، چه کلاسی include شده است.
G4ParticleDefinition* particle;
G4int i = (int)(5.*G4UniformRand());
switch(i) {
case 0: particle = positron; break;
case 1: particle=proton; break;
...
تعریف طیف انرژی
یکی از روشهای تعریف طیف انرژی در تابش بدین صورت است:
G4int numberParticles = 1;particleGun = new G4ParticleGun(numberParticles); // Gamma energy spectrum ... energySpectrum.push_back(0.783913);energySpectrum.push_back(0.170416);energySpectrum.push_back(0.045671);
- بخش دوم، در ادامه خط زیر نوشته شود:
particleGun->SetParticleMomentumDirection(direction);G4double random = G4UniformRand();G4double sum = 0;G4int i = 0;while(sum<random){sum+=energySpectrum[i];i++;}// energy spectrumif(i==1){primaryParticleEnergy = 27.4*keV;}else{if(i==2){primaryParticleEnergy = 31.4*keV;}else {primaryParticleEnergy = 35.5*keV;}}particleGun->SetParticleEnergy(primaryParticleEnergy);
- نمونه کلاس کامل را دانلود کنید تا درک بهتری برای تعریف طیف داشته باشید.
- میتوانید در مثالهای دیگر، انواع تعریف تابش را هم مشاهده و درک نمایید.
همچنین خوب هست در این مرحله، به فولدر incluce بروید و کلاس B1PrimaryGeneratorAction.hh را باز کنید و سعی کنید ارتباط آن با کلاس .cc مرتبط را درک نمایید.
برای درک بهتر لطفاً مثال B1 را باز کنید و سپس از فولدر src فایل B1DetectorConstruction را باز کنید.
برای دیدن جزییات دیگر تعریف هندسه، مطلب اجزای DetectorConstruction و نحوه تعریف آنها-مقدماتی1 را ببینید.
تعریف جنس ماده سازنده
پس از طراحی هندسه که چه شکلی هندسی دارد، باید ماده آن را هم تعیین کرد. معمولاً تعریف مادهها، قبل از شروع تعریف هندسه آورده میشود. برای تعریف ماده در جینت۴ چندین روش وجود دارد.
برای مثال در این روش از کتابخانه nist -در ابتدای کلاس DetectorConstruction فرخوانی شد- موادی که قبلاْ با پیشوند G4 تعریف شده اند با نام جدید در این مثال خاص فراخوانی میشوند. در این مثال ماده جهان هوا در نظر گرفته شده است.
G4NistManager* nist = G4NistManager::Instance();
G4Material* world_mat = nist->FindOrBuildMaterial("G4_AIR");
G4Material* env_mat = nist->FindOrBuildMaterial("G4_WATER");
G4Material* shape2_mat = nist->FindOrBuildMaterial("G4_BONE_COMPACT_ICRU");
سپس در قسمت logic آن ماده را به هندسه ساخته شده نسبت می دهیم.
G4LogicalVolume* logicWorld =
new G4LogicalVolume(solidWorld, //its solid
world_mat, //its material
"World"); //its name
در این قسمت می توان حساسیت ماده و میدان الکتریکی و مغناطیسی را برای آن تعریف کرد (تعریف هندسه پیشرفته).
به عنوان مثال دیگر B3a را ببینید که مولکولی ساخته شده است:
G4Element* O = man->FindOrBuildElement("O" , isotopes);
G4Element* Si = man->FindOrBuildElement("Si", isotopes);
G4Element* Lu = man->FindOrBuildElement("Lu", isotopes);
G4Material* LSO = new G4Material("Lu2SiO5", 7.4*g/cm3, 3);
LSO->AddElement(Lu, 2);
LSO->AddElement(Si, 1);
LSO->AddElement(O , 5);
سپس به عنوان ماده نامیده می شود:
G4Material* cryst_mat = nist->FindOrBuildMaterial("Lu2SiO5");
یا مثال B4a را ببنید که اتمی ساخته شده است که با کتابخانه nist متفاوت است:
// Liquid argon material
G4double a; // mass of a mole;
G4double z; // z=mean number of protons;
G4double density;
new G4Material("liquidArgon", z=18., a= 39.95*g/mole, density= 1.390*g/cm3);
// The argon by NIST Manager is a gas with a different density
سپس به عنوان ماده نامیده میشود:
/ Get materials
G4Material* gapMaterial = G4Material::GetMaterial("liquidArgon");
یا doiPETDetectorConstruction.cc را در مثال /examples/advanced/doiPET/src را ببنید:
پیشنهاد می شود تعریف ماده را مانند این مثال در کلاس مجزایی در دتکتور تعریف کنید.
////////////////////////// Define Materials ////////////////////
void doiPETDetectorConstruction::DefineMaterials()
{
G4NistManager* nist = G4NistManager::Instance();
//Define air
air = nist->FindOrBuildMaterial("G4_AIR");
//Define PMMA
pmma = nist->FindOrBuildMaterial("G4_PLEXIGLASS"); //Default 1.19 g/cm3
//Define water
water = nist->FindOrBuildMaterial("G4_WATER");
//Defining polyethylene from NIST and modifying the density
polyethylene = nist->BuildMaterialWithNewDensity("polyethylene","G4_POLYETHYLENE",0.959*g/cm3);
polyethylene->GetIonisation()->SetMeanExcitationEnergy(56*eV);
//polyethylene_NEMA, defualt density 0.94 g/cm3, and excitation energy = 57.4 eV
polyethylene_NEMA = nist->FindOrBuildMaterial("G4_POLYETHYLENE");
//Define expanded polystyrene by modifiying the density to mimic lung phantom used in phantom experiment
polystyrene = nist->BuildMaterialWithNewDensity( "polystyrene","G4_POLYSTYRENE",0.3*g/cm3);
isotopes = false;
//Defile Aluminum material for the detetor cover
Aluminum = nist->FindOrBuildMaterial("G4_Al", isotopes);
//Define elements for the GSO crystal (scintillator)
O = nist->FindOrBuildElement("O" , isotopes);
Si = nist->FindOrBuildElement("Si", isotopes);
Gd = nist->FindOrBuildElement("Gd", isotopes);
//define GSO crystal for PET detector
GSO = new G4Material("GSO", 6.7*g/cm3, 3);
GSO->AddElement(Gd, 2);
GSO->AddElement(Si, 1);
GSO->AddElement(O, 5);
crystalMaterial = nist->FindOrBuildMaterial("GSO");
}
////////////////////////////////////////////////////////////////
|
همچنین می توانید هنگامی که QT باز است از منوی سمت چپ و گزینه help، گزینه material را انتخاب کنید و مطابق شکل زیر به اطلاعات موجود در ابزار Geant4 دسترسی پیدا کنید.
به عبارت دیگر QT یک راهنمای در دسترس برای کاربران به کمک منوی help ایجاد کرده است.