Студопедия — Основные концепции.
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Основные концепции.






Как сказано выше, библиотека GEANT4 написана с использованием объектно-ориентированной программирования. Таким образом, она представляет собой набор классов. Изначально в предоставляемые классы заложена некоторая базовая функциональность. И для того чтобы реализовать с помощью классов GEANT4 собственную систему необходимо унаследовать от необходимых базовых классов свои собственные – пользовательские, и наполнить их необходимой функциональностью.

Общее количество классов в библиотеке порядка 700, но это вовсе не значит, что каждый раз нужно наследовать и переопределять их все.

Например, вовсе не требуется переопределять класс, отвечающий за движение частиц – ведь в любых физических системах движение частиц подчиняется одним и тем же законам (и эти законы изначально заложены в этот класс разработчиками GEANT4). В то же время, нам всегда нужно будет переопределять класс, отвечающий за создание геометрии моделируемой системы.

Таким образом, из всего многообразия классов, обычно необходимо переопределить лишь их небольшое количество – обычно не более 7-8. Поэтому такая организация пакета GEANT4 весьма облегчает жизнь программисту, его применяющего.

Обязательными для наследования являются3 класса:

•G4VUserDetectorConstruction: в этом классе задается геометрия системы и используемые материалы;

•G4VUserPhysicsList: в этом – используемые частицы, и взаимодействия в которых они участвуют;

•G4VUserPrimaryGeneratorAction: в этом классе создаются первичные частицы – задается их тип, направление движения, энергия и т.д.

Также, обычно переопределяют так называемые UserAction-классы – это позволяет выполнять необходимые действия на некоторых этапах моделирования:

•G4UserRunAction: позволяет задать действия в начале/конце run-a.

Обычно используют для того, чтобы открыть/закрыть файлы в которые будут сохраняться результаты моделирования;

•G4UserEventAction: позволяет задать действия в начале/конце event-а. Обычно используется для инициализации/сохранения гистограмм и первичного анализа;

•G4UserStackingAction: позволяет задать действия в момент появления вторичных частиц;

•G4UserTrackingAction: позволяет задать действия при начале/завершении движения частицы. Используют, например, для получения такой информации, как длинна трека частицы;

•G4UserSteppingAction: позволяет задать действия выполняемые на каждом шаге движения частиц.

Пару слов о терминологии. Весь процесс моделирования делится на events (события). Каждое событие заключается в испускании первичных частиц и их дальнейшего движения через геометрию системы вплоть до полной остановки этих частиц (и всех образовавшихся вторичных тоже). Процесс движения каждой конкретной частицы от ее появления до остановки называется track.

Совокупность событий при неизменной геометрии установки называют run (запуск). Например, если в моделируемой системе есть радиоактивный источник, то каждое испускание проникающей частицы будет событием, а их совокупность (т.е. испускание, скажем, 1 000 000 частиц) – запуском.

Посмотрите на приведенный ниже листинг программы моделирования.

#include "G4RunManager.hh"

#include "DetectorConstruction.hh"

#include "PhysicsList.hh"

#include "PrimaryGeneratorAction.hh"

#include "EventAction.hh"

#include "RunAction.hh"

#include "SteppingAction.hh"

int main()

{

// (1)

G4RunManager* runManager = new G4RunManager;

// (2)

runManager->SetUserInitialization(new DetectorConstruction);

runManager->SetUserInitialization(new PhysicsList);

runManager->SetUserAction(new PrimaryGeneratorAction);

// (3)

runManager->SetUserAction(new RunAction);

runManager->SetUserAction(new EventAction);

runManager->SetUserAction(new SteppingAction);

// (4)

runManager->Initialize();

// (5)

runManager->BeamOn(10);

// (6)

delete runManager;

return 0;

}

Приведенный листинг является главной частью программы, но не единственной. Вообще говоря, он составляет весьма малую долю от всего программного кода. Что же в нем выполняется?

(1) Создается экземпляр (new G4RunManager) класса, выполняющего функции общего контроля и управления процессом моделирования. Методы этого класса позволяют, например, подключать класс ответственный за геометрию системы, производить непосредственный запуск моделирования.

(2) Создаются экземпляры обязательных для наследования (переопределения) классов: new DetectorConstruction(геометрия), new PhysicsList(физические процессы и частицы), new PrimaryGeneratorAction (первичные частицы).

(3) Создаются экземпляры некоторых UserAction классов – необходимы для сбора и сохранения данных о ходе процесса моделирования.

Как видно, все экземпляры классов, созданных в пунктах 2-3, подключаются к главному (управляющему) классу. Таким образом он “знает” о всех аспектах моделируемой системы.

(4) Начальная инициализация процесса моделирования. При этом выполняется, например, построение таблиц сечений.

(5) Все предварительные действия выполнены– можно начинать моделирование. Метод BeamOn() вызывает генерацию 10 событий.

(6) Освобождается занимаемая память и происходит выход из программы.

 

1.5. С++ и работа с компилятором g++ (GNU c++ компилятором)

1.5.1. Кратко о С++

Комментарии

// Однострочный комментарий

/*

Многострочный комментарий

*/

 

Идентификаторы

Идентификаторы используются как имена переменных, функций и типов данных.

Допустимые символы: цифры 0-9, латинские прописные и строчные буквы а — z, А- 2, символ подчеркивания (_). Первый символ не может быть цифрой.

 

Основные типы данных

К основным типам данных относятся целые числа (int, short, long, unsigned), символы (char) и числа с плавающей точкой (float, double).

int a = 10; // целое число

double e = 2.71; // число с плавающей точкой

double c = 2.99e8; // экспоненциальная форма

char label[] = “GEANT4”; // строка символов

 

Выражения

Выражение состоит из одного или большего числа операндов и символов операций.

 

Арифметические операции

+, -, *, /, %, ++, --

int b = a + 6; // сложение

double q = e – 1; // вычитание

double g = c*b; // умножение

int k = b/3; // целочисленное деление (результат– целая часть)

q = e/2.0; // вещественное деление

int m = b%3; // остаток от деления

b++; // увеличение на 1

k--; // уменьшение на 1

Операция присваивания

=, +=, -=, *=, /=

k = b; // присваивание значения b переменной k

k += b; // увеличениеk на b

g -= e; // уменьшениеg на e

g *= 3.5; // умножениеg на 3.5

q /= 2;

 

Операции над массивами

[]

double data[10]; // объявления массива из 10-ти элементов типа double

data[3] = 6.3; // присвоить 4-му элементу (счет индексов идет от 0) массива

// значение 6.3

 

Условный оператор if-else

if (выражение) оператор

Если выражение истинно, то выполняется оператор. Если выражение ложно,

то ничего не выполняется.

if (выражение) оператор1

else оператор2

Если выражение истинно, то выполняется оператор и управление передается на оператор, следующий за оператором (т. е. оператор2 не выполняется).

Если выражение ложно, то выполняется оператор2.

if (а == 1) b = 3; // если a равно 1, то присвоить b значение 3

if (g > 4) b *= 2;

else b /= 3;

 

Оператор возврата return

return

Прекращает выполнение текущей функции и возвращает управление вызвавшей программе.

return выражение;

Прекращает выполнение текущей функции и возвращает управление вызвавшей программе с передачей значения выражения.

return 10;

 

Оператор цикла while

while (выражение) оператор

Если выражение истинно, то оператор выполняется до тех пор, пока выражение не станет ложным. Если выражение ложно, то управление передается следующему оператору. Значение выражения определяется до выполнения оператора. Следовательно, если выражение ложно с самого начала, то оператор вообще не выполняется.

// сумма ряда1/1 + 1/4 + 1/9 + 1/16 +...

double s = 0.0;

int k = 1;

while (1.0/(k*k) > 0.0001) {

s += 1.0/(k*k);

k++;

}

cout << “Sum = ” << s << endl;

 

Оператор цикла for

for (выражение 1; выражение 2; выражение 3) оператор выражение 1 описывает инициализацию цикла выражение 2 - проверка условия завершения цикла. Если оно истинно, то выполняется оператор тела цикла for и выполняется выражение 3. Все повторяется, пока выражение 2 не станет ложным. Если оно ложно, цикл заканчивается и управление передается следующему оператору. Выражение 3 вычисляется после каждой итерации. Любое из трех или все три выражения в операторе for могут отсутствовать, однако разделяющие их точки с запятыми (;) опускать нельзя. Если опущено выражение 2, то считается, что оно постоянно истинно. Оператор for (;;) представляет собой бесконечный цикл, эквивалентный оператору while(l). Каждое из выражений 1-3 может состоять из нескольких выражений, объединенных оператором запятая(,).

for (int i = 1, i <= 10; i++)

cout << i*i << endl;

Определение функции

тип_результата имя_функции(список_параметров)

{

оператор1;

оператор2;

return возвращаемое_значение;

}

Функция определяется описанием типа результата, формальных параметров и составного оператора (блока), описывающего выполняемые функцией действия.

Оператор return может не возвращать никакого значения или возвращает значение выражения, стоящего в этом операторе. Значение выражения при необходимости преобразуется к типу результата функции. Функция, которая не возвращает значения, должна быть описана как имеющая тип void.

double cube(double x)

{

return x*x*x;

}

 

Вызов функции

имя_функции (параметр 1, параметр 2,...)

Аргументы (фактические параметры) передаются по значению, т. е. каждое выражение параметр 1,... вычисляется и значение передается функции.

Вызов функции - это выражение, значением которого является значение, возвращаемое функцией. Функция должна быть описана до первого вызова.

double pi3 = cube(3.1415);

Функция main

Каждая программа начинает работу с функции main(). Во время выполнения программы можно передавать аргументы через формальные параметры argc

И argv функции main.

// вывод значений параметров командной строки

void main (int argc, char** argv)

{

for (int i = 0, i < argc, i++)

cout << “argument ” << i << “: ” << argv[i] << endl;

}

Некоторые функции







Дата добавления: 2015-08-11; просмотров: 790. Нарушение авторских прав; Мы поможем в написании вашей работы!



Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Условия приобретения статуса индивидуального предпринимателя. В соответствии с п. 1 ст. 23 ГК РФ гражданин вправе заниматься предпринимательской деятельностью без образования юридического лица с момента государственной регистрации в качестве индивидуального предпринимателя. Каковы же условия такой регистрации и...

Седалищно-прямокишечная ямка Седалищно-прямокишечная (анальная) ямка, fossa ischiorectalis (ischioanalis) – это парное углубление в области промежности, находящееся по бокам от конечного отдела прямой кишки и седалищных бугров, заполненное жировой клетчаткой, сосудами, нервами и...

Основные структурные физиотерапевтические подразделения Физиотерапевтическое подразделение является одним из структурных подразделений лечебно-профилактического учреждения, которое предназначено для оказания физиотерапевтической помощи...

Оценка качества Анализ документации. Имеющийся рецепт, паспорт письменного контроля и номер лекарственной формы соответствуют друг другу. Ингредиенты совместимы, расчеты сделаны верно, паспорт письменного контроля выписан верно. Правильность упаковки и оформления....

БИОХИМИЯ ТКАНЕЙ ЗУБА В составе зуба выделяют минерализованные и неминерализованные ткани...

Типология суицида. Феномен суицида (самоубийство или попытка самоубийства) чаще всего связывается с представлением о психологическом кризисе личности...

Studopedia.info - Студопедия - 2014-2024 год . (0.008 сек.) русская версия | украинская версия