راهنمای اجرای مجازی Geant4
برای شروع کار با ابزار Geant4 استفاده از این روش پیشنهاد می گردد. فرآیند نصب زمان کمتری نیاز دارد و بسیار آسان تر از نصب واقعی آن در محیط لینوکس است. فقط باید یک اینترنت پرسرعت برای دانلود فایل اصلی داشته باشید و کمی حوصله!
شکل 1
شکل 2
شکل 3
اجزای DetectorConstruction و نحوه تعریف آنها-مقدماتی (1)
برای درک بهتر لطفاً مثال B1 را باز کنید و سپس از فولدر src فایل B1DetectorConstruction را باز کنید.
در ابتدای فایل یک سری کلاس اصطلاحاً Include شده است که با توجه به تعاریف و توضیحات بعدی متوجه خواهید شد که برای مثال خاص خودتان نیاز هست که چه اجزایی را اضافه کنید.
اما یک تعداد فایل مشخص باید وجود داشته باشد که ابتد ا یک به یک آنها توضیح داده می شود:
#include "B1DetectorConstruction.hh"
همان کلاس مکمل فایلتان است که در فولدر Include قرار دارد و گاهی نیاز هست تغییراتی در آن انجام داد.
همان طور که قبلاْ گفته شد به ازای هر کلاسی در فولدر src نیاز به مکمل آن در فولدر Include است.
#include "G4NistManager.hh"
#include "G4Material.hh"
همچنین با کمک این دو کلاس می توانید اطلاعات خروجی تان را، برای مثال در چاپ در ترمینال، به صورت زیر تعریف کنید. طول stepsize را بر اساس واحد طول متناسب با مقدار آن چاپ خواهد کرد. برای کمیت های دیگر نیز مانند انرژی و زمان و طول و ...می توان از این دستورات استفاده کرد: Length, Time, Energyو ...
با این دستور چاپ
G4cout << G4BestUnit(StepSize, "Length");
خروجی در ترمینال نمایش داده خواهد شد طول گام به همراه واحدش است.
نیاز هست که سه بخش اصلی برای تک تک بخشهای سیستم تعریف کنید.
تعریف هندسه مساله
اولین بخش تعریف هندسه است. به این معنا که باید مشخص کنید حجم مورد نظرتان چه هندسه ای است و چه ابعادی دارد. برای مثال کره هست یا مکعب یا .... و اندازه ابعادش چقدر است.
با کمک دستورات زیر هندسه تعریف خواهد شد:
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
۴ نوع هندسه می توان تعریف کرد:
تعریف موقعیت هندسه
حال باید موقعیت هندسه ساخته شده را تعیین کرد. مرکز جهان مرکز محور مختصات است و جهت خاصی را هم به آن نسبت نمی دهند زیرا معنایی ندارد. در مورد هندسه های بعدی که اجزای سازنده خواهند بود باید دقت کرد که محل شان و دروان شان (اگر وجود داشته باشد) باید نسبت به مرکز جهان و محورهای مختصات تعریف شده اولیه مشخص شود. هنگامی که هندسه ای درون هندسه ی دیگری قرار می گیرد باید دقت کرد که برای آن باید مادری تعریف کرد که آن را در بر گرفته است.
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
هر مثال به صورت فولدری هست که از دو فولدر src و include و تعدادی فایل تشکیل شده است. برای درک و آَشنایی بهتر لطفاً از قسمت مثالها و فولدر basic مثال B1 را باز کنید.
دقت کنید که با اضافه شدن کلاسی به برنامه، باید دوباره cmake انجام دهید. ولی برای تغییرات در هر کلاس فقط نیاز به make کردن هست. |
حال به فولدر src بروید.
با تعیین شدن این سه کلاس اصلی یعنی Physicslist، PrimaryGeneratorAction و DetectorConstruction برنامه شبیهسازی شما تکمیل شده است به این معنا که با اجرای برنامه، با توجه به فیزیک تعریف شده، تابش تعریف شده در هندسه تعیین شده ردیابی خواهد شد تا جایی که با توجه به انرژی تابشی ذره و فیزیک و هندسه مساله امکان ردیابی آن باشد و همچنین تابش از محیط خارج نشده باشد.
برون کشی داده
برای داشتن اطلاعات رخ داده در هر بخش هندسه، باید کاربر اطلاعات مورد نظر را خودش مشخص کند و سپس به کمک دستوارت و کلاسهای خاصی استخراج کند. برای اطلاعات بیشتر این صفحه را ببنید.
نحوه اجرای مثالها با روش cmake
چند نکته دیگر
به دنیای Geant4 خوش آمدید.
نصب geant4 بر روی سیستم عامل لینوکس
نصب پیشنیازها
دانلود Geant4
نصب Geant4
برای مشاهدهی فایل های C++ می توانید برنامه ویرایش متن geany را با دستور sudo apt-get install geany نصب کنید.
اما پیشنهاد می کنم حتماْ ویراستار eclipse را به عنوان ادیتورتان انتخاب کنید تا بتوانید حرفه ای تر کار کنید.
حال نصب برنامه شما با موفقیت انجام شده است.
برای اطمینان از نصب کامل و در ست برنامه، به این لینک بروید و یک مثال را اجرا کنید.
v C++: ابزار Geant4 بر پایه آن نوشته شده است. لزومی ندارد یک برنامه نویس حرفهای باشید، فقط کافی است که با مفاهیم برنامه نویسی و ساختار الگوریتمها آَشنا باشید. بتوانید آن را درک کنید. موارد خاص خودتان را در مثالها پیدا کنید و در مواردی بسیار نادر و البته آسان آنها را بنویسید. این لینک را ببنید.
v مفهوم شیگرایی (Object Oriented Technology): یک شیوه برنامهنویسی است که ساختار یا بلوک اصلی اجزای آن، شیها میباشند. در واقع در این شیوه برنامهنویسی، برنامه به شی گرایش پیدا میکند. به این معنا که دادهها و توابعی که قرار است بر روی این دادهها عمل کنند، تا حد امکان در قالبی به نام شی در کنار یکدیگر قرار گرفته، جمعبندی شده و یک واحد (شی) را تشکیل داده و نسبت به محیط بیرونِ خود، کپسوله میشوند و از این طریق، توابع بیگانهی خارج از آن شی، دیگر امکان ایجاد تغییر در دادههای درون آن شی را ندارند. در برنامههای خیلی پیشرفته از این مفهوم استفاده خواهد شد و کاربر معمولی فقط باید بداند که Geant4 با این روش تمام پیشنیازهای اصلی برای شبیهسازی را یک بار ساخته است و او باید فقط قادر باشد آنها را درک و استفاده نماید. همچنین در صورت لزوم امکان اصلاح و سفارشی کردن اجزا با توجه به نیاز کاربر وجود دارد.
v Unix/Linux: محیط استاندارد برای اجرا است و بنابراین باید آشنایی مختصری با محیط و نیز اجرای کدهای C++ در آن وجود داشته باشد. در محیط ویندوز هم قابل Geant4 امکان اجرا دارد اما پیشنهاد تیم سازنده استفاده از محیط لینوکس است. اینجا را ببنید.
ابزار Geant4 در موضوعات بسیاری به کار برده شده و به مقاله مرجع معرفی ابزار بیش از 4000 بار استناد رخ داده است.
v large scale HEP experiments
v Space science and astrophysics
v Medical physics, nuclear medicine
v Radiation protection
v Accelerator physics
v Pest control, food irradiation
v Homeland security
کاربرهای معمولی (پژوهشگران یا دانشجویان دکتری یا ارشد با عناوین مرتبط به زمینههای مطرح شده بالا) برای طراحی مساله خود باید ابتدا مرتبطترین مثال را از بین مثالهای فراوان Geant4 پیدا کنند. سپس مثال مورد نظر را به دقت برای درک آن مطالعه نمایند. راهنمای مربوط به مثال را با عنوان readme که در همه مثالها وجود دارد، حتماً مطالعه نمایند. سپس مثال را با توجه به نیاز خود اصلاح نمایند. به عبارت دیگر کاربر معمولی نیازی نیست که از ابتدا شروع به نوشتن یک برنامه نماید. پیشنهاد میشود برای اضافه کردن هر تعریف جدیدی در مثال خودتان، حتماً به دیگر مثالهای نسخه نصب شده در سیستم خودتان مراجعه کنید.
کاربر معمولی بعد از آشنایی با هسته اصلی Geant4 قادر خواهد بود به کمک مثالهای متعددی که در منبع برنامه نصبی وجود دارد تبحر خود را افزایش داده و بعد از مدتی مساله مورد نظر خود را طراحی و اطلاعات مورد نیاز را از استخراج نماید. بنابراین ابتدا نگاهی کلی و بدون در نظر گرفتن جزئیات، به هسته Geant4 خواهیم داشت.
v Run مجموعهای از Eventها و با شرایط یکسان هندسه و ساختار شبیهسازی و یک تعریف مشخص و ثابت از فیزیک برهمکنشها در مسأله است. G4RunManager کلاس مدیریتی و G4UserRunAction کلاس اختیاری کاربر برای تعاریف مورد نیاز است.
v Event به عنوان واحد پایه در شبیهسازی تعریف میشود، یعنی هر ذره تابشی یک Event در نظر گرفته میشود. در ابتدای فرایند، ردها (track) تولید میشوند و در پشته (stack) نگهداری میشوند. trackها از پشته یکی یکی خارج شده و ردیابی میگردند. نتایج ثانویه هر track دوباره به پشته ارسال میشود. این فرایند تا تمام شدن پشته ادامه مییابد و وقتی پشته خالی شود یعنی یک event تمام شده است. کلاس G4Event اطلاعات یک event را در انتهای آن نمایش میدهد که شامل لیست ذزه ورودی و ذرات ایجاد شده در event است و همه ردها را به عنوان خروجی در خود دارد. G4EventManager کلاس مدیریتی و G4UserEventAction کلاس اختیاری کاربر برای تعاریف مورد نیاز است.
v Tracking: تصویر لحظهای ذره توسط track داده میشود. در آن همه کمیتهای فیزیکی متناظر به آن موقعیت وجود دارد و اطلاعات قبلی را در خود ندارد. کلاس G4Trac اطلاعات هر track را دارد. G4TrackingManager کلاس مدیریتی و G4UserTrackingAction کلاس اختیاری کاربر برای تعاریف مورد نیاز است. Track زمانی حذف میشود که:
o ذره از محیط شبیهسازی (جهان) خارج شود.
o واپاشی یا پراکندگی غیرالاستیک رخ دهد.
o انرژی جنبشی ذره به صفر برسد و فرایند “AtRest”ی نیاز هم نباشد.
o کاربر نیاز داشته باشد به طور دستی (مصنوعی) ذره را از بین ببرد (kill).
v Step: هر step شامل اطلاعات جزئی از یک track هست. یک track جمع stepها نیست. در عوض هر track با step به روزرسانی میشود.
در Geant4 همه ذرات تا آخرین مرحله از دست دادن همه انرژی جنبشی با توجه به فیزیک تعریف شده ردیابی میشوند. تنها محدودیت تعریف شده انرژی آستانه برای تولید ذرات ثانویه است. کاربر خود میتواند cut برای انرژی و برد و ... با توجه به مساله خاص خود تعریف کند.
به نام رب رحمن
مروری کوتاه بر تواناییها و چگونگی استفاده از ابزار Geant4 در شبیهسازیها:
v Geant4 ابزاری رایگان و منبع باز است.
v فایل منبع و کتابخانهها و راهنمای کاربر و ابزار مورد نیاز از سایت http://cern.ch/geant4 قابل دانلود هست.
v مثالهای مختلف و بسیاری در منبع برنامه وجود دارد که کمک بسیار ارزشمندی برای تسریع یادگیری و ساخت و اجرای برنامه شبیهسازی هر پژوهشگری خواهد بود.
v انجمن بسیار کاربردی به آدرس http://hypernews.slac.stanford.edu/HyperNews/geant4/top.pl برای به اشتراک گذاشتن و بحث درباره مسائل مختلف شامل گروههای مختلف وجود دارد. هنگامی که سوالی مطرح میشود تیم اصلی طراح ابزار هم در پاسخدهی مشارکت بسیار خوبی دارند.
v Geant4 ابزاری قدرتمند و همچنین پیچیدهای هست.
v غیرممکن هست همه نکات آن در یک روز آموزش داده شود.
v غیرممکن هست همه نکات در یک روز یاد گرفته شود.
v این ارائه سعی در ایجاد یک چشمانداز کلی به Geant4 و روشی برای چگونگی استفاده از آن است.
v پیدا کردن مسیر درست استفاده در ابزار پیچیده Geant4 کار آسانی نیست.
v چشم انداز روشن به یادگیری بیشتر کمک خواهد کرد.
شبیهسازی نقش مهمی در طراحی، ارزیابی عملکرد آزمایش و خطرات بالقوه، تست، توسعه و بهینهسازی در پروژههای آزمایشگاهی دارد. هدف ابزار Geant4 شبیهسازی عبور ذرات از ماده هست.
1. گام به گامِ عبور ذره در ماده و برهمکنشهای رخ داده با آن و میدانهای خارجی تعریف شده را ردیابی میکند تا زمانی که
v ذره همه انرژی جنبشیاش را از دست بدهد.
v به علت فرآیندهای فیزیکی ذره از بین برود.
v به مرز محیط شبیهسازی برسد.
2. کاربر قادر خواهد بود اطلاعات عبور ذره از ماده شامل جزئیات فرایندهای رخ داده در شبیهسازی را در مراحل زیر داشته باشد:
v در شروع و پایان عبور هر ذره
v در آغاز و شروع هر گام
v در هر محل خاص از سیستم طراحی شده توسط کاربر
سه اطلاعات اساسی را باید در هر شبیهسازی فراهم سازید:
v طراحی هندسه شبیهسازی و تعریف مواد به کار رفته در آن
v تعریف نوع ذره تابشی به همراه انرژی، مکان و جهت و کیفیت چگونگی تابش
v انتخاب فیزیک مناسب با توجه به مواد هندسه شبیهسازی و نوع تابش
در صورت نیاز میتوان میدانهای الکتریکی و مغناطیسی را هم اضافه نمود. با انجام این سه مرحله Geant4 تمام رویدادها را با توجه به هندسه طراحی شده و مواد آن و فیزیک مورد نظر ردیابی خواهد کرد.
در نهایت با توجه به طراحی انجام شده، کاربر میتواند دادههای مورد نیازش را از برنامه استخراج کند.