Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab4.doc
Скачиваний:
31
Добавлен:
12.04.2015
Размер:
272.38 Кб
Скачать

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

«Юго-западный государственный университет»

Кафедра КиТ ЭВС

Методические указания к выполнению лабораторной работы «Микроскопический метод расчёта прохождения ионизирующих излучений через вещество (метод Монте-Карло, библиотека программ 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;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]