For communication and asking your questions, please contact me via this email. I usually check this email faster than the blog messages themselves.
Contact me: geant4.toolkit.zabihiATgmail.com
GEANT4 installation on Ubuntu
There are several ways to install Geant4 on your computer. Which one is available or best for you depends on both your operating system and usage requirements. In all cases, always use the most recent Geant4 release to ensure use of the latest bug fixes, features, and help the developers and community to provide quick user support. Here, I describe my way:)
To install Geant4 there are several steps. Just follow them carefully.
Step 1 – Update and Upgrade :
First of all, you must update and upgrade your Ubuntu platform. For doing that, it's better to change Ubuntu update center's setting. So follow bellow steps:
- sudo apt-get update
- sudo apt-get upgrade
Step 2 – Software Required to Build Geant4
Enter bellow commands in terminal one by one and wait to complete (Be sure have seen "done" for each one).
Note: pay attention about the probable error and notification, all of the processes should be finished correctly.
* sudo apt-get install g++
* sudo apt-get install libxmu-dev
* sudo apt-get install freeglut3-dev
* sudo apt-get install mesa-common-dev
* sudo apt-get install mesa-utils
* sudo apt-get install libglu1-mesa
* sudo apt-get install libgl1-mesa-dev
* sudo apt-get install libgl1-mesa-dri
* sudo apt-get install libxi-dev
* sudo apt-get install libxerces-c-dev
* sudo apt-get install expat
* sudo apt-get install libexpat-ocaml
* sudo apt-get install libexpat-ocaml-dev
Step 3 – install CMake 3.3 or higher.
Geant4 uses CMake to configure a build system for compiling and installing the toolkit headers, libraries and support tools. In this step we must install CMake compiler on our platform. First go to cmake page and download the Uinx/Linux Source with .tar.gz format. (Source distributions:)
Then unpack downloaded file and copy the folder in your home page or any directory you want. Now open cmake folder and open terminal in the same folder (directory). Then write three bellow commands one by one. Wait to complete the configuring and making installation. When configuring complete you must face with comment like this: ''CMake has bootstrapped. Now run make''
- ./configure (If the downloaded file is complete, just type two frist letters then click the tap key. It must be filled out)
- make -j6 (6 is number of core of your system)
- make install
Step 4 – install QT
After download, just extract source file and leave data files compact and then copy both folder (data and geant4-source) to ''/usr/local/include/'' . Before copying the files, please type this command on terminal
Replace 'geant4.10.07' with your version.
Note: pay attention to see ''configuring done''
Then type:
• make -jn
If your computer has n core you should enter n after j. The last command for installing geant4 is mentioned here:
• make install
Step6 – Configuring the Environment
Step7 – Run an example
To run a project first go to example's directory in
/usr/local/include/geant4.10.7_install/share/Geant410.7
and copy'' examples'' folders in home page. Now open example in home directory an then choose one of three folders (Basic/B1 )
Then create a Build folder inside the B1 folder. Go to the Build folder and open terminal and type:
cmake ..
then
make -jn
then
./exampleB1
Download PDF file (Geant4 Installation Guide).
Geant4 First Steps Course: John Apostolakis
Google it: geant4 site:videos.cern.ch |
برای ارتباط و طرح سوالات خود، لطفا با این ایمیل ارتباط برقرار کنید. معمولا این ایمیل را سریع تر از خود پیام های وبلاگ، بررسی می کنم.
Contact me: geant4.toolkit.zabihiATgmail.com
در این کانال یوتیوپ و کانال آپارات سعی خواهم کرد همه مفاهیمی که از جینت ۴ می دانم را به زبانی بسیار ساده آموزش بدهم. امیدوارم مفید واقع شود.
در این وبینار به بحث فیزیک محاسباتی و کاربردهای رایانه در فیزیک پرداخته ام.
برای نصب 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 ایجاد کرده است.
راهنمای اجرای مجازی Geant4
برای شروع کار با ابزار Geant4 استفاده از این روش پیشنهاد می گردد. فرآیند نصب زمان کمتری نیاز دارد و بسیار آسان تر از نصب واقعی آن در محیط لینوکس است. فقط باید یک اینترنت پرسرعت برای دانلود فایل اصلی داشته باشید و کمی حوصله!
شکل 1
شکل 2
شکل 3
اجزای DetectorConstruction و نحوه تعریف آنها-مقدماتی (1)
برای درک بهتر لطفاً مثال B1 را باز کنید و سپس از فولدر src فایل B1DetectorConstruction را باز کنید.
در ابتدای فایل یک سری کلاس اصطلاحاً Include شده است که با توجه به تعاریف و توضیحات بعدی متوجه خواهید شد که برای مثال خاص خودتان نیاز هست که چه اجزایی را اضافه کنید.
اما یک تعداد فایل مشخص باید وجود داشته باشد که ابتد ا یک به یک آنها توضیح داده می شود:
#include "B1DetectorConstruction.hh"
همان کلاس مکمل فایلتان است که در فولدر Include قرار دارد و گاهی نیاز هست تغییراتی در آن انجام داد.
همان طور که قبلاْ گفته شد به ازای هر کلاسی در فولدر src نیاز به مکمل آن در فولدر Include است.
#include "G4NistManager.hh"
#include "G4Material.hh"
همچنین با کمک این دو کلاس می توانید اطلاعات خروجی تان را، برای مثال در چاپ در ترمینال، به صورت زیر تعریف کنید. طول stepsize را بر اساس واحد طول متناسب با مقدار آن چاپ خواهد کرد. برای کمیت های دیگر نیز مانند انرژی و زمان و طول و ...می توان از این دستورات استفاده کرد: Length, Time, Energyو ...
با این دستور چاپ
G4cout << G4BestUnit(StepSize, "Length");
خروجی در ترمینال نمایش داده خواهد شد طول گام به همراه واحدش است.
نیاز هست که سه بخش اصلی برای تک تک بخشهای سیستم تعریف کنید.
تعریف هندسه مساله
اولین بخش تعریف هندسه است. به این معنا که باید مشخص کنید حجم مورد نظرتان چه هندسه ای است و چه ابعادی دارد. برای مثال کره هست یا مکعب یا .... و اندازه ابعادش چقدر است.
با کمک دستورات زیر هندسه تعریف خواهد شد:
G4Box* solidWorld =
new G4Box("World", //its name
0.5*world_sizeXY, 0.5*world_sizeXY, 0.5*world_sizeZ); //its size
یا
G4Trd* solidShape2 =
new G4Trd("Shape2", //its name
0.5*shape2_dxa, 0.5*shape2_dxb,
0.5*shape2_dya, 0.5*shape2_dyb, 0.5*shape2_dz); //its size
G4Box* solidWorld یعنی از کلاس G4Box یک هندسه به نام solidWorld ساخته خواهد شد. گاهی برای برون کشی داده فقط نیاز به نام solidهندسه هست.
یا
G4Trd* solidShape2 یعنی از کلاس G4Trd یک هندسه به نام solidShape2 ساخته خواهد شد.
در خط دوم مشخصات هر هندسه تعریف میشود:
اسم کلی آن: "world" یا "Shape2"
ابعاد "world" یعنی طول و عرض و ارتفاع آن:
0.5*world_sizeXY, 0.5*world_sizeXY, 0.5*world_sizeZ
ابعاد "Shape2" یعنی طول (کمترین و بیشترین مقدار آن) و عرض (کمترین و بیشترین مقدار آن) و ارتفاع: 0.5*shape2_dxa, 0.5*shape2_dxb, 0.5*shape2_dya, 0.5*shape2_dyb, 0.5*shape2_dz
۴ نوع هندسه می توان تعریف کرد:
تعریف موقعیت هندسه
حال باید موقعیت هندسه ساخته شده را تعیین کرد. مرکز جهان مرکز محور مختصات است و جهت خاصی را هم به آن نسبت نمی دهند زیرا معنایی ندارد. در مورد هندسه های بعدی که اجزای سازنده خواهند بود باید دقت کرد که محل شان و دروان شان (اگر وجود داشته باشد) باید نسبت به مرکز جهان و محورهای مختصات تعریف شده اولیه مشخص شود. هنگامی که هندسه ای درون هندسه ی دیگری قرار می گیرد باید دقت کرد که برای آن باید مادری تعریف کرد که آن را در بر گرفته است.
G4VPhysicalVolume* physWorld =
new G4PVPlacement(0, //no rotation
G4ThreeVector(), //at (0,0,0)
logicWorld, //its logical volume
"World", //its name
0, //its mother volume
false, //no boolean operation
0, //copy number
checkOverlaps); //overlaps checking
برای تعریف فیزیک به ترتیب دوران، محل مرکز جسم، نام logic آن، نام کلی آن، نام مادر (اولین هندسه در بردارنده آن هندسه)، استفاده از متغیرهای بولین برای تعاریف هندسه های پیچیده تر، عدد کپی هندسه و در نهایت بررسی روی هم افتادگی تعربف خواهد شد. برای هندسه جهان دروان آن معنایی ندارد زیرا هندسه ی غیر از آن وجود ندارد. محل مرکز آن هم مرکز محور مختصات خواهد بود. اما برای هندسه های بعدی موقعیت شان باید با توجه به مرکز هندسی مادرشان تعریف شود. برای مثال شکل ۲ در هندسه دیگری به نام logicEnv قرار دارد. دقت کنید که نام logic مادر باید نوشته شود نه نام کلی آن!
new G4PVPlacement(0, //no rotation
pos2, //at position
logicShape2, //its logical volume
"Shape2", //its name
logicEnv, //its mother volume
false, //no boolean operation
0, //copy number
checkOverlaps); //overlaps checking
در انتهای کلاس دتکتور باید return physWorld; وجود داشته باشد.
معرفی اجزای یک مثال Geant4
هر مثال به صورت فولدری هست که از دو فولدر src و include و تعدادی فایل تشکیل شده است. برای درک و آَشنایی بهتر لطفاً از قسمت مثالها و فولدر basic مثال B1 را باز کنید.
دقت کنید که با اضافه شدن کلاسی به برنامه، باید دوباره cmake انجام دهید. ولی برای تغییرات در هر کلاس فقط نیاز به make کردن هست. |
حال به فولدر src بروید.
با تعیین شدن این سه کلاس اصلی یعنی Physicslist، PrimaryGeneratorAction و DetectorConstruction برنامه شبیهسازی شما تکمیل شده است به این معنا که با اجرای برنامه، با توجه به فیزیک تعریف شده، تابش تعریف شده در هندسه تعیین شده ردیابی خواهد شد تا جایی که با توجه به انرژی تابشی ذره و فیزیک و هندسه مساله امکان ردیابی آن باشد و همچنین تابش از محیط خارج نشده باشد.
برون کشی داده
برای داشتن اطلاعات رخ داده در هر بخش هندسه، باید کاربر اطلاعات مورد نظر را خودش مشخص کند و سپس به کمک دستوارت و کلاسهای خاصی استخراج کند. برای اطلاعات بیشتر این صفحه را ببنید.