Geant4-toolkit

Geant4-toolkit

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

Geant4-toolkit

Contact me: geant4.toolkit.zabihiATgmail.com

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




برون کشی داده

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