Разработка компьютерной программы для моделирования спектров излучения и расчета экспозиционной дозы

Физические основы рентгеновского излучения. Конструкция современных рентгеновских трубок. Расчет дозы и спектра рентгеновского излучения. Моделирование спектров излучения на языке C# в среде Microsoft Visual Studio Express, описание и алгоритм программы.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 26.02.2012
Размер файла 2,9 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Если пользователь выбрал расчет эквивалентной дозы, то также необходимо задать следующую группу параметров. Туда входят толщина мышечной ткани, кости и кожи, а также площадь исследуемого объекта и расстояние от анода рентгеновской трубки до него.

Ниже приведем пример кода программы для расчета функции ослаблении на примере алюминия:

private double ExpFosl(double E, string Elm, double D, double TorF, double MorP)

{

//Перебор элементов

switch (Elm)

case "Al":

Z = 13;

A = 26.9815;

plotn = 2.7;

tay_bk = -0.003471 * System.Math.Pow(E, -0) + 1.384 * System.Math.Pow(E, -1) - 213.7 * System.Math.Pow(E, -2) + 29500 * System.Math.Pow(E, -3) - 22170 * System.Math.Pow(E, -4);

tay_1k = 1688 * System.Math.Pow(E, -3) - 504.6 * System.Math.Pow(E, -4);

sigm_k = (1 + 0.0858 * E) / (0.3905 + 0.08506 * E + 0.01611 * System.Math.Pow(E, 2) + 0.0005524 * System.Math.Pow(E, 3));

sigm_nk = 1 / (42.58 * System.Math.Pow(E, -1) + 4.873 + 0.01871 * E);

if (E > 1.559)

{

mu = tay_bk + sigm_k + sigm_nk;

}

else

{

mu = tay_1k + sigm_k + sigm_nk;

}

break;

R = 0.0276 * A * System.Math.Pow(E, 1.67) / (plotn * System.Math.Pow(Z, 0.889));

double angle = Math.PI * degrees / 180.0;

MassA = R / 2 - D + (R / 2) * System.Math.Sin(Math.PI / 2 - angle) / Math.Sin(angle);

Rpron = 0.0276 * A * System.Math.Pow(frm2E, 1.67) / (plotn * System.Math.Pow(Z, 0.889));

return System.Math.Exp(-mu * plotn * (D - TorF * R / 2 + MorP * MassA) * System.Math.Pow(10, -4));

}

Полная функция является составной из экспоненциальных зависимостей. Так как в функции ослабления присутствует ослабление так же и материалом мишени, то программа производит проверку, является ли данный ослабляющий слой мишенью, и если да, то толщина ослабляющего слоя рассчитывается с учетом вычета глубины проникновения в материал мишени. Более подробный код программы приведен в Приложении 1.

После ввода необходимых параметров программа рассчитывает спектр рентгеновской трубки и выводи на экран два спектра, до фильтрации и после. А в случае если выбран режим расчета дозы то также рассчитывает эквивалентная доза, а на экран в свою очередь выводятся отфильтрованный спектр и спектр ослабленный исследуемым объектом с ранее заданными параметрами. Рассчитанный спектр представлен на рисунке 5.3.

Рис 5.3. Рассчитанный спектр

6. Результаты расчета

Для проверки правильности построения математической модели использовалось сравнение расчетных спектров с реальными. При сравнении реального и расчетного спектров возникают сложности, связанные с особенностями регистрации рентгеновского излучения. В результате того, что разрешение детекторов рентгеновского излучения ограничено, резкие скачки на спектре тормозного излучения при регистрации получаются сглаженными, а острые пики характеристического излучения - размытыми. Поэтому для сравнения реальных и расчетных спектров использовался тот же прием, что и в работах [12,16] - свертка истинного спектра (в нашем случае расчетного) с аппаратурной функцией детектора (разрешением), причем учитывалось, что разрешение детектора представляет собой функцию, значение которой зависит от энергии регистрируемых квантов.

На рисунках 6.1 и 6.2 приведены расчетные и реальные спектры излучения трубки 0,01БХ7-Мо с прострельным анодом. Реальные спектры измерялись в на бескристальном энергодисперсионном анализаторе БРА-17-02.

Для получения реального спектра первичного излучения трубки вместо исследуемого образца устанавливался детектор рентгеновского излучения с сильным диафрагмированием излучения. Разрешающая способность газового электролюминесцентного детектора, используемого в БРА 17-02, составляет 590 эВ на спектральной линии MnKб.

На рисунке 6.1 показаны: а - реальный и б - расчетный спектры трубки 0,01БХ7-Мо, работающей в следующем режиме: 18 кВ, 300 мкА, фильтры отсутствуют. Реальный и расчетный спектры трубки 0,01БХ7-Мо в режиме работы 45 кВ, 200 мкА, титановый фильтр толщиной 100 мкм показаны на рисунке 6.2., а и б соответственно.

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

Отличие реального спектра от расчетного на рисунке 6.2 заключается в наличии фоновой составляющей левее спектральной линии молибдена МоКб. Присутствие фоновой составляющей на реальном спектре обусловлено особенностями конструкции газового электролюминесцентного детектора.

Рис. 6.1. Спектры трубки (а - реальный и б - расчетный) 0,01БХ7-Мо работающей в следующем режиме: 18 кВ, 300 мкА, фильтры отсутствуют

Рис. 6.2. Спектры трубки (а - реальный и б - расчетный) 0,01БХ7-Мо работающей в следующем режиме: 45 кВ, 200 мкА, Ti фильтр 100 мкм

На рисунке 6.3 представлен реальный спектр излучения трубки с родиевым анодом при напряжении 45 кВ. Отчетливо видна как тормозная составляющая спектра, так и характеристические линии Ка и Кв родия. Некоторое “уширение” характеристических линий на реальном спектре обусловлено тем, что полупроводниковый детектор, который его зарегистрировал, обладает своим энергетическим разрешением - порядка 200 - 250 эВ.

Рис. 6.3. Спектры трубки (а - реальный и б - расчетный)

На рисунке 6.4 представлен спектр излучения трубки в вольфрамовым анодом, напряжение, подаваемое на трубку - 40кВ - недостаточно для возбуждения К серии характеристического излучения вольфрама, однако на спектре отчетливо видны все три линии L серии.

Моделированный спектр достаточно точно описывает как интенсивность характеристического и тормозного излучения, так и соотношение между ними.

Рис. 6.4. Спектры трубки (а - реальный и б - расчетный).

Заключение

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

Использование данной программы в исследованиях, проводимых в СПбГЭТУ, ЗАО “ЭЛТЕХ-Мед” и НПО “Светлана-Рентген” позволят значительно сократить расходы на этапе предэскизного проектирования, что существенно скажется на стоимости рентгеновских трубок и аппаратуры, в состав которой они входят.

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

Список литературы

1. Основы рентгенодиагностической техники / Под ред. Н.Н. Блинова. Учебное пособие. - М.: Медицина, 2002.

2. Уманский Я.С. Рентгенография металлов и полупроводников. - М.: Металлургия, 1969.(32)

3. Кишковский А.Н., Тютин Л.А. Медицинская рентгенотехника: руководство. - Л.: Медицина, 1983.

4. Рентгенодиагностические аппараты / Под ред. Н.Н. Блинова. - М.: Медицина, 1976. (34)

5. Рентгенотехника: Справочник. В. 2-х кн. / Под ред. В.В. Клюева. - М.: Машиностроение, 1992. - Кн. 1.

6. Рентгенотехника: Справочник. В. 2-х кн. / Под ред. В.В. Клюева. - М.: Машиностроение, 1992. - Кн. 2.

7. Пицутиелло Р., Куллинан Дж. Введение в медицинскую рентгенографию. - Нью-Йорк.: Кодак, 1994.

8. Мишкинис Б.Я., Чикирдин Э.Г., Мишкинис А.Я. Контроль качества в рентгенодиагностическом процессе. - М.: Медицина, 1991.

9. Васильев А.Ю. Рентгенография с прямым многократным увеличением 5в клинической практике. - М.: ИПТК ЛОГОС, 1998.

10. Иванов С.А., Потрахов Н.Н. Портативные микрофокусные рентгеновские аппараты для медицинской диагностики // Медицинская техника, 1998. №6.

11. Иванов С.А., Потрахов Н.Н., Мазуров А.И. Новые диагностические возможности микрофокусной рентгенографии. // Петербургский журнал электроники, 1998. №2.

12. Васильев А.Ю. Высокодетальная микрофокусная рентгенография с многократным увеличением изображения : прошлое, настоящее и будущее // Мат. II междун. конгр. «Невский радиологический форум - 2005». - СПб.: МАПО, 2005.

13. Блинов Н.Н. (мл), Потрахов Н.Н. Прицельно-панорамный рентгенодиагностический комплекс «ПАРДУС» // Мат. II междун. конгр. «Невский радиологический форум - 2005». - СПб.: МАПО, 2005.

14. Потрахов Н.Н. Микрофокусная дентальная рентгенография // Мат. II междун. конгр. «Невский радиологический форум - 2005». - СПб.: МАПО, 2005.

15. Потрахов Н.Н., Мазуров А.И. Особенности микрофокусной рентгенографии в медицинской диагностике // Медицинская техника, 2005. №6.

16. Приставко В.В. Оценка качества изображения методом сопоставления объективных и субъективных характеристик // Ж. научн. и прикл. фотогр. и кинематогр., 1975. Т. 20. Вып. 2.

17. Зайдель И.Н., Куренков Г.И. Электронно-оптические преобразователи. - М.: Советское радио, 1970.

18. Чикирдин Э.Г. Университет рентгенолаборантов // Вестник рентгенологии и радиологии, 1998. №2.

19. Науменко А.Ю., Грязнов А.Ю. Оценка информативности теневого рентгенвоского изображения // Тез. докл. НТК ППС СПбГЭТУ, 24-27.04.2006. - СПб.: ИЦ СПбГЭТУ, 2006.

20. Ставицкий Р.В. Блинов Н.Н. и др. Радиационная защита в медицинской радиологии. М.: Кабур, 1994. 325 с.

21. Жутяев С.Г., Смелик Г.И., Мишкинис А.Б. и др. Исследование характеристик рентгенодиагностических излучателей. 2. Взаимосвязь спектрального распределения тормозного излучения с его дозиметрическими характеристиками. // Медицинская техника, №1, 2001. С. 3-5.

22. Лукьянченко Е.М., Грязнов А.Ю. Моделирование спектра первичного рентгеновского излучения в энергодисперсионном рентгеноспектральном анализе. // Известия СПбГЭТУ «ЛЭТИ», 1/2003. С. 10-14.

23. Рентгенотехника: Справочник. В 2-х кн. Под общей ред. Клюева В.В. Кн. 1. М.: Машиностроение, 1992, 480 с.

24. Рид С., Электронно-зондовый микроанализ. М.: Мир, 1979. 424 с.

25. Таблицы и формулы рентгеноспектрального анализа: методические рекомендации. Вып 1, 2, 3. Под ред. Комяка Н.И. Л.: ЛНПО «Буревестник», 1981 - 1982 гг.

26. Варченя В.Ж. и др. Тканеэквивалентные дозиметрические фантомы и измерение поглощенных органами доз при рентгенологических исследованиях детей. Рига: МЗ ЛатвССР, 1989. 96 с.

27. Человек. Медико-биологические данные. Публикация №23 М.: МКРЗ, 1977. 67 с.

28. ГОСТ 18622-79. Взаимодействие ионизирующего излучения с веществом. Химический состав тканеэквивалентного вещества. М., 1980.

29. Контроль эффективных доз облучения пациентов при медицинских рентгенологических исследованиях. МУК 2.6.1.962-00, Москва, 2000.

30. Потрахов Н.Н., Мухин В.М. Моноблок источника рентгеновского излучения, Патент РФ на полезную модель № 51854. Бюлл. №7 от 10.03.2006

31. Методические указания по методам контроля эффективных доз при облучении пациентов при медицинских рентгенологических исследованиях. МУК 2.6.1.1797-03. Москва, 2004.

ПРИЛОЖЕНИЕ 1

ТЕКСТ РАСЧЕТНОГО МОДУЛЯ ПРОГРАММЫ

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using ZedGraph;

namespace WindowsFormsApplication1

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

GraphControl.IsShowPointValues = true;

GraphControl.PointValueEvent += new ZedGraphControl.PointValueHandler(GraphControl_PointValueEvent);

ClearGraph();

GraphControl.Visible = false;

}

string GraphControl_PointValueEvent(ZedGraphControl sender,

GraphPane pane,

CurveItem curve,

int iPt)

{

PointPair point = curve[iPt];

string result = string.Format ("E: {0:F3}\nN(E): {1:F3}", point.X, point.Y);

return result;

}

public double frm2E, frm2I, frm2dM, frm2dBe, frm2dF1, frm2dF2, frm2dF3, frm2dGlass, frm2dSkin, frm2dBone, frm2dMeat, degrees, Anod, Rpron, dummy, frm2dose, frm2SR2;

public string frm2M, frm2ElmF1, frm2ElmF2, frm2ElmF3;

public bool filtr,dose = false;

public bool dF1,dF2,dF3,dBone,dSkin,dMeat,elmF1,elmF2,elmF3;

private double ExpFosl(double E, string Elm, double D, double TorF, double MorP)

{

double Z, A, R, plotn, MassA, tay, tay_bk, tay_1k, tay_l1k, tay_1l1, tay_l2l1, tay_l3l2, tay_1l3, tay_m1l3, tay_1m1, tay_m2m1, tay_1m2, tay_m3m2, tay_1m3, tay_m4m3, tay_m5m4, tay_1m5, tay_n1m5, tay_1n1, tay_n2n1, tay_1n2, tay_n3n2, tay_1n3, sigm, sigm_k, sigm_nk, mu;

//Перебор элементов

switch (Elm)

{

case "Air":

Z = 1;

A = 1;

plotn = 0.00129;

tay_bk = -0.001991 * System.Math.Pow(E, -0) + 0.1169 * System.Math.Pow(E, -1) - 15.4 * System.Math.Pow(E, -2) + 4759 * System.Math.Pow(E, -3) - 906 * System.Math.Pow(E, -4);

tay_1k = 35.14 * System.Math.Pow(E, -2) + 5059 * System.Math.Pow(E, -3) - 106 * System.Math.Pow(E, -4);

sigm_nk = 1 / (26.44 * System.Math.Pow(E, -1) + 4.724 + 0.01809 * E);

if (E < 3.203)

{

mu = tay_bk;

}

else

{

mu = tay_1k + sigm_nk;

}

break;

case "Vacuum":

Z = 1;

A = 1;

plotn = 0;

mu = 0.00001 * E;

break;

case "H":

Z = 1;

A = 1.00797;

plotn = 0.000089;

tay = -0.002645 * System.Math.Pow(E, -0) + 0.07086 * System.Math.Pow(E, -1) - 0.7487 * System.Math.Pow(E, -2) + 5.575 * System.Math.Pow(E, -3) + 1.936 * System.Math.Pow(E, -4);

sigm = 0.4005 / 1.008 * System.Math.Pow(1 + 2 * E / 511, -2) * (1 + 2 * E / 511 + 0.3 * System.Math.Pow(2 * E / 511, 2) - 0.0625 * System.Math.Pow(2 * E / 511, 3));

mu = tay + sigm;

break;

case "He":

Z = 2;

A = 4.0026;

plotn = 0.000216;

tay = -0.002154 * System.Math.Pow(E, 0) + 0.1473 * System.Math.Pow(E, 1) - 3.322 * System.Math.Pow(E, -2) + 48.93 * System.Math.Pow(E, -3) + 15.76 * System.Math.Pow(E, -4);

sigm = 0.4005 * 2 / 4.003 * System.Math.Pow(1 + 2 * E / 511, -2) * (1 + 2 * E / 511 + 0.3 * System.Math.Pow(2 * E / 511, 2) - 0.0625 * System.Math.Pow(2 * E / 511, 3));

mu = tay + sigm;

break;

case "Li":

Z = 3;

A = 6.939;

plotn = 0.533;

tay = -0.003411 * System.Math.Pow(E, 0) + 0.3088 * System.Math.Pow(E, 1) - 10.09 * System.Math.Pow(E, -2) + 40.91 * System.Math.Pow(E, -3) + 15.76 * System.Math.Pow(E, -4);

sigm_k = (1 + 0.9326 * E) / (1.781 + 0.8725 * E + 0.7963 * System.Math.Pow(E, 2) + 0.008225 * System.Math.Pow(E, 3));

sigm_nk = 1 / (29.94 * System.Math.Pow(E, -1) + 4.533 + 0.03637 * E);

mu = tay + sigm_k + sigm_nk;

break;

case "Be":

Z = 4;

A = 9.0112;

plotn = 1.85;

tay = -0.003142 * System.Math.Pow(E, -0) + 0.4216 * System.Math.Pow(E, -1) - 20.14 * System.Math.Pow(E, -2) + 591.8 * System.Math.Pow(E, -3) + 48.57 * System.Math.Pow(E, -4);

sigm_k = (1 - 0.3178 * E) / (1.267 + 0.4619 * E + 0.3102 * System.Math.Pow(E, 2) - 0.001493 * System.Math.Pow(E, 3));

sigm_nk = 1 / (25.93 * System.Math.Pow(E, -1) + 5.067 + 0.0242 * E);

mu = tay + sigm_k + sigm_nk;

break;

case "B":

Z = 5;

A = 10.811;

plotn = 2.47;

tay = -0.003267 * System.Math.Pow(E, -0) + 0.5682 * System.Math.Pow(E, -1) - 34.83 * System.Math.Pow(E, -2) + 1326 * System.Math.Pow(E, -3) - 32.43 * System.Math.Pow(E, -4);

sigm_k = (1 + 1.544 * E) / (1.01 + 1.561 * E + 0.6978 * System.Math.Pow(E, 2) - 0.05025 * System.Math.Pow(E, 3));

sigm_nk = 1 / (25.58 * System.Math.Pow(E, -1) + 4.945 + 0.02191 * E);

mu = tay + sigm_k + sigm_nk;

break;

case "C":

Z = 6;

A = 12.0111;

plotn = 3.52;

tay = -0.003172 * System.Math.Pow(E, -0) + 0.6921 * System.Math.Pow(E, -1) - 53.4 * System.Math.Pow(E, -2) + 2610 * System.Math.Pow(E, -3) - 294.1 * System.Math.Pow(E, -4); sigm_k = (1 - 1.544 * E) / (1.01 + 1.561 * E + 0.6978 * System.Math.Pow(E, 2) - 0.005025 * System.Math.Pow(E, 3));

sigm_k = (1 + 1.108 * E) / (0.8093 + 0.7378 * E + 0.3958 * System.Math.Pow(E, 2) + 0.02532 * System.Math.Pow(E, 3));

sigm_nk = 1 / (25.91 * System.Math.Pow(E, -1) + 4.644 + 0.01878 * E);

mu = tay + sigm_k + sigm_nk;

break;

case "N":

Z = 7;

A = 14.0067;

plotn = 0.00103;

tay = -0.001991 * System.Math.Pow(E, -0) + 0.6169 * System.Math.Pow(E, -1) - 65.14 * System.Math.Pow(E, -2) + 4259 * System.Math.Pow(E, -3) - 806 * System.Math.Pow(E, -4);

sigm_k = (1 + 0.5723 * E) / (0.726 + 0.291 * E + 0.1824 * System.Math.Pow(E, 2) + 0.1018 * System.Math.Pow(E, 3));

sigm_nk = 1 / (26.44 * System.Math.Pow(E, -1) + 4.724 + 0.01809 * E);

mu = tay + sigm_k + sigm_nk;

break;

case "O":

Z = 8;

A = 15.9994;

plotn = 0.00146;

tay = -0.002663 * System.Math.Pow(E, -0) + 0.8397 * System.Math.Pow(E, -1) - 91.79 * System.Math.Pow(E, -2) + 6634 * System.Math.Pow(E, -3) - 1906 * System.Math.Pow(E, -4);

sigm_k = (1 + 0.3537 * E) / (0.6396 + 0.1543 * E + 0.09948 * System.Math.Pow(E, 2) + 0.004981 * System.Math.Pow(E, 3));

sigm_nk = 1 / (29.88 * System.Math.Pow(E, -1) + 4.656 + 0.01857 * E);

mu = tay + sigm_k + sigm_nk;

break;

case "F":

Z = 9;

A = 18.9984;

plotn = 0.00114;

tay = -0.003038 * System.Math.Pow(E, -0) + 0.9836 * System.Math.Pow(E, -1) - 112.8 * System.Math.Pow(E, -2) + 9171 * System.Math.Pow(E, -3) - 3414 * System.Math.Pow(E, -4);

sigm_k = (1 + 0.2437 * E) / (0.597 + 0.09989 * E + 0.06409 * System.Math.Pow(E, 2) + 0.00293 * System.Math.Pow(E, 3));

sigm_nk = 1 / (33.4 * System.Math.Pow(E, -1) + 4.961 + 0.01913 * E);

mu = tay + sigm_k + sigm_nk;

break;

case "Ne":

Z = 10;

A = 20.183;

plotn = 0.00144;

tay = -0.001806 * System.Math.Pow(E, -0) + 0.7942 * System.Math.Pow(E, -1) - 121.8 * System.Math.Pow(E, -2) + 13070 * System.Math.Pow(E, -3) - 5600 * System.Math.Pow(E, -4);

sigm_k = (1 + 0.182 * E) / (0.5118 + 0.06431 * E + 0.04065 * System.Math.Pow(E, 2) + 0.001715 * System.Math.Pow(E, 3));

sigm_nk = 1 / (37.3 * System.Math.Pow(E, -1) + 4.629 + 0.01905 * E);

mu = tay + sigm_k + sigm_nk;

break;

case "Na":

Z = 11;

A = 22.9898;

plotn = 0.966;

tay_bk = -0.003963 * System.Math.Pow(E, -0) + 1.359 * System.Math.Pow(E, -1) - 172 * System.Math.Pow(E, -2) + 17660 * System.Math.Pow(E, -3) - 10190 * System.Math.Pow(E, -4);

tay_1k = 869.4 * System.Math.Pow(E, -3) - 217 * System.Math.Pow(E, -4);

sigm_k = (1 + 0.1029 * E) / (0.4721 + 0.06884 * E + 0.02528 * System.Math.Pow(E, 2) + 0.0008557 * System.Math.Pow(E, 3));

sigm_nk = 1 / (38.8 * System.Math.Pow(E, -1) + 4.901 + 0.01889 * E);

if (E > 1.072)

{

tay = tay_bk;

mu = tay_bk + sigm_k + sigm_nk;

}

else

{

tay = tay_1k;

mu = tay_1k + sigm_k + sigm_nk;

}

break;

case "Mg":

Z = 12;

A = 24.312;

plotn = 1.738;

tay_bk = -0.003447 * System.Math.Pow(E, -0) + 1.309 * System.Math.Pow(E, -1) - 189.5 * System.Math.Pow(E, -2) + 23270 * System.Math.Pow(E, -3) - 14390 * System.Math.Pow(E, -4);

tay_1k = 1268 * System.Math.Pow(E, -3) - 347.4 * System.Math.Pow(E, -4);

sigm_k = (1 + 0.08484 * E) / (0.4132 + 0.07566 * E + 0.01836 * System.Math.Pow(E, 2) + 0.0006034 * System.Math.Pow(E, 3));

sigm_nk = 1 / (39.81 * System.Math.Pow(E, -1) + 4.746 + 0.01832 * E);

if (E > 1.305)

{

tay = tay_bk;

mu = tay_bk + sigm_k + sigm_nk;

}

else

{

tay = tay_1k;

mu = tay_1k + sigm_k + sigm_nk;

}

break;

case "Al":

Z = 13;

A = 26.9815;

plotn = 2.7;

tay_bk = -0.003471 * System.Math.Pow(E, -0) + 1.384 * System.Math.Pow(E, -1) - 213.7 * System.Math.Pow(E, -2) + 29500 * System.Math.Pow(E, -3) - 22170 * System.Math.Pow(E, -4);

tay_1k = 1688 * System.Math.Pow(E, -3) - 504.6 * System.Math.Pow(E, -4);

sigm_k = (1 + 0.0858 * E) / (0.3905 + 0.08506 * E + 0.01611 * System.Math.Pow(E, 2) + 0.0005524 * System.Math.Pow(E, 3));

sigm_nk = 1 / (42.58 * System.Math.Pow(E, -1) + 4.873 + 0.01871 * E);

if (E > 1.559)

{

tay = tay_bk;

mu = tay_bk + sigm_k + sigm_nk;

}

else

{

tay = tay_1k;

mu = tay_1k + sigm_k + sigm_nk;

}

break;

case "Bone":

plotn = 1.4;

mu = 0.07 * muH + 0.23 * muC + 0.04 * muN + 0.49 * muO + 0.07 * muP + 0.1 * muCa;

break;

case "Meat":

plotn = 1.02;

mu = 0.1 * muH + 0.13 * muC + 0.04 * muN + 0.73 * muO;

break;

case "Marrow":

plotn = 1.03;

mu = 0.11 * muH + 0.47 * muC + 0.02 * muN + 0.4 * muO;

break;

case "Fat":

plotn = 0.95;

mu = 0.12 * muH + 0.64 * muC + 0.01 * muN + 0.23 * muO;

break;

case "Skin":

plotn = 1.1;

mu = 0.1 * muH + 0.21 * muC + 0.04 * muN + 0.63 * muO;

break;

}

R = 0.0276 * A * System.Math.Pow(E, 1.67) / (plotn * System.Math.Pow(Z, 0.889));

double angle = Math.PI * degrees / 180.0;

MassA = R / 2 - D + (R / 2) * System.Math.Sin(Math.PI / 2 - angle) / Math.Sin(angle);

Rpron = 0.0276 * A * System.Math.Pow(frm2E, 1.67) / (plotn * System.Math.Pow(Z, 0.889));

return System.Math.Exp(-mu * plotn * (D - TorF * R / 2 + MorP * MassA) * System.Math.Pow(10, -4));

}

private double Fosl(double E)

{

return ExpFosl(E, frm2M, frm2dM, 1, Anod) * ExpFosl(E, "Be", frm2dBe, 0, 0) * ExpFosl(E, "Glass", frm2dGlass, 0, 0) * ExpFosl(E, frm2ElmF1, frm2dF1, 0, 0) * ExpFosl(E, frm2ElmF2, frm2dF2, 0, 0) * ExpFosl(E, frm2ElmF3, frm2dF3, 0, 0);

}

private double Nfull(double E)

{

double E0 = frm2E;

//double Z = (double)numericUpDown_Z.Value;

double Z = 1;

double i = frm2I;

double yk = 0.038;

double yl = 0.11;

double wk,wk1,wk2,wl2,wl3,R,Ekalfa,Ekbeta,Ek,Elalfa,Elbeta,Elgamma,El2,El3,pKalfa,pKbeta,pLalfa,pLbeta,pLgamma,Ikalfa,Ikbeta,Ilalfa,Ilbeta,Ilgamma,GnormKalfa,GnormKbeta,GnormLalfa,GnormLbeta,GnormLgamma;

//K линии спекта

wk1 = System.Math.Abs(0.03342 * Z + 0.008 - 0.000001 * Z * Z * Z);

wk2 = wk1 * wk1 * wk1 * wk1;

wk = wk2/(1+wk2);

R = 1 - (7 * Z - 80) / (14 * Z - 80);

Ekalfa = -0.097 + 1.463 * (0.01 * Z) + 106.2 * System.Math.Exp(2.12 * System.Math.Log(0.01 * Z)) + 13.53 * System.Math.Exp(6 * System.Math.Log(0.01 * Z));

Ekbeta = 0.034 - 0.061 * (0.01 * Z) + 123.2 * System.Math.Exp(2.12 * System.Math.Log(0.01 * Z)) + 13.42 * System.Math.Exp(6 * System.Math.Log(0.01 * Z));

Ek = 0.037 - 0.063 * (0.01 * Z) + 125.4 * System.Math.Exp(2.12 * System.Math.Log(0.01 * Z)) + 22.44 * System.Math.Exp(6 * System.Math.Log(0.01 * Z));

pKalfa = 1 - 0.0026 * Z;

pKbeta = 0.0026 * Z;

Ikalfa = (5*100000000000*i*yk*wk*pKalfa*R/Z)*(System.Math.Exp(1.64*System.Math.Log(E0/Ek-1)));

Ikbeta = (5 * 100000000000 * i * yk * wk * pKbeta * R / Z) * (System.Math.Exp(1.64 * System.Math.Log(E0 / Ek - 1)));

GnormKalfa = (1 / (0.05 * System.Math.Exp(0.5 * System.Math.Log(2 * System.Math.PI)))) * (System.Math.Exp(((E - Ekalfa) * (E - Ekalfa)) / (-2 * 0.0025)));

GnormKbeta = (1 / (0.05 * System.Math.Exp(0.5 * System.Math.Log(2 * System.Math.PI)))) * (System.Math.Exp(((E - Ekbeta) * (E - Ekbeta)) / (-2 * 0.0025)));

//L линии спектра

wl2 = System.Math.Pow((Z / 700), 2) + System.Math.Pow((Z / 97), 4) - System.Math.Pow((Z / 109), 6);

wl3 = System.Math.Pow((Z / 700), 2) + System.Math.Pow((Z / 97), 4) - System.Math.Pow((Z / 110), 6);

Elalfa = 0.243 - 3.11 * 0.01 * Z + 19.01 * System.Math.Pow((0.01 * Z), 2) + 0.239 * System.Math.Pow((0.01 * Z), 6);

Elbeta = 0.524 - 4.832 * 0.01 * Z + 21.95 * System.Math.Pow((0.01 * Z), 2) + 4.23 * System.Math.Pow((0.01 * Z), 6);

Elgamma = -0.714 + 2.08 * 0.01 * Z + 21.3 * System.Math.Pow((0.01 * Z), 2.5) + 2.834 * System.Math.Pow((0.01 * Z), 6);

El2 = -0.341 + 22.41 * System.Math.Pow((0.01 * Z), 2.3) + 4.755 * System.Math.Pow((0.01 * Z), 6);

El3 = -0.495 + 20.52 * System.Math.Pow((0.01 * Z), 2.21) + 0.963 * System.Math.Pow((0.01 * Z), 6);

pLalfa = 0.99 - (Z / 350);

pLbeta = 0.99 - (Z / 350);

pLgamma = Z / 550;

Ilalfa = (5 * 100000000000 * i * yl * wl3 * pLalfa * R / Z) * System.Math.Pow((E0 / El3 - 1), 1.67);

Ilbeta = (5 * 100000000000 * i * yl * wl2 * pLbeta * R / Z) * System.Math.Pow((E0 / El2 - 1), 1.67);

Ilgamma = (5 * 100000000000 * i * yl * wl2 * pLgamma * R / Z) * System.Math.Pow((E0 / El2 - 1), 1.67);

GnormLalfa = (1 / (0.05 * System.Math.Exp(0.5 * System.Math.Log(2 * System.Math.PI)))) * (System.Math.Exp(((E - Elalfa) * (E - Elalfa)) / (-2 * 0.0025)));

GnormLbeta = (1 / (0.05 * System.Math.Exp(0.5 * System.Math.Log(2 * System.Math.PI)))) * (System.Math.Exp(((E - Elbeta) * (E - Elbeta)) / (-2 * 0.0025)));

GnormLgamma = (1 / (0.05 * System.Math.Exp(0.5 * System.Math.Log(2 * System.Math.PI)))) * (System.Math.Exp(((E - Elgamma) * (E - Elgamma)) / (-2 * 0.0025)));

if (E0 < Ek)

{

Ikalfa=0;

Ikbeta = 0;

}

if (E0 < El2)

{

Ilbeta = 0;

Ilgamma = 0;

}

if (E0 < El3)

{

Ilalfa = 0;

}

return (8.8 * 100000000 * i *0.001* Z * (E0 / E - 1))*Fosl(E)+(Ikalfa * GnormKalfa*Fosl(Ekalfa))+(Ikbeta*GnormKbeta*Fosl(Ekbeta))+(Ilalfa*GnormLalfa*Fosl(Elalfa))+(Ilbeta*GnormLbeta*Fosl(Elbeta))+(Ilgamma*GnormLgamma*Fosl(Elgamma));

}

private void ClearGraph()

{

// Получим панель для рисования

GraphPane pane = GraphControl.GraphPane;

// Очистим список кривых на тот случай, если до этого сигналы уже были нарисованы

pane.CurveList.Clear();

//GraphControl.AxisChange();

// Обновляем график

GraphControl.Invalidate();

}

public void DrawGraph()

{

// Получим панель для рисования

GraphPane pane = GraphControl.GraphPane;

// Очистим список кривых на тот случай, если до этого сигналы уже были нарисованы

pane.CurveList.Clear();

// Создадим список точек

PointPairList f1_list = new PointPairList();

PointPairList f2_list = new PointPairList();

//PointPairList f3_list = new PointPairList();

double E0 = frm2E;

double Emin = 1;

double Emax = E0;

double Emin_limit = 0;

double Emax_limit = E0;

double Nmin_limit = 0;

double Nmax_limit =NfullwoFosl(Emax/2)*2;

double A = 0, B = 0, C = 0, D = 0;

// Заполняем список точек

for (double E = Emin; E <= Emax; E += 0.001)

{

A = Nfull(E);

f1_list.Add(E, Nfull(E));

if (dose == true)

{

B = frm2SR2*NfullwDose(E);

f2_list.Add(E, B);

C = A - B;

D = D + C;

}

else

{

if (filtr == true)

{

f2_list.Add(E, NfullwoFosl(E));

}

}

}

frm2dose = D;

// Обновляем график

GraphControl.Invalidate();

Размещено на Allbest.ru


Подобные документы

  • Общие сведения о работе программы в среде программирования Microsoft Visual Studio 2008, на языке программирования C++. Ее функциональное назначение. Инсталляция и выполнение программы. Разработанные меню и интерфейсы. Алгоритм программного обеспечения.

    курсовая работа [585,5 K], добавлен 24.03.2009

  • Исследование точности оценки координат и параметров движения источника излучения по результатам угломерных измерений в различных режимах и конфигурации измерительной системы. Разработка соответствующей программы, ее листинг, алгоритм и этапы реализации.

    курсовая работа [311,5 K], добавлен 13.05.2014

  • Создание программы, реализующей игру "Линии". Среда разработки программы, описание ее общего вида. Основные алгоритмы программы. Реализация программы в среде разработки Microsoft Visual Studio 2008 на языке объектно-ориентированного программирования С++.

    курсовая работа [639,0 K], добавлен 16.03.2012

  • Изучение принципов построения линейных алгоритмов и простых расчетных программ на языке программирования C. Разработка программы расчета математических выражений на основе вводимых данных. Создание консольных приложений в среде Microsoft Visual Studio.

    лабораторная работа [254,4 K], добавлен 23.11.2014

  • Создание программы с использованием принципов объектно-ориентированного программирования на языке высокого уровня С# средствами Microsoft Visual Studio 2010. Построение алгоритма реализации. Определение математического аппарата, применение его в задаче.

    курсовая работа [500,4 K], добавлен 13.01.2015

  • Microsoft Visual C++ и среда программирования Microsoft Developer Studio 6.0. Решение интеллектуальной задачи на компьютере. Построение алгоритма кодирования на Visual C++. Алгоритм решения задачи. Описание программы "Sort". Инструкции пользователя.

    курсовая работа [46,0 K], добавлен 27.11.2007

  • Технология разработки и тестирования программного обеспечения в среде Visual Studio на примере создания программы моделирования систем массового обслуживания. Аналитические и имитационные методы моделирования с разными дисциплинами обслуживания заявок.

    дипломная работа [1,1 M], добавлен 09.09.2012

  • Изучение особенностей проектирования прикладных программ с помощь средств Visual Studio 2010 на языке C#. Расчет конического соединения, конусного градиента, усилия для разрыва соединения и требуемой силы сжатия. Реализация и тестирование программы.

    курсовая работа [1,7 M], добавлен 19.02.2013

  • Виды и принципы компьютерного моделирования. Среда моделирования Microsoft Robotic Studio. Моделирование пространства и объектов рабочей области с помощью визуальной среды Visual Simulation Environment. Создание программы управления мобильным роботом.

    дипломная работа [5,0 M], добавлен 15.06.2014

  • Объектно-ориентированная технология создания программ. Среда разработки Visual Studio.NET. Особенности среды Microsoft Visual Studio 2010. Приложения C# для расчетов по формулам, консольный ввод-вывод. Форматирование значений данных. Программы с циклами.

    методичка [2,1 M], добавлен 11.09.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.