<<
>>

Класс клетки

Класс клетки - CCell, реализует работу ячейки клеточного автомата. Число экземпляров клеток определяется размером клеточного поля, которое вычисляется в контейнере. Каждая ячейка содержит три структуры:

1 - Ccell::geometry;

2 - Ccell::indexes;

3 - Ccell::physics.

Структура Ccell::geometry содержит координаты положения ячейки в трехмерном пространстве: x, y, z. Для координатной привязки ячейки используется геометрический центр клетки. По умолчанию значения координат инициализируются нулями. Следует уточнить, что клетка не содержит данных о размере и форме ячейки, эти данные размещены в контейнере, который определяет их форму, размеры и количество.

Для индексации и визуализации клеток используются две различные системы координат, которые удобны в использовании на разных этапах работ. Первая система координат с осями x, y, zиспользуется для визуализации объектов, в дальнейшем будет называться пространством визуализации. Вторая система координат служит для индексации ячеек клеточного автомата также содержит три оси: nx, ny, nz, направления которых совпадают с направлениями осей пространственной системой координат, как это показано на рисунке 3.3. Совпадение центров координат не требуется, но и не воспрещено.

Рис. 3.3. Взаиморасположение систем координат

Система координат, которая служит для индексации клеток, имеет дискретные шкалы, которые содержат только целые числа. Расстояния между делениями одинаковы для всех трех осей и соответствуют длине ребра ячейки клеточного автомата.

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

Структура индексов - CCell::indexes содержит порядковые номера клеток, отсчитываемые относительно некоторой ячейки, принятой за центр индексов в направлении координатных осей: CCell::indexes::x, CCell::indexes::y, CCell::indexes::z.

Геометрический центр первой ячейки удобно расположить в точке начала координат. Также в структуре индексов содержится идентификатор клетки n_Id, который вычисляется по формуле:

где x, y, z- количество клеток в каждом из направлений, n_ x, n_ y, n_ z- индексы относительно координатных осей.

Структура Ccell::physics предназначена для хранения электрофизиологических свойств ячейки, а также данных, используемых для

построения карт возбуждения. К числу электрофизиологических свойств относится:

1 - длительность рефрактерного периода - int n_Ref;

2 - время возбуждения, рассчитанное на основе карты возбуждения int n_Act;

3 - вектор, содержащий набор значений времени возбуждения от каждого источника std::vector vec_Act;

4 - результирующее время возбуждения ячейки int n_FinAct;

5 - состояние ячейки int n_Condition;

6 - массив расстояний до ячеек с заданным временем возбуждения, реализованный на основе словаря с дубликатами std: :multimap mmap_ActDist;

7 - массив расстояний до ячеек с заданной длительностью рефрактерного периода, реализованный на основе словарей с дубликатами std::multimap mmap_RefDist;

8 - время, требуемое для перехода клетки в возбужденное состояние int n_Delay.

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

Возможные состояния ячеек (Passive - 0, Active - 1, Refract - 2, Scarring - 3), определены в классе.

Переменные структур CCell:: physics, CCell:: geometry, CCell:: indexes инициализируется нулями, переменной CCell: :physics::n_Condition

присваивается значение Passive. После инициализации массивы: std::multimap mmap_ActDist, std::mmap mmap_RefDist, CCell::physics::vec_Act, пусты.

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

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

В объектно-ориентированном программировании принято

инкапсулировать данные объекта, а для работы с объектом разрабатывается набор функций, реализующих интерфейс доступа к ним. Такой подход обеспечивает надежность и мобильность разрабатываемого программного обеспечения. Надежность повышается за счет того, что разработанные функции - методы обеспечивают однозначное управление объектом. По отношению к объекту клетки такой подход также справедлив, поэтому структуры CCell::physics, CCell::geometry, CCell::indexes объявлены в классе как privet.

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

CCell::SetCoordinate(double, double, double), чтение CCell:: geometry CCell::GetCoordinate(void).

Для установки индексов реализована функция int CCell::SetIndex(int, int, int), в параметрах которой передаются значения индексов по каждой из

координатных осей. Индекс Ccell::indexes::n_Id, вычисляется в функции и присваивается ячейке, также значение возвращается функцей. Чтение индексов реализовано аналогично чтению координат.

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

Длительность рефрактерного периода может быть непосредственно установлена или рассчитана. Установка длительности рефрактерного периода производится через функцию void CCell::SetRefTime(int), которой в качестве параметра передается длительность периода в миллисекундах. Расчет длительности рефрактерного периода производится функцией int CCell::RefTiming(void), которая вычисляет и присваивает результат переменной CCell::physics::n_Ref, а также возвращает его.

Доступ к переменным CCell::physics::n_Act и CCelkphysics^n^ondition реализован аналогично длительности рефрактерного периода функциями int CCell::ActTiming(void), void CCell::SetActTime(int), int

CCell::GetCondition(void), void CCell::SetCondition(int).

Доступ к CCell::physics::n_FinAct осуществлен через функцию int CCell::CreateMap(void), которая рассчитывает итоговое время возбуждения ячейки.

Расстояния между точками, размещенными в контейнерах std::multimap mmap_RefDist и std::multimap mmap_ActDist используются функциями: void CCell::SetActDist(int, int), void CCell::SetRefDist(int, int), которые добавляют значения. Функция void ResetDist(void) очищает массивы расстояний.

Для работы с std::vector vec_Act, используются функции void CCell::AddTime(int), int CCell::GetTime(int), void CCell::Reset(void).

Время перехода в возбужденное состояние вычисляется в функции int CCell::SetDelay(void), устанавливаемое значение возвращается функцией.

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

3.3.

<< | >>
Источник: Андреев Сергей Юрьевич. МОДЕЛИРОВАНИЕ ДИНАМИКИ ВОЗБУЖДЕНИЯ ПРЕДСЕРДИЙ В ЗАДАЧАХ ВОССТАНОВЛЕНИЯ РИТМА СЕРДЦА. Диссертация на соискание ученой степени кандидата технических наук. Томск - 2006. 2006

Еще по теме Класс клетки:

  1. Дендритные клетки и клетки Лангерганса.
  2. Класс контейнер
  3. Класс II - Sporozoa(споровики)
  4. Функциональный класс стенокардии
  5. Класс III - Sarcodina(саркодовые)
  6. Класс I - Flagellata(жгутиковые)
  7. 4.2. Термическое обезвреживание медицинских отходов классов Б и В
  8. ВЫХОД ВИРУСНЫХ ЧАСТИЦ ИЗ КЛЕТКИ
  9. Тучные клетки и базофилы
  10. Взаимодействие вируса с клеткой
  11. ПРОНИКНОВЕНИЕ ВИРУСОВ В КЛЕТКУ
  12. Класс IV - Infusoria(инфузории)