Geant4-toolkit

Geant4-toolkit

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

Geant4-toolkit

Contact me: geant4.toolkit.zabihiATgmail.com

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


Contact me: geant4.toolkit.zabihiATgmail.com

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










کاربردهای ابزار شبیه ساز Geant4-ژورنال کلاب دانشگاه شیراز

در این وبینار به معرفی ابزار Geant4 پرداخته ام 

و  کاربردها ی آن را بر اساس تجربیات خودم و با نگاه به مساله DNA بیان کرده ام.


لینک فیلم در آپارات

دانلود فایل پاورپوینت

دانلود فیلم در وبلاگ


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

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

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

نکات مهم C++ -بخش دوم

چند نکته مهم برنامه نویسی C++ را  از کتاب برنامه سازی پیشرفته انتشارات پیام نور و نویسندگی  دکتر احمد فراهی انتخاب کردم که برای آشنایی با بخش‌ها و کلاس‌های مختلف Geant4 می‌تواند مفید باشد.  خود کتاب را هم از طریق بخش اول،  می‌توانید دانلود نمایید.

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






نکات مهم C++ -بخش اول


پیشنهاد می کنم حتماْ ویراستار eclipse را به عنوان ادیتورتان انتخاب کنید.

چند نکته مهم برنامه نویسی C++ را  از کتاب برنامه سازی پیشرفته انتشارات پیام نور و نویسندگی  دکتر احمد فراهی انتخاب کردم که برای آشنایی با بخش‌ها و کلاس‌های مختلف 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 ایجاد کرده است.