تعریف چشمه (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 مرتبط را درک نمایید.
معرفی اجزای یک مثال Geant4
هر مثال به صورت فولدری هست که از دو فولدر src و include و تعدادی فایل تشکیل شده است. برای درک و آَشنایی بهتر لطفاً از قسمت مثالها و فولدر basic مثال B1 را باز کنید.
دقت کنید که با اضافه شدن کلاسی به برنامه، باید دوباره cmake انجام دهید. ولی برای تغییرات در هر کلاس فقط نیاز به make کردن هست. |
حال به فولدر src بروید.
با تعیین شدن این سه کلاس اصلی یعنی Physicslist، PrimaryGeneratorAction و DetectorConstruction برنامه شبیهسازی شما تکمیل شده است به این معنا که با اجرای برنامه، با توجه به فیزیک تعریف شده، تابش تعریف شده در هندسه تعیین شده ردیابی خواهد شد تا جایی که با توجه به انرژی تابشی ذره و فیزیک و هندسه مساله امکان ردیابی آن باشد و همچنین تابش از محیط خارج نشده باشد.
برون کشی داده
برای داشتن اطلاعات رخ داده در هر بخش هندسه، باید کاربر اطلاعات مورد نظر را خودش مشخص کند و سپس به کمک دستوارت و کلاسهای خاصی استخراج کند. برای اطلاعات بیشتر این صفحه را ببنید.