Geant4-toolkit

Geant4-toolkit

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

Geant4-toolkit

Contact me: geant4.toolkit.zabihiATgmail.com

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


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

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

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








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




برون کشی داده

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



نصب Geant4


نصب geant4 بر روی سیستم عامل لینوکس


نصب پیش‌نیازها


  1. ابتدا سیستم عامل را با دستورات زیر آپدیت و آپگرید نمایید:
  2.  sudo apt-get update و sudo apt-get upgrade
  3. سپس کتابخانه‌های مورد نیاز را نصب کنید.
  4.  پیشنهاد می‌دهم هر برنامه را جداگانه نصب کنید تا از نصب تک تک کتابخانه‌ها مطمئن شوید. زیرا نصب نشدن هر کتابخانه مساوی است با دیدن خطایی خاص هنگام نصب برنامه!
  5.  همچنین اگر برای نصب هر کتابخانه خطایی مشاهده کردید با جستجو در انجمن‌های معرفی شده حتماً راه حل مناسب را خواهید یافت. 
  6. می‌توانید در قسمت نظرات هم خطای خود را اعلام بفرمایید. 


  • sudo apt-get install g++ 
  • sudo apt-get install  libxmu-dev 
  • sudo apt-get install  freeglut3-dev
  • sudo apt-get install  mesa-common-dev
  • sudo apt-get install  mesa-utils
  • sudo apt-get install  libglu1-mesa
  • sudo apt-get install libgl1-mesa-dev
  • sudo apt-get install  libgl1-mesa-dri
  • sudo apt-get install  libxi-dev 
  • sudo apt-get install  libxerces-c-dev
  • sudo apt-get install expat 
  • sudo apt-get install libexpat-ocaml
  • sudo apt-get install libexpat-ocaml-dev 




  • نصب cmake نسخه 3.5 به بالا
    •  از سایت سی میک   نسخه مرتبط به لینوکس  Uinx/Linux Source با فرمت  tar.gz. را دانلود کنید.
    • سپس آن را  extract کنید.
    • حال در فولدر برنامه ترمینال را در همان آدرس باز کنید و دستور  configure/.   را وارد و اجرا کنید.  اگر فایل درست دانلود شده باشد، با نوشتن حرف اول دستور و زدن کلید tab باید دستور کامل شود.
    • سپس make  کنید. (دستور make  را در ترمینال وارد کنید.)
    • در نهایت make install  را وارد کنید. 
    • اگر هنگام نصب برنامه با خطای دسترسی به مسیر نصب مواجه شدید  عبارت sudo  را قبل از دستور اصلی وارد کنید و  نصب برنامه را پیش ببرید.

    دانلود Geant4

    •  آخرین نسخه را از منوی سمت راست سایت اصلی دانلود کنید.
    • سعی کنید نسخه بتا را دانلود نکنید.
    •  پیشنهاد می‌شود حتماً از یک نرم افزار دانلود برنامه مثل Internet Download Manager  استفاده کنید. زیرا ممکن است فایل ها به طور کامل دانلود  نشوند.
    • فایل‌های زیر را دانلود کنید.


    نصب Geant4

    • گرافیک برنامه
      • اگر برای دیدن گرافیک برنامه علاقمند به دیدن تصاویر سه بعدی هستید پیشنهاد می‌شود Qt را نصب کنید. 
      • البته برنامه‌های دیگری را تیم اصلی پیشنهاد داده است که به فراخور نیازتان می‌توانید آنها را انتخاب کنید. 
      • برنامه qt  را باید قبل از نصب Geant4، با دستور زیر در ترمینال نصب کنید:

     sudo apt-get install qtdeclarative5-dev qml-module-qtquick-controls

    • نصب Geant4
      • پیشنهاد می‌شود مسیر نصب را /usr/local/include/ انتخاب نمایید. ( ابتدا گزینه home  را از  desktop انتخاب کنید و از قسمت آخرین گزینه‌ی منوی  سمت چپ، other locations و سپس computer را انتخاب کنید. حال فولدر usr را پیدا کنید و ...)
      • با نوشتن دستور sudo  chmod  ­-R  777 /usr/local/include در ترمینال،  دسترسی به این مسیر برای نصب و اجرای برنامه‌ها به وجود خواهد آمد.  در غیر این صورت حین اجرای مثال ها با مشکل مواجه خواهید شد.
      • همه‌ی فایل‌های دیتا (تصویر دوم دانلودها) را در این مسیر و در فولدری به نام data  قرار دهید. نیازی به extract کردن آنها نیست.
      • فایل سورس برنامه (تصویر اول دانلود) را هم در این مسیر و کنار فولدر data   قرار دهید. البته باید آن را  extract  کرده باشید.
      • به اسم فولدر برنامه source_  اضافه کنید که حین نصب برنامه برایتان مشخص باشد.
      • یک فولدر با نام build در کنار data و source برنامه بسازید تا نصب را در آن فولدر ادامه دهید.
      • حال به مسیر زیر بروید: /usr/local/include/geant4­-10-3_source/cmake/Modules
      • فایل Geant4InstallData.cmake را پیدا کنید و در آن با ctrl+f عبارت cern را جستجو کنید تا عبارت زیر را بیابید: 


    set GEANT4_DATASETS_URL  http://geant4.cern.ch/support/source
      • حال به جای آدرس سایت سرن محل قرارگیری فایل data خودتان را جایگذاری کنید. یعنی /usr/local/include/data/
      •  با این کار به جای دانلود مستقیم از سایت سرن و نیاز به اینترنت و ... دیتاها از روی سیستم خودتان خوانده خواهد شد.
      • حال به فولدر build بروید و ترمینال را در آن آدرس باز کنید. سپس عبارت زیر را در آن وارد کنید و کلید inter را بزنید.

  • cmake -DCMAKE_INSTALL_PREFIX=/usr/local/include/geant4.10.03          /usr/local/include/geant4.10.03_source -DGEANT4_INSTALL_DATA=ON -DGEANT4_INSTALL_EXAMPLES=ON -DGEANT4_USE_OPENGL_X11=ON -DGEANT4_USE_GDML=ON -DGEANT4_USE_RAYTRACER_X11=ON  -DGEANT4_BUILD_MULTITHREADED=ON -DGEANT4_USE_QT=ON

        • آدرس اول /usr/local/include/geant4.10.03  محل نصب برنامه است و آدرس دوم /usr/local/include/geant4.10.03_source محل قرارگیری سورس برنامه است. می‌توانید به آدرس اول یک پسوند Install اضافه کنید تا برایتان واضح‌تر شود.
        • اگر پیش نیاز qt را نصب کرده‌اید می‌توانید GEANT4_USE_QT=ON- را در cmake باقی بگذارید. با این کار برنامه گرافیکی شما قابلیت‌های خوبی را برای نمایش گرافیک خواهد داشت.
        • اگر این دستور را در این مرحله وارد نکنید برنامه گرافیکی شما برنامه ساده opengl خواهد بود.
        • با  قرار دادن  DGEANT4_BUILD_MULTITHREADED=ON-  در دستور نصب قادر خواهید بود با دستوراتی در برنامه‌‌هایتان همه core های سیستم را در حین اجرای برنامه درگیر کنید.
        • بعد از اتمام این مرحله، make را در ترمینال وارد کنید. با نوشتن  make -j5 در حین اجرای برنامه مثلاً 5 هسته سیستم درگیر خواهد شد و فرایند نصب سریع‌تر پیش می‌رود.
        • این مرحله زمان بیشتری نسبت به مراحل دیگر نیاز دارد.
        • پس از اتمام این مرحله،  make install را در ترمینال وارد کنید. 
        • قاعدتاً نباید مشکل و خطای دسترسی ببینید. با نوشتن عبارت sudo  قبل از دستور بالا، این مشکل رفع خواهد شد.  (حتماْ حواستان باشد که باید دستور sudo  chmod  ­-R  777 .... را قبل از شروع فرآیند نصب زده باشید و دیدن خطا در این مرحله می تواند به دلیل فراموش کردن وارد کردن این دستور باشد.)
        • در مرحله آخر نصب باید در home سیستم عامل تان،  با  کلید ترکیبی ctrl+h فایل مخفی شده  bashrc. را نمایان کنید. سپس دو خط زیر را با توجه به مسیر فولدر Geant4 نصب شده در انتهای فایل وارد کنید. برای اینکه اشتباه تایپی و ... رخ ندهد بهتر است که به  آدرس مشخص شده بروید و با زدن ctrl+l آدرس بار محل نمایان می‌شود و حال همان را در انتهای فایل .bashrc وارد کنید.
    • source    /usr/local/include/geant4.10.02-install/bin/geant4.sh
    • source   /usr/local/include/geant4.10.02-install/share/Geant4-10.2.3/geant4make/geant4make.sh

    • برای مشاهده‌ی فایل های C++ می توانید برنامه ویرایش متن  geany  را با دستور  sudo apt-get install geany نصب کنید.


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


      حال نصب برنامه شما با موفقیت انجام شده است.



      برای اطمینان از نصب کامل و در ست برنامه، به این لینک بروید و یک مثال را اجرا کنید.


      دانش پایه‌ی C++

      دانش پایه‌ی C++

      برای برنامه نویسی با ابزار Geant4 و انجام تغییرات در آن نیاز هست که زبان C++ را بفهمید. همچنین با مفاهیم الگوریتم نویسی آشنا باشید و بتوانید دستوراتی را به برنامه خاص خودتان اضافه کنید.


      الگوریتم

      برای آشنایی با مفاهیم الگوریتم نویسی این چند لینک را ببینید.

      • الگوریتم چیست؟ مثال‌هایی ساده از الگوریتم در برنامه‌نویسی
      • الگوریتم را به زبان بسیار بسیار ساده یاد بگیریم
      • آموزش الگوریتم و الگوریتم نویسی

      • زبان C++

          برای آشنایی با مفاهیم پایه برنامه نویسی C++ این چند لینک را ببینید.




          مقدمه (2)-آشنایی با ابزار Geant4


          دانش‌های پایه مورد نیاز برای استفاده از Geant4


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

          v     مفهوم شی‌گرایی (Object Oriented Technology): یک شیوه برنامه‌نویسی است که ساختار یا بلوک اصلی اجزای آن، شی‌ها می‌باشند. در واقع در این شیوه برنامه‌نویسی، برنامه به شی گرایش پیدا می‌کند. به این معنا که داده‌ها و توابعی که قرار است بر روی این داده‌ها عمل کنند، تا حد امکان در قالبی به نام شی در کنار یکدیگر قرار گرفته، جمع‌بندی شده و یک واحد (شی) را تشکیل داده و نسبت به محیط بیرونِ خود، کپسوله می‌شوند و از این طریق، توابع بیگانه‌ی خارج از آن شی، دیگر امکان ایجاد تغییر در داده‌های درون آن شی را ندارند. در برنامه‌های خیلی پیشرفته از این مفهوم استفاده خواهد شد و کاربر معمولی فقط باید بداند که Geant4 با این روش تمام پیش‌نیازهای اصلی برای شبیه‌سازی را یک بار ساخته است و او باید فقط قادر باشد آنها را درک و استفاده نماید. همچنین در صورت لزوم امکان اصلاح و سفارشی کردن اجزا با توجه به نیاز کاربر وجود دارد.

          v     Unix/Linux: محیط استاندارد برای اجرا است و بنابراین باید آشنایی مختصری با محیط و نیز اجرای کدهای C++ در آن وجود داشته باشد. در محیط ویندوز هم قابل Geant4 امکان اجرا دارد اما پیشنهاد تیم سازنده استفاده از محیط لینوکس است.  اینجا را ببنید.


          زمینه‌های کاربرد 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 خواهیم داشت.


          هسته 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 برای انرژی و برد و ... با توجه به مساله خاص خود تعریف کند.