
- •1.Теоретические положения
- •1.1. Описание экспериментальной установки
- •1.3. Описание проекта Geant4
- •1.3.1 Описание файла проекта Example_lab.Сс
- •1.3 Класс DetectorConstruction
- •Объявление класса DetectorConstruction, наследуемого от g4vUserDetectorConstruction.
- •1.4 Класс SenstiveDetector
- •1.5 Класс PhysicsList
- •1.6 Класс PrimaryGeneratorAction
- •Задания
- •3. Контрольные вопросы
- •4. Содержание отчета
- •Приложение Материалы доступные в Geant4
- •1.Простые материалы
- •2. Nist (National Institute Standarts and Technology) соединения
- •10.3. Hep материалы
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
«Юго-западный государственный университет»
Кафедра КиТ ЭВС
Методические указания к выполнению лабораторной работы «Микроскопический метод расчёта прохождения ионизирующих излучений через вещество (метод Монте-Карло, библиотека программ GEANT4)»
Курск 2012
Цель работы:
- получить навыки расчёта прохождения ионизирующих излучений через вещество с помощью библиотек программ Geant4;
- научиться задавать геометрию среды, в которой будет происходить моделирование;
- научиться создавать различные вещества и смеси веществ;
- научиться получать различного рода зависимости.
1.Теоретические положения
1.1. Описание экспериментальной установки
Упрощенная модель любого ядерно-физического эксперимента состоит из трех компонент:
1. Источник излучения
2. Объект исследования (образец)
3. Детектор излучения
В этой лабораторной работе мы проведем моделирование такой упрощенной системы и познакомимся с каждым шагом создания программы моделирования.
Рисунок 1. Геометрия экспериментальной системы
1.3. Описание проекта Geant4
1.3.1 Описание файла проекта Example_lab.Сс
Программа моделирования состоит из следующих компонент (классов):
• PhysicsList: содержит список используемых частиц (гамма-кванты, электроны, позитроны) и процессов в которых они могут участвовать (фотоэффект, комптоновское рассеяние, образование электрон-позитронных пар для гамма; рассеяние, ионизация, тормозное излучение, аннигиляция для электронов/позитронов).
• DetectorConstruction: содержит описание используемых материалов, геометрии системы, детектора, настройки визуализации.
• PrimaryGenerationAction: в этом классе описывается источник частиц, в нашем случае это точечный источник нейтронов.
• SensitiveDetector: методы этого класса вызываются при прохождении частиц через детектор и в нашем случае этот класс служит для подсчета количества энергии оставленной частицами в детекторе.
Определение каждого класса помещается в соответствующий отдельный файл, а в главном файле проекта Example_lab.cc происходит сведение всего воедино и регистрация классов в G4RunManager.
Файл начинается с подключений заголовочных файлов. В Си++ объявления классов (то есть описание их полей, функций и констант) обычно размещаются в специальных заголовочных файлах с расширением .h или .hh, которые затем подключаются в файлы .cc директивой #include.
-
#include<G4RunManager.hh>
#include<G4UImanager.hh>
#include<G4UIterminal.hh>
#include<G4VisExecutive.hh>
#include<G4Material.hh>
#include<G4UserRunAction.hh>
#include<G4Run.hh>
#include<iostream>
#include<string>
#include<CLHEP/Random/Random.h>
#include<unistd.h>
#include<time.h>
В списке подключаемых файлов сначала перечислены системные, входящие в состав GEANT4 и компилятора, а затем заголовочные файлы текущего проекта. Они отличаются способом задания имени: не в угловых скобках <>, а в кавычках. Эти файлы должны быть размещены в папке include.
-
#include "DetectorConstruction.hh"
#include "PrimaryGeneratorAction.hh"
#include "EventAction.hh"
#include "SteppingAction.hh"
#include "SteppingVerbose.hh"
#include "PhysicsList.hh"
using namespace std;
const char macros[]="vis.mac";
Далее следует определение класса RunAction, который наследуется от класса G4UserRunAction и содержит функцию BeginOfRunAction, которая автоматически вызывается в начале каждого запуска. Здесь она просто выводит на экран порядковый номер запуска (0, 1 и т. д.). Для простоты определение этого класса не вынесено в отдельные файлы, а целиком приведено в Example_lab.cc.
-
class RunAction: public G4UserRunAction
{
public:
void BeginOfRunAction(const G4Run* aRun)
{
G4cout << "### Run " << aRun->GetRunID() << " start." << G4endl;
}
};
Далее следует определение функции main(). В Си++ main() является основной функцией программы, с которой начинается ее выполнение. Здесь происходит инициализация GEANT4 и все остальные вспомогательные действия, о которых говорилось выше.
-
int main(int argc,char** argv)
{
Установка экземпляра класса SteppingVerbose, который отвечает за печать подробной информации о каждом шаге частиц в процессе моделирования. Степень детализации выводимой информации зависит от числового параметра /stepping/verbose в файле vis.mac, 0 соответствует минимально подробной, а 9 максимально подробной информации о каждом шаге. Класс SteppingVerbose определен в файлах SteppingVerbose.hh и SteppingVerbose.cc. Оператор new создает объект — экземпляр этого класса и возвращает указатель на созданный объект.
-
G4VSteppingVerbose::SetInstance(new SteppingVerbose);
Настройка генератора случайных чисел. По умолчанию он возвращает одну и ту же последовательность случайных чисел, что удобно при отладке. Для генерирования более случайных последовательностей требуется задавать так называемое зерно (seed), которое в данном случае задается как сумма текущего времени в секундах и программного идентификатора. Это дает достаточно удовлетворительную случайность.
-
CLHEP::HepRandom::setTheSeed(time(0)+getpid());
Далее создается объект G4RunManager, который управляет запуском и остановкой моделирования.
-
G4RunManager * runManager = new G4RunManager;
Создается объект DetectorConstruction (см. класс DetectorConstrucion в файле DetectorConstruction.hh) и регистрируется в G4RunManager.
-
DetectorConstruction* detector_c = new DetectorConstruction;
runManager->SetUserInitialization(detector_c);
Так же создается и регистрируется в G4RunManager пакет физических процессов PhysicsList.
-
G4VUserPhysicsList *p = new PhysicsList;
runManager->SetUserInitialization(p);
Также можно использовать стандартные пакеты физических процессов. О них будет рассказано ниже.
-
runManager->SetUserInitialization(new QGSP_BIC_HP);
Далее создается и инициализируется объект класса G4VisExecutive, который позволяет различными способами визуализировать моделирование.
-
G4VisManager* visManager = new G4VisExecutive;
visManager->Initialize();
runManager->SetUserAction(new PrimaryGeneratorAction);
runManager->SetUserAction(new RunAction);
runManager->SetUserAction(new EventAction);
runManager->SetUserAction(new SteppingAction);
В конце концов вызывается метод G4RunManager::Initialize() и процесс инициализации GEANT4 завершается.
-
runManager->Initialize();
Печать информации о зарегистрированных материалах.
-
cout<<"===============================================================";
cout<<endl;
cout<< *(G4Material::GetMaterialTable()) << endl;
cout<<"===============================================================";
cout<<endl;
Наконец, через объект класса G4UImanager производится выполнение макрокоманд из файла vis.mac (на него указывает определенная выше переменная macros). Это удобно, потому что при изменении vis.mac не нужно перекомпилировать всю программу. В vis.mac находятся команды, непосредственно запускающие моделирование.
-
G4UImanager * UI = G4UImanager::GetUIpointer();
G4UIsession * session = new G4UIterminal();
UI->ExecuteMacroFile(macros);
Моделирование закончено. Освобождается память и программа завершается.
-
delete session;
delete visManager;
delete runManager;
return 0;
}