Geant4-toolkit

Geant4-toolkit

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

Geant4-toolkit

Contact me: geant4.toolkit.zabihiATgmail.com

تعریف چشمه (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 مرتبط را درک نمایید.

معرفی اجزای یک مثال 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 برنامه شبیه‌سازی شما تکمیل شده است به این معنا که با اجرای برنامه، با توجه به فیزیک تعریف شده، تابش تعریف شده در هندسه تعیین شده ردیابی خواهد شد تا جایی که با توجه به انرژی تابشی ذره و فیزیک و هندسه مساله امکان ردیابی آن باشد و همچنین تابش از محیط خارج نشده باشد.




برون کشی داده

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