Главная Случайная страница


Полезное:

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


Категории:

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






Разработка и реализация





4.1 Обзор программного комплекса по расчету средних полей концентрации аэрозоля.

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

Сама программа для расчетов была написана на языке программирования Python 3.4.3 под операционной системой Ubuntu 14.04. Python является простым и, в то же время, мощным интерпретируемым объектно- ориентированным языком программирования. Он предоставляет структуры данных высокого уровня, имеет изящный синтаксис и использует динамический контроль типов, что делает его идеальным языком для быстрого написания различных приложений, работающих на большинстве распространенных платформ.

Python – это высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой объём полезных функций. Этот язык программирования подходит для решения львиной доли повседневных задач, будь то резервное копирование или чтение электронной почты, К примеру, Python интенсивно применяется IT-гигантами, такими как, например, Google и Yandex. К тому же простота и универсальность Python делают его одним из лучших языков программирования.

Программный комплекс состоит из нескольких файлов. Есть “главный” файл, содержащий основной код программы, формулы для расчетов, ссылки на другие файлы и функцию iteration, содержащую в себе все необходимые для вычисления аргументы. Функция iteration на основе принятых от пользователя аргументов и исходных данных из прилагаемых входных файлов производит необходимые расчеты. Функция принимает определенное число аргументов:

1) xrmin. Координата крайней левой границы эйлеровой сетки(областисетки(области расчета);

2) xrmax. Координата крайней правой границы эйлеровой сетки;

3) yrmin. Координата крайней нижней границы эйлеровой сетки;

4) yrmax. Координата крайней верхней границы эйлеровой сетки;

5) dx. Параметр, определяющий размер ячейки в эйлеровой сетке(посетке(по координате х);

6) dy. Параметр, определяющий размер ячейки в эйлеровой сетке(посетке(по координате у;

7) dt. Шаг по времени на траектории;

8) data_dir. Путь к директории с входными файлами, в которых должны содержаться исходные данные о траекториях движения лагранжевой частицы и восстановленные объемные концентрации аэрозоля;

9) years. Указывается год, в котором были зарегистрированы даннные;

10) nit1. С какой итерации получить расчеты;

11) nit2. До какой итерации получить расчеты.

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

Файлы, с которыми работает программа содержат исходные данные, такие как дата и время регистрации события, город регистрации, объемная концентрация тонкодисперсной фракции, объемная концентрация грубодисперсной фракции, суммарная концентрация. На рисунке 4.1 пример входного файла. Данный файл содержит данные с восстановленными концентрациями аэрозоля.

Рисунок 4.1 -. Пример входного файла

4.2. Обзор библиотеки PyQt4

Классы PyQt5 разделены на несколько модулей.

1) Модуль QtCore содержит ядро с неграфической функциональностью. Этот модуль используется для работы с временем, файлами, папками, различными типами файлов, потоками, адресами URL, MIME-типами и процессами;

2) QtGui содержит классы для интеграции систем окон, обработки событий, 2D-графики, базовой обработки изображений, шрифтов и текста;

3) Модуль QtWidgets содержит классы, которые обеспечивают набор UI-элементов для создания классических пользовательских интерфейсов;

4) QtMultimedia содержит классы для управления мультимедиа-содержимым, а также API для доступа к камере или функциональности радио;

5) Модуль QtBluetooth содержит классы для поиска устройств, соединения и взаимодействия с ними;

6) Модуль QtNetwork содержит классы для сетевого программирования. Эти классы облегчают работу с клиентами и серверами TCP/IP и UDP, делая сетевое программирование более легким и адаптивным;

7) QtPositioning содержит классы для определения местоположения с использованием всевозможных источников, таких как спутники, Wi-Fi или текстовые файлы;

8) Модуль Enginio реализует клиентскую библиотеку для организации доступа к облачным сервисам Qt – Manaded Application Runtime;

9) Модуль QtWebSockets содержит классы, которые реализуют протокол WebSocket;

10) QtWebKit содержит классы для реализации веб-браузера, основанного на библиотеке WebKit2;

11) Модуль QtWebKitWidgets содержит классы для WebKit1, основанные на реализации веб-браузера, для использования в приложениях, базирующихся на QtWidgets;

12) QtXml содержит классы для работы с XML файлами. Этот модуль предоставляет реализацию сразу для двух API: SAX и DOM;

13) Модуль QtSvg содержит классы для отображения содержимого SVG-файлов. Scalable Vector Graphics (SVG) – это язык для описания двумерной графики и графических приложений в XML;

14) Модуль QtSql предоставляет классы для работы с базами данных;

15) QtTest содержит функции, которые дают возможность модульного тестирования PyQt-приложений.

При всём разнообразии, громоздкости и кажущейся сложности различных инструментальных средств создания графических приложений, их общая схема такова:

1) создаётся бесконечный цикл опроса (ожидания) событий (главный цикл), порождаемых действиями пользователя (ввод с клавиатуры, перемещение указателя или нажатие кнопки мыши и т.д.);

2) для каждого потенциально возможного (обрабатываемого) события назначается функция обратного вызова (callback функция), которая будет вызываться при наступлении этого события (обработчик события);

3) при возникновении событий, для которых не были назначены обработчики, они будут игнорироваться;

4) на каждом "витке" главного цикла приложения анализируются наступившие (со времени предыдущего "витка") события, и для каждого такого события вызывается его обработчик, если ожидающих событий несколько, то они обрабатываются в порядке очереди;

5) всякий GUI-инструмент имеет некоторый набор графических компонентов (виджетов - widget) и средства для компоновки таких виджетов в окне приложения, а каждый из компонентов имеет свой специфический набор событий, которые он может генерировать.

Такой подход называется событийно управляемым программированием (event driven programming).

4.3 Первоначальный графический интерфейс

Помимо прочего, к программе необходимо было подключить некоторые библиотеки: системную библиотеку sys и библиотеку PyQt4, а точнее QtCore и QtGui из нее. Последние нужны для работы с графическими элементами библиотеки PyQt4, т.е. для создания окон и графических компонент. Был создан класс и конструктор для этого класса. В конструкторе определяются параметры окна. На форму были добавлены две кнопки: для сформирования результата и выхода из программы. Создание кнопки осуществляется точно также, как и любого другого элемента, но при этом мы связываем кнопку сигналом с событием. На рисунке 4.2 представлена первоначальная графическая оболочка разработанной программы.

Рисунок 4.2 -. Первоначальная графическая оболочка

4.4 Требования к графическому интерфейсу

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

Графическая оболочка должна иметь следующие окна:

· окна ввода координат;

· окна ввода шага по координате x и y;

· окно выбора шага по времени;

· окно выбора города, с возможностью выбора нескольких городов;

· окно выбора года, с возможностью выбрать расчет за несколько лет;

· окно выбора значения первой итерации;

· окно выбора значения второй итерации;

· окно выбора директории с исходными данными;

· окно выбора директории для загрузки результатов расчета.

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

4.5 Разработка графического интерфейса

Подключение библиотеки PyQt4:

from PyQt4 import QtGui,QtCore

from PyQt4.QtCore import *

from PyQt4.QtGui import *

Каждое приложение PyQt4 должно создать объект приложения. Параметр sys.argv - это список аргументов из командной строки. Скрипты Python могут быть запущены из программной оболочки. Это один из способов, как мы можем контролировать запуск наших скриптов:

app = QApplication(sys.argv)

Чтобы создать всплывающую подсказку, мы вызываем метод setTooltip().

Метод проверки заполнения полей. Возвращает 1, если нет ошибок в проверке, иначе возвращает 0:

def controlValues(self):

value=1

if self.data_dir.text () == "":

QtGui.QMessageBox.critical(self,u" Ошибка проверки", u" Установите каталог исходных данных")

value=0

if self.data_dir_out.text() == "":

QtGui.QMessageBox.critical(self,u" Ошибка проверки", u" Установите каталог для формирования результата")

value=0

Возвращение результата проверки:

return value

Метод для вычисления выбранных годов и городов:

def iteration_year(self):

for i in[0,1,2]:

if self.years.item(i,0).checkState()== 2:

if self.receptors.item(j,0).checkState() == 2:

self.iteration(self.years.item(i,0).text(),self.receptors.item(j,0).text())

Метод выбора каталога с исходными данными

def selectDirOdt(self):

main_path=os.path.split(os.path.realpath(os.curdir)) self.data_dir.setText(unicode(QtGui.QFileDialog.getExistingDirectory(self,u'Выбор каталога исходных данных',directory=main_path[0])))

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

Запуск графического интерфейса осуществляется также через вызов функции, но уже без ввода аргументов. На рисунке 4.3 представлена процедура запуска.

Рисунок 4.3 -. Запуск графического интерфейса

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

Рисунок. [Сергей8] 4.4 -. Разработанный графический интерфейс

Всплывающая подсказка появляется при наведении курсора мыши на любое окно для ввода значения. Пример работы всплывающей подсказки на рисунке 4.5.На рисунке 4.5 показан графический интерфейс с частично заполненными полями и наведенным на пустое окно (yrmin) курсором мыши, вследствие чего появилась всплывающая подсказка.

Рисунок 4.5 -. Пример работы всплывающей подсказки

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

Рисунок 4.6 -. Пример содержания выходного файла

На рисунке 4.7 приведено среднее поле концентрации тонкодисперсного аэрозоля, рассчитанное на этой программе методом ФЛА на основе фотометрических измерений за 2013–2015 гг. в Уссурийске. Так же на карты нанесены три траектории: синим обозначена траектория, которая пришла в пункт мониторинга 13 октября 2013 в 00:00:00 (UTC), желтым – 11 сентября 2013 г. в 08:00:00 (UTC) и красным – 8 октября 2014 г. в 23:00:00 (UTC). Звездочкой обозначен пункт мониторинга сети AERONET в Уссурийске [15]. Так же обозначены административные границы и береговая линия.

 

Рисунок 4.7 -.3. Рассчитанное на программе с разработанным интерфейсом методом ФЛА среднее поле объемной концентрации тонкодисперсного аэрозоля на основе фотометрических измерений за 2013-2015 гг. в Уссурийске: а) пространственное разрешение ; б) пространственное разрешение

 

 

На рис. 3 приведено среднее поле концентрации тонкодисперсного аэрозоля рассчитанное методом ФЛА на основе фотометрических измерений за 2013–2015 гг. в Уссурийске. Так же на карты нанесены три траектории, которые анализировались выше: синим обозначена траектория, которая пришла в пункт мониторинга 13 октября 2013 в 00:00:00 (UTC), желтым – 11 сентября 2013 г. в 08:00:00 (UTC) и красным – 8 октября 2014 г. в 23:00:00 (UTC). Звездочкой обозначен пункт мониторинга сети AERONET в Уссурийске. Так же обозначены административные границы и береговая линия.

 

ЗАКЛЮЧЕНИЕ

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

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

 

Date: 2016-07-18; view: 292; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию