Geant4-toolkit

Geant4-toolkit

Contact me: geant4.toolkit.zabihiATgmail.com
Geant4-toolkit

Geant4-toolkit

Contact me: geant4.toolkit.zabihiATgmail.com

Geant4 Installation Guide

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: 

  •  Search ''update'' on Ubuntu's search engine and then select ''software updater'' then choose setting. In the first tab of setting page , change ''download from'' from ''server for your country'' to ''main server'' and also tick the check marks like bellow figure. Untick (deselect) “restricted” parts.


  • In the next tab (other softwares) just tick the ''source code''s and deselect all other parts. Then close the window.

Now enter commands in terminal for updating and upgrading platform  and wait to complete the process.
  •  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

      NOTE: When you enter this command and face with an error which said , cmake couldn't make a folder in a certain path because it became denied by ubuntu , use bellow command in each path to make it possible to create folders in that path. Or just add sudo before make or make install 
      • sudo chmod ¬R 777 /path

      Step 4 –  install QT

      Just type on your terminal:
       sudo apt-get install qtdeclarative5-dev qml-module-qtquick-controls

        Step 5 –  install GEANT4

        First go to  geant4 homepage and download source file and data files. 


        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

        • sudo chmod ¬R 777 /usr/local/include/
        Then create a build folder beside your source folder. Finally, you would have three folders (data – geant4-source – geant4-build)
        Now go to this path "/usr/local/include/geant4-source/cmake/Modules". Then find and open  ''Geant4InstallData.cmake'' file and press Ctrl+F and type '' cern '' to find a CERN's URL. Now delete the URL (as follow)
        set GEANT4_DATASETS_URL  http://geant4.cern.ch/support/source 
        Now replace the data folder's path :
        set GEANT4_DATASETS_URL     /usr/local/include/data/
        Save the file and  go back to geant4-build and right-click and select open in the terminal and then enter following commands:

        cmake -DCMAKE_INSTALL_PREFIX=/usr/local/include/geant4.10.07_install 
        /usr/local/include/geant4.10.07_source
         -DGEANT4_INSTALL_DATA=ON
        -DGEANT4_INSTALL_EXAMPLES=ON
        -DGEANT4_USE_OPENGL_X11=ON
        -DGEANT4_USE_GDML=ON 
        -DGEANT4_USE_RAYTRACER_X11=ON
          -DGEANT4_BUILD_MULTITHREADED=ON
         -DGEANT4_USE_QT=ON


        This is the installation path (will create once installation done): /usr/local/include/geant4.10.07_install    
        And this is the source path:  /usr/local/include/geant4.10.07_source 

        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

        Go to Home page on your computer and unhidden files in this directory by pressing Ctrl+H and then open '' .bashrc '' file and copy these two commands at the end of these text files and save it:
        source /usr/local/include/geant4.10.07/bin/geant4.sh
        source /usr/local/include/geant4.10.07/share/Geant4-10.7.2/geant4make/geant4make.sh

        Check the exact directory with your system.


        Step7 –  Run an example

        To run a project  first go to example's directory in 

         /usr/local/include/geant4.10.7_install/share/Geant4­10.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).


        Tutorial on Geant4 for users interested to begin or improve their usage of Geant4:  25-31 May 2021 CERN

        Geant4 First Steps Course:  John Apostolakis

        Google it:      geant4 site:videos.cern.ch   

        آموزش ویدیویی جینت ۴


        Contact me: geant4.toolkit.zabihiATgmail.com

        در این کانال یوتیوپ   و کانال آپارات سعی خواهم کرد همه مفاهیمی که از جینت ۴ می دانم را به زبانی بسیار ساده آموزش بدهم.  امیدوارم  مفید واقع شود.










        نصب Geant4 در ویندوز

        برای نصب Geant4 در ویندوز می توانید از این فایل که دوستی (خانم آرایش نیا)  تجربه ش را داشته اند و به اشتراک گذاشتند، استفاده نمایید. من خودم تجربه ای ندارم.

         دانلود فایل  نصب جینت ۴ در ویندوز

        استفاده از نسخه باینری root

        استفاده از نسخه باینری  root

         

        یک روش ساده برای استفاده از root در ابزار Geant4، استفاده از نسخه باینری root است.

        • ابتدا از صفحه‌ی دانلود    Latest ROOT Releases را انتخاب کنید.
        • سپس در صفحه‌ی جدید از بین فایل‌های مختلف قسمت Binary distributions نسخه متناسب با سیستم عامل‌تان را انتخاب و دانلود نمایید.
        • در یک فولدر دلخواه، فایل را از حالت فشرده دربیاورید.
        • سپس این فایل را در آدرس  my computer/etc/profile.d/ قرار دهید ( ابتدا گزینه home  را از  desktop انتخاب کنید و از قسمت آخرین گزینه‌ی منوی  سمت چپ، other locations و سپس computer را انتخاب کنید. حال فولدر etc را پیدا کنید و ...)
        • محتوای این فایل باید با نام root.ch ذخیره شود و  به صورت زیر است:

         

        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

         

         

        • درون فایلی که دانلود کرده‌اید، به جای آدرس‌های  خواسته شده، محل فولدر و فایل خواسته شده را با توجه به محل فولدر root در سیستم خودتان تغییر دهید.
        • اگر دسترسی کپی کردن در آن فولدر تعیین شده را نداشتید، از ترمینال کمک بگیرید و با دستور ،sudo cp   که بعدش باید ابتدا آدرس محل فایل باشد و قسمت بعدی آدرس محل کپی شدن، انتقال را انجام دهید.
        move    sudo  mv ~/Desktop/MyDocument ~/Desktop/MyNewDocument
        copy   sudo cp ~/Desktop/MyDocument /Users/fuadramses/Desktop/MyDocument
        
        • سپس نیاز هست که سیستم را restart کنید.
        • حال با باز کردن ترمینال و نوشتن عبارت root این ابزار باز خواهد شد.
        • برای دیدن خروجی‌های ساخته شده توسط root، باید در همان صفحه ترمینال عبارت new TBrowser را تایپ نمایید  و سپس خروجی ساخته شده را انتخاب نمایید.


        این صفحه آموزش خود گروه ROOT هست و بسیار کاربردی و مفید و ساده!

        این صفحه برای شروع کار با روت بسیار مفید و  البته با زبانی ساده است. 

        این صفحه و این صفحه هم ویدیوهای‌ آموزشی ساده و مفیدی برای یادگیری روت دارد.

        ROOT Basic Course 

        در این صفحه هم پاورپوینت های ورکشاپ جدیدی (۲۰۲۲)  از گروه روت را خواهید دید.

        مثال های نوشته شده توسط خود گروه   ROOT

          تعریف چشمه (1)

          تعریف چشمه (1)


          یکی از کلاس‌های اجباری در Geant4 کلاس PrimaryGeneratorAction است.
          پس از طراحی هندسه در DetectorConstruction، دومین قدم طراحی تابش است.
           در این بخش طراحی تابش به کمک کلاس G4Particle gun  توضیح داده خواهد شد.
           در این روش باید از زبان C++ برای طراحی کمک گرفت.
           در این کلاس ذره تابشی، انرژی آن، محل و جهت تابش آن تعیین می‌شود.
           ذره تابشی تولید نمی‌شود، فقط فراخوانی می‌گردد.

           برای درک بهتر مثال B1 را باز کنید و از فولدر Src کلاس B1PrimaryGeneratorAction را باز کنید. 

           اطلاعات برنامه  از نسخه 10.5  توضیح داده می‌شود.


           خط 54 تا 59 به تعریف ذره تابشی پرداخته است



            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  استفاده نمایید.


          •     خط 108 هم محل تابش را تعریف کرده است البته در خطوط قبلی مکان (x0,y0,z0) را تعیین کرده است. شما می‌توانید هر مقدار عددی دیگری را (حتما یکای آن را در کنارش، خودتان بنویسید) به جای این سه مختصه تعریف کنید:

          fParticleGun->SetParticlePosition(G4ThreeVector(x0,y0,z0));

          x0,y0,z0  مکان و نقطه آغاز تابش است.


          •     نکته مهمی در این مثال هست که استفاده از کلاسی است که اعداد تصادفی می‌سازد. این کلاس عددی بین صفر و یک به صورت تصادفی تولید می‌کند.

          G4UniformRand()

          •     اگر بخواهید که هر ذره تابشی هر بار در یک مکان و جهت خاصی تابیده شود می‌توانید با نوشتن برنامه‌ای ساده آن را تعریف کنید.
          •     برای مثال اگر بخواهید تابش از صفحه مربعی به اضلاع 10 سانتی‌متر و در صفحه z ثابت 10 سانتی‌متر و متقارن نسبت به محور z تابیده شود از دستور زیر استفاده کنید. با تکرار تابش برای تعدادی ذره مشاهده خواهید کرد که تابش از یک صفحه مربع شکل و در همان جهت مثبت z تابیده می‌شود.  در مثال زیر عدد کمینه -5 و عدد بیشینه +5 است.

          G4double x0 = 10*cm* G4UniformRand()-5*cm;

          G4double y0 = 10*cm* G4UniformRand()-5*cm;

          G4double z0 = 10*cm;


          •     در عبارت (a-b)*G4UniformRand()+b، اگر عدد تصادفی کمینه صفر باشد، عدد تولیدی b است و اگر عدد تصادفی بیشینه یک باشد، عدد تولیدی a می‌شود. یعنی با تکرار برنامه و تابش‌ اعداد تصادفی بین دو مقدار کمینه b و بیشینه a ساخته خواهد شد.
          •      اگر بخواهید جهت را هم خودتان تعریف کنید مثلاً می‌توانید با کمک کلاس تولید عدد تصادفی، زاویه تصادفی بسازید و بعد براساس آن جهت تابش را تعیین کنید

          G4double angle = (G4UniformRand()-….);

          particleGun->SetParticleMomentumDirection (G4ThreeVector(sin(angle),0.,cos(angle)));

           


          •     در مثال B3 ذره تابشی، یک یون خاص تعریف شده است:

              //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);


          •     در مثال wvalue  در آدرس  examples/extended/medical/dna/wvalue/، جهت تابش به صورت تصادفی تعریف شده است:

            fParticleGun->SetParticleMomentumDirection(G4RandomDirection());

           به ابتدای کلاس توجه کنید تا ببینید برای استفاده از این تابع تولید جهت تصادفی، چه کلاسی include شده است.


          •     پیشنهاد می‌کنم با این دید اولیه، مثال‌های دیگر را ببنید تا درک بهتری از تعریف تابش با کمک G4Particle gun پیدا کنید.
          •      به کمک این روش می‌توانید تابش‌های پیچیده‌ای که ممکن است برای پژوهش‌تان نیاز است طراحی کنید.
          •      برای مثال می‌توانید به طور همزمان چندین ذره تابشی را وارد هندسه کنید.


          •      یا انواع متفاوتی ذره تابشی را تعریف نمایید:

               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 spectrum
            if(i==1){primaryParticleEnergy = 27.4*keV;}
            else{ 
              if(i==2){primaryParticleEnergy = 31.4*keV;}
              else {primaryParticleEnergy = 35.5*keV;}}
            particleGun->SetParticleEnergy(primaryParticleEnergy);
          • نمونه کلاس کامل را دانلود کنید تا درک بهتری برای تعریف طیف داشته باشید.
          • می‌توانید در مثال‌های دیگر، انواع تعریف تابش را هم مشاهده و درک نمایید.

          • پیشنهاد می‌کنم بعد درک اولیه  از روش تعریف تابش با  G4Particle gun،  این دو مثال را هم ببنید و سعی نمایید درک نمایید:
          •     Desktop/examples/extended/eventgenerator/particleGun
          •         examples/advanced/xray_fluorescence


          همچنین خوب هست در این مرحله،  به فولدر incluce  بروید و کلاس B1PrimaryGeneratorAction.hh را باز کنید و سعی کنید ارتباط آن با کلاس .cc مرتبط را درک نمایید.

          اجزای DetectorConstruction و نحوه تعریف آنها-مقدماتی 2

          اجزای DetectorConstruction  و نحوه تعریف آنها-مقدماتی 2

          برای درک بهتر لطفاً مثال B1  را باز کنید و سپس از فولدر src فایل B1DetectorConstruction را باز کنید.

          برای دیدن جزییات دیگر تعریف هندسه، مطلب  اجزای DetectorConstruction  و نحوه تعریف آنها-مقدماتی1 را ببینید.


          تعریف جنس ماده سازنده


          پس از طراحی هندسه که چه شکلی هندسی دارد، باید ماده آن را هم تعیین کرد. معمولاً تعریف ماده‌ها، قبل از شروع تعریف هندسه آورده می‌شود. برای تعریف ماده در جینت۴ چندین روش وجود دارد.

          برای مثال در این روش از کتابخانه nist -در ابتدای کلاس DetectorConstruction فرخوانی شد- موادی که قبلاْ با پیشوند G4‌ تعریف شده اند با نام جدید در این مثال خاص فراخوانی می‌شوند. در این مثال ماده جهان هوا در نظر گرفته شده است. 


          G4NistManager* nist = G4NistManager::Instance();

          G4Material* world_mat = nist->FindOrBuildMaterial("G4_AIR");

          G4Materialenv_mat = nist->FindOrBuildMaterial("G4_WATER");

          G4Materialshape2_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");

          }


          ////////////////////////////////////////////////////////////////


          یا این تعریف گاز را ببینید:
          G4double density = 27. * mg/cm3;
          G4double temperature = 325. * Kelvin;
          G4double pressure = 50. * atmosphere;
          G4Material* CO2 = new G4Material(“CO2‐Gas”, density,  nComponents=2,  kStateGas, temperature, pressure);
          CO2‐>AddElement(elC, natoms=1);
          CO2‐>AddElement(elO, natoms=2); 


          با گشتن در مثال های مختلف می توانید تسلط کافی به تعریف ماده پیدا کنید.



          همچنین می توانید هنگامی که QT باز است از منوی سمت چپ و گزینه help، گزینه material را انتخاب کنید و مطابق شکل زیر به اطلاعات موجود در ابزار Geant4 دسترسی پیدا کنید.


          به عبارت دیگر QT یک راهنمای در دسترس برای کاربران به کمک منوی help ایجاد کرده است.

          راهنمای اجرای مجازی Geant4

          راهنمای اجرای مجازی Geant4


          برای شروع کار با ابزار Geant4 استفاده از این روش پیشنهاد می گردد.  فرآیند نصب  زمان کمتری نیاز دارد و بسیار آسان تر از نصب واقعی آن در محیط لینوکس است. فقط باید یک اینترنت پرسرعت برای دانلود فایل اصلی داشته باشید و کمی حوصله!



          • ابتدا آخرین نسخه‌ی VMware Workstation Player  را دانلود و نصب کنید.
          • سپس از آدرس لینک  گزینه دوم یعنی G4.10.5_CentOS7_us را دانلود کنید.
          • حال از داخل سیستم مجازی، برنامه   G4.10.5_CentOS7_us را  مطابق شکل 1 و 2 اجرا کنید، سپس منتظر بمانید تا سیستم لود شود. می ‌توانید با کلیک راست روی G4.10.5_CentOS7_us و  انتخاب setting برنامه،  ram و ... اختصاص داده به اجرای مجازی را افزایش دهید.


          شکل 1 

           شکل 2


          • اگر با خطای شکل 3 مواجه شدید از آدرس زیر به قسمت بایاس سیستم بروید  و روش ارائه شده در این لینک را اجرا کنید.

          شکل 3


          • حال ابتدا گزینه home  را از  desktop انتخاب کنید و از قسمت آخرین گزینه‌ی منوی  سمت چپ، other locations و سپس computer را انتخاب کنید.
          • سپس از آدرس /usr/local/geant4.10.05/share/Geant4-10.5.0/examples مثال ها را به home  یا desktop سیستم منتقل کنید.
          • روش اجرای مثال شبیه‌ی نسخه واقعی است، فقط باید در قسمت اول آدرس دهی دستور cmake عبارت زیر را وارد کنید: cmake -DGeant4_DIR=$G4COMP 





          اجزای DetectorConstruction و نحوه تعریف آنها-مقدماتی 1



          اجزای DetectorConstruction  و نحوه تعریف آنها-مقدماتی (1)



          برای درک بهتر لطفاً مثال B1  را باز کنید و سپس از فولدر src فایل B1DetectorConstruction را باز کنید.

          در ابتدای فایل یک سری کلاس اصطلاحاً Include شده است که با توجه به تعاریف و توضیحات بعدی متوجه خواهید شد که برای مثال خاص خودتان نیاز هست که چه اجزایی را اضافه کنید.


          اما یک تعداد فایل مشخص باید وجود داشته باشد که ابتد ا یک به یک آنها توضیح  داده می شود:


          #include "B1DetectorConstruction.hh"

          همان کلاس مکمل فایل‌تان است که در فولدر Include  قرار دارد و گاهی نیاز هست تغییراتی در آن انجام داد.

          همان طور که قبلاْ‌ گفته شد به ازای هر کلاسی  در فولدر src‌ نیاز به مکمل آن در فولدر Include است.


          #include "G4NistManager.hh"

          #include "G4Material.hh"

          برای تعاریف مواد در هندسه نیاز به فراخوانی این کلاس‌ها  از کتابخانه اصلی Geant4 است.
          در geant4‌ می توان مواد زیر را تعریف نمود:
          isotopes <> G4Isotope 
          elements <> G4Element 
          molecules <> G4Material 
          compounds and mixtures <> G4Material
          G4Isotope و  G4Element ویژگی های اتمی را توصیف می کنند مانند
          Atomic number, number of nucleons, mass of a mole, shell energies, crosssections per atoms, ...
          G4Material ویژگی های ماکروسکوپیک را تعریف می کند مانند
          temperature, pressure, state, density – Radiation length, absorption length, etc…


          #include "G4SystemOfUnits.hh"
          #include "G4PhysicalConstants.hh"
          تعریف همه‌ی کمیت‌ها و در همه کلاس‌ها  بهتر است حتماْ همراه با واحدش باشد تا بعدها در محاسبات دچار سردرگمی در ابعاد کمیت‌های تعریف شده نشوید. با فراخوانی این دو کلاس در هر  کلاسی، می توانید کمیت‌ها را همراه با ابعاد یا واحدشان به راحتی تعریف کنید. برای مثال
          G4double width = 12.5 * m; 
          G4double density = 2.7 * g/cm3;

          واحدهای پایه در Geant4 ‌تعریف شده است و باقی واحدها از آن استخراج خواهد شد:
          • nanosecond (ns)
          • millimetre (mm)
          •  megaelectronvolt (MeV) 
          • unit charge (eplus) 
          • kelvin
          •  candela 
          • radian 
          • steradian

          همچنین با کمک این دو کلاس می توانید اطلاعات خروجی تان را، برای مثال در چاپ در ترمینال، به صورت زیر تعریف کنید. طول stepsize‌ را بر اساس واحد طول متناسب با مقدار آن چاپ خواهد کرد. برای کمیت های دیگر نیز مانند انرژی و زمان و طول و ...می توان از این دستورات استفاده کرد: Length, Time, Energyو ...

          با این دستور چاپ

          G4cout << G4BestUnit(StepSize, "Length");

           خروجی در ترمینال نمایش داده خواهد شد طول گام به همراه واحدش است.


          تعریف هندسه
          فعلاً نیازی به دانستن چند خط اول این کلاس ندارید! سراغ خط زیر بروید. در داخل آن هندسه های مورد نظر تعریف شده است:
          G4VPhysicalVolume* B1DetectorConstruction::Construct()
          داخل این قسمت همه ی هندسه را می توان تعریف کرد 
          }

          ابتدا نیاز هست جهانی را در هندسه تعریف کنید که همه اجسام هندسه تان در آن قرار خواهد گرفت. معمولاْ هندسه جهان را به صورت مکعب و ساخته شده از خلا یا هوا در نظر می گیرند. همه ی اجسام دیگر در هندسه باید داخل جهان قرار بگیرند بنابراین نیاز است که ابعاد آن را طوری انتخاب کنید که همه ی سیستمی که طراحی خواهید کرد در آن ابعاد قرار بگیرد. مبدا مختصات جهان در مرکز هندسی آن  و در اینجا مرکز هندسی مکعب قرار دارد.


          نیاز هست که سه بخش اصلی برای تک تک بخش‌های سیستم تعریف کنید. 

          1. هندسه و ابعاد شکل: مکعب، کره و ..
          2. جنس ماده سازنده: آب، هوا و...
          3. موقعیت هندسه در فضا: مکان و جهت هندسه در محیط

          تعریف هندسه مساله

          اولین بخش تعریف هندسه است. به این معنا که باید مشخص کنید حجم مورد نظرتان چه  هندسه ای است و چه ابعادی دارد. برای مثال کره هست یا مکعب یا .... و اندازه ابعادش چقدر است.

           با کمک دستورات زیر هندسه تعریف خواهد شد:


              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



          ۴ نوع هندسه می توان تعریف کرد: 

          1. CSG (Constructed Solid Geometry) solids:  G4Box, G4Tubs, G4Cons, G4Trd, …
          2. Specific solids (CSG like) : G4Polycone, G4Polyhedra, G4Hype, … • G4TwistedTubs, G4TwistedTrap, …
          3. BREP (Boundary REPresented) solids: G4BREPSolidPolycone, G4BSplineSurface, ... & Any order surface …
          4. Boolean solids • G4UnionSolid, G4SubtractionSolid,...


          تعریف موقعیت هندسه

          حال باید موقعیت هندسه ساخته شده را تعیین کرد. مرکز جهان مرکز محور مختصات است و جهت خاصی را هم به آن نسبت نمی دهند زیرا معنایی ندارد. در مورد هندسه های بعدی که اجزای سازنده خواهند بود باید دقت کرد که محل شان و دروان شان (اگر وجود داشته باشد) باید نسبت به مرکز جهان و محورهای مختصات تعریف شده اولیه مشخص شود. هنگامی که هندسه ای درون هندسه ی دیگری قرار می گیرد باید دقت کرد که برای آن باید مادری تعریف کرد که آن را در بر گرفته است.



            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



          معرفی اجزای یک  مثال Geant4


           هر مثال  به صورت فولدری هست که از دو فولدر src و include و تعدادی فایل تشکیل شده است. برای درک و آَشنایی بهتر لطفاً از قسمت مثال‌ها و فولدر basic مثال B1 را باز کنید.

          • در فولدر اصلی یک فایل با عنوان  exampleB1.cc  قرار دارد که از این به بعد به عنوان main  برنامه نامیده می‌شود. این فایل با پسوند cc. فایل اصلی‌اس است که ارتباط بین اجرای برنامه را نشان خواهد داد.
          •  فولدر src و  include شامل اجزای سازنده برنامه هستند. می‌توان گفت اکثر تغییرات باید در کلاس‌های فولدر src رخ بدهد.
          • به ازای هر کلاسی که در فولدر src با پسوند cc وجود دارد، کلاس مشابه آن در فولدر include و با پسوند hh باید وجود داشته باشد. به این معنا که اگر در برنامه‌ای نیاز بود کلاسی به برنامه‌تان اضافه کنید باید هر دو بخش در فولدرها کپی کنید.



          دقت کنید که با اضافه شدن کلاسی به برنامه، باید دوباره cmake انجام دهید. ولی برای تغییرات در هر کلاس فقط نیاز به make کردن هست.



          حال به فولدر src بروید.

          • اولین کلاس که B1ActionInitialization نام دارد، کلاسی است که به شما کمک خواهد کرد برنامه را به روش موازی یعنی درگیر کردن همه coreهای سیستم اجرا کنید. این روش در نسخه‌های 4.10 به بالا به برنامه اضافه شده است و روش MULTITHREADED مالتی ترد نام دارد. برای اطلاعات بیشتر این قسمت را ببینید.


          • دومین کلاس B1DetectorConstruction نام دارد. در این کلاس اجزای سازنده شبیه‌سازی‌تان را وارد خواهید کرد. ابتدا باید یک فضا به نام جهان بسازید. سپس همه اجزای دیگر در آن قرار خواهند گرفت. به عبارت دیگر مختصات اجزای اصلی نسبت به مبدأ جهان تعریف خواهد شد. برای هر هندسه‌ای که تعریف می‌کنید ابتدا باید تعیین کنید که شکل هندسی آن چیست مانند اینکه کره هست یا مکعب یا .... سپس جنس آن را باید تعیین کنید یعنی از آب ساخته شده است یا سرب یا .... سپس محل قرارگیری و جهت آن را  باید نسبت به مادرش مشخص کنید. برای اطلاعات بیشتر این قسمت را ببنید.


          • سومین کلاسی که در همه مثال‌ها مشاهده خواهید کرد کلاس B1PrimaryGeneratorAction است. در این کلاس کیفیت و کمیت تابش وارد شده به هندسه مساله باید تعیین کنید. یعنی چه ذره تابشی، با چه انرژی، در چه جهتی و از کجا و چگونه بتابد. برای اطلاعات بیشتر این قسمت را ببینید.


          • با تعیین هندسه مساله و نوع تابش، نیاز هست که فیزیک رخدادها نیز تعیین گردد. به این معنی که آن ذره تابشی به چه طریقی در محیط یا همان هندسه مساله ردیابی بشود. به  این کلاس Physicslist می‌گویند. در نسخه‌های جدید Geant4 یعنی بالای 10  این امکان وجود دارد که شما  در main  برنامه بسته فیزیک لیست را معرفی کنید. در مثال B1 از یک بسته خاص فیزیک استفاده شده است. اگر به فولدر اصلی برنامه برگردید و main آن را باز کنید می‌توانید فیزیک لیست تعیین شده را ببینید "QBBC". با ctrl+F به راحتی کلمات یا دستورات دلخواه را در برنامه پیدا کنید.



          با تعیین شدن این سه کلاس اصلی یعنی Physicslist، PrimaryGeneratorAction و DetectorConstruction برنامه شبیه‌سازی شما تکمیل شده است به این معنا که با اجرای برنامه، با توجه به فیزیک تعریف شده، تابش تعریف شده در هندسه تعیین شده ردیابی خواهد شد تا جایی که با توجه به انرژی تابشی ذره و فیزیک و هندسه مساله امکان ردیابی آن باشد و همچنین تابش از محیط خارج نشده باشد.




          برون کشی داده

          برای داشتن اطلاعات رخ داده در هر بخش هندسه، باید کاربر اطلاعات مورد نظر را خودش مشخص کند و سپس به کمک دستوارت و کلاس‌های خاصی استخراج کند. برای اطلاعات بیشتر این صفحه را ببنید.