Программный комплекс для вычисления характеристик строя, представляющих локальную структуру
Методы косвенного анализа структуры знаковых последовательностей на основе состава. Анализ строя цепей событий. Выравнивание аминокислотных и нуклеотидных последовательностей. Обоснование выбора средств разработки. Программные средства разработки.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 21.06.2013 |
Размер файла | 3,2 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Рисунок 18 Диаграмма класса MoveSimpleCutRule
Данный класс разбивает знаковую последовательность на блоки c заданным шагом. Класс имеет два метода MoveSimpleCutRule (конструктор) и getIterator. Метод MoveSimpleCutRule принимает два параметра (длину цепочки и шаг разбиения) и выполняет разбиение цепочки. Метод getIterator возвращает значение начала и конца разбиения.
Рисунок 19 Диаграмма класса CutRuleIterator
Данный класс бегает по массиву. Класс имеет 4 метода CutRuleIterator (конструктор), getStartPos, getStopPos, next. Метод CutRuleIterator хранит начальные и конечные значения (starts, stops). Метод getStartPos возвращает начальную позицию блока или L-граммы, а метод getStopPos возвращает конечную позицию блока или L-граммы. Метод next увеличивает на единицу индекс массива.
Рисунок 20 Диаграмма класса DifCutter
Данный класс разбивает знаковую последовательность на блоки в соответсвии с заданным правилом разбиения. Класс имеет метод cut. Метод имеет два параметра chain (цепочка) и rule (правило), вырезает все элементы от начального разбиения до конечного разбиения цепочки. Возвращает цепочки, которые получились в результате разбиения.
Рисунок 21 Диаграмма класса CutRule
Данный класс является абстрактным классом, от него наследованы другие классы, к примеру, SimpleCutRule. Помогает избежать дублирования кода. Класс имеет метод getIterator. Метод getIterator возвращает значение начала и конца разбиения.
4.4 Требования к программным средствам ПК
Для работы программного комплекса на ПК должна быть установлена ОС Windows с библиотекой компонентов.NET Framework и пакет программ IIS (СУБД PostgreSQL (с расширением PLV8js)), а также библиотеки программных компонентов LibiadaWeb, LibiadaCore.
4.5 Выводы
Разработанный программный комплекс полностью выполняет необходимые функции и может быть использован для вычисления локальных характеристик знаковых последовательностей.
5. Инструкция пользователя
1. Выбрать объект или объекты исследования. Пользователь должен выбрать хотя бы один объект исследования из таблицы.
2. Задать размер окна и размер шага. Пользователь вводит числовые значения шага и размера окна.
3. Выбрать способ разбиения знаковой последовательности: блоки, L-граммы, L-граммы с фиксированной привязкой к началу цепочки.
4. Выставить флаг, если требуется вычисления спектра. Пользователь выставляет флаг вычисления спектра, если необходимо вычислить спектр по Фурье.
5. Выставить флаг, если требуется вычисление дифференциала. Пользователь выставляет флаг, если необходимо подсчитать разницу между ближайшими парами характеристик.
6. Выбрать форму записи. Пользователь выбирает из выпадающего списка форму записи для всех объектов исследования.
7. Ввод списка характеристик и их привязок. Пользователь выбирает из списка характеристики и привязки. Также пользователь может добавлять характеристики и убирать те, что уже выбраны. Таки м образом пользователь может выполнять подсчёт нескольких характеристик одновременно.
После того как пользователь запустил вычисление характеристик, происходит переход на страницу с результатами. На странице представлена таблица с фрагментами цепочек и значения характеристик этих цепочек (рисунок 22). Пользователь может выбирать, сколько одновременно фрагментов данной знаковой последовательности отображать. По умолчанию отображаются 10 фрагментов, для изменения этого значения надо открыть выпадающий список (рисунок 23). На данное время, можно отображать 10, 25, 50 и 100 фрагментов знаковой цепочки. Возможен поиск фрагментов знаковой последовательности, для этого в поле «Search» надо ввести значение фрагмента, который требуется найти, если несколько фрагментов будут содержать это значения, то они будут отображены в таблице (рисунок 24). Из рисунка 24 видно, что из 914 фрагментов знаковой последовательности, только в девятнадцати содержится фрагмент «AAAAATAACAATA».
Также на странице могут быть отображены графики исследуемых объектов (рисунок 25).
Рисунок 22 Вывод фрагментов цепочек и значения характеристик этих цепочек
Рисунок 23 Изменение значения выпадающего списка для выбора вывода количества фрагментов знаковой последовательности
Рисунок 24 Поиск фрагмента знаковой последовательности
Рисунок 25 Вывод результатов характеристики в графическом виде
На рисунке 26 представлен интерфейс для вычисления локальных характеристик. На странице представлены поле поиска для объекта исследования, размер окна, размер шага, а также флаг для подсчёта разницы между характеристиками (нахождение производной), флаг для подсчёта увеличивающимся окном и флаг для нахождения быстрого преобразования Фурье. Также пользователь может считать не одну характеристику, а сразу несколько характеристик. Для того чтобы добавить характеристику нужно нажать кнопку «добавить характеристику». Пользователь может локально рассматривать изменение характеристик в той или иной области с помощью масштабирующего компонента на странице. Пользователь может задавать левую и правую границу масштабирующего элемента. Для того чтобы изменить границы нужно навести на сам масштабирующий элемент, после наведения появится стрелка и можно регулировать границы масштабирующего элемента. Для того чтобы задать границы более точно можно указать специальные параметры в соответствующих полях.
Если пользователь выбрал сразу подсчёт нескольких характеристик для одной или несколько знаковых последовательностей, то результаты расчётов можно отобразить на одном графике, для этого надо отметить галочкой поле «Вывести все графики сразу» и нажать на кнопку «Отобразить разбиение». В качестве примера, были подсчитаны характеристики «средняя удалённость» и регулярность. Если пользователь не отметил поле «Вывести все графики», то у него имеет возможность просматривать графическое представление характеристик по очереди. Для этого из выпадающего списка он должен выбрать ту характеристику для которой хочет просмотреть графическое представление и нажать на кнопку «Отобразить разбиение».
Если пользователь вывел несколько графиков сразу и хочет убрать один из них, надо навести мышь на название знаковой последовательности и нажать по ней, после этого график исчезнет. К примеру, был исходный график, который представлен на рисунке 33 и надо убрать графическое представление характеристики для «Хомячка китайского», то после выполнения данной процедуры будет показано только знания характеристик фрагментов знаковой последовательности для «Кайманового крокодила».
Для восстановления графика надо сделать обратную процедуру, то есть нажать на название знаковой последовательности (она будет выделена серым цветом), которая раннее была убрана с графика.
Заключение
В рамках данной бакалаврской работы был построен программный комплекс, позволяющий разбивать знаковые последовательности на блоки и L-граммы разными способами, а также вычислять характеристики строя, представляющие локальную структуру изучаемой последовательности. Для разработки был использован объектно-ориентированный подход и в частности язык программирования C#, а также разработка через тестирование. Кроме того, разработанный программный комплекс был интегрирован в библиотеку программных компонентов LibiadaCore, и была обеспечена возможность работы с ним посредством web-интерфейса LibiadaWeb.
При написании работы были проведены исследования 16S и 18S рибосомальных РНК организмов из 2 групп живых организмов: позвоночные и насекомые. Проведённые исследования показывают, что распределения локальных характеристик строя являются адекватным средством описания и сравнения нуклеотидных последовательностей. И в частности из графиков хорошо видно, что относительно близкородственные организмы (хомячок китайский и ёж обыкновенный, а также хомячки китайские)) имеют схожие распределения локальных характеристик, сильно близкородственные организмы (клещ таёжный и клещ и два китайский хомячка) ещё более схожие распределения локальных характеристик, а не родственные организмы (клещ таёжный и хомячок китайский) имеют сильно отличающиеся распределения.
Библиографический список
1. Садовский М.Г. Информационно-статистический анализ нуклеотидных последова-тельностей. Диссертация на соискание ученой степени доктора физико-математических наук. Красноярск, 2004. - 394 с.
2. Беляев Д.К., Бородкин П.М., Воронцов Н.Н., и др. Общая биология: Учеб. для 10-11 кл. общеобразоват. учереждений. - М.: Просвещение, 2003. - 303 с.
3. Алгоритмы анализа структуры сигналов и данных: монография / А.С. Гуменюк, Ю.Н. Кликушин, В.Ю. Кобенко, В.Н. Цыганенко; под науч. ред. д-ра техн. наук Ю.Н. Кликушина. - Омск: Изд-во ОмГТУ, 2010. - 272 с.
4. Gumenjuk, A., Kostyshin, A., Simonova, S. An approach to the research of the structure of linguistic and musical texts. (О подходе к исследованию структуры лингвистических и музыкальных текстов.) Glottometrics. -3 (2002). Liideschtid RAM-Verl С. 61-89.
5. Гуменюк А.С. О формализме, измерении и исчислении строений цепей сообщений. Материалы междунар. науч.-техн. конф. ИСТ2000 «Информационные системы и технологии». Т. 3. - Новосибирск: Изд-во НГТУ, - 2000. - С. 499-502.
6. Гуменюк А.С., Морозенко Е.В. О формализмах непосредственного анализа строя знаковых цепей. // Материалы Всероссийской конференции с международным участием «Знания - Онтологии - Теории» (ЗОНТ-09) Том 2 - Новосибирск: Изд-во института математики СО РАН, 2009. - С. 83-92.
7. Гуменюк А.С. О динамике и геометрии памяти субъективного наблюдателя. // Динамика систем, механизмов и машин. 2-я международная научно-техническая конференция. Кн. 1: Тез. докл. Омск: изд-во ОмГТУ, 1997. - С. 88.
8. Гуменюк А.С. О числовом анализе строения знаковых последовательностей и массивов упорядоченных данных. // Математические структуры и моделирование. Материалы международного семинара «Методы прикладной математики и информационных технологий в многодисциплинарных исследованиях и проектах». Выпуск 3. Омск: изд-во ОмГУ, 1999. - С. 141-142.
9. Гуменюк А.С. Об исчислении строений лингвистических текстов. // Квантитативная лингвистика и семантика (КЛИМ-2000). Сборник научных трудов. - Новосибирск: изд-во НГПУ, 2000. - С. 3-11.
10. Гуменюк А.С. Формализмы и числовые характеристики строя информационной цепи сообщений. // Омский научный вестник. - Омск: изд-во ОмГТУ, вып. 20. - 2002. С. 139-143.
11. Gumenjuk, A., The calculation of the positional relationship of elements in data arrays (formal analysis of the structured data composition). Proceeding of the Ninth International Conference «Speech and Computer» SPECOM-2004, Saint-Petersburg, 20-22. - 2004 p. 428-432.
12. Гуменюк А.С., Богорад Д.М. Об исчислении взаимного расположения элементов в массивах данных // Труды РНТОРЭС им. Попова, серия: научная сессия, посвященная Дню радио. Выпуск: LIX - 2. 2004. - С. 114-116.
13. Gatlin L.L. Information Theory and the Living System // New York: Columbia University Press, 1972.
14. Gatlin L.L. The information content of DNA // J. Theor. Biol., 1966, vol.10, pp.281 - 300.
15. Александров А.А., Александров В.В., Бородовский Ю.М. и др. Компьютерный анализ генетических текстов. // М.: Наука, 1990. - 264 с.
16. Computing with biological metaphors Edited by Ray Paton. // London; New York: Chapman & Hall, 1994. - 452 p.
17. Karlin S., Cardon L.R. Computational DNA Sequence Analysis // Ann. Rev. of Microbio-logy, 1994, vol.48, pp.619 - 654.
18. Konopka A.K. Sequences and Codes: Foundamentals of Biomolecular Cryprology // In: Biocomputings: Informatics and Genome Projects (D. Smith, Ed.) Acad. Press, San Diego, p. 119-174.
19. Konopka A.K. Theoretical Molecular Biology // In: Molecular Biology and Biotechnology, (R.A. Meyers, Ed.) (1995). VCH Publishers, Weinheim. p. 888 - 896.
20. Rosen R. Bionics Revisited // In: The Machine as Metaphor and Tool (Eds. H. Haken,
21. A. Karlquist, U. Svedin) Springer-Verlag, Berlin: 1993, pp.87 - 100.
22. Гельфанд М.С. Компьютерный анализ последовательностей ДНК // Мол.биология, 1998, т. 32, №1, с. 103 - 120.
23. Юшманов С.В. Восстановление биологической эволюции. Построение филогенети-ческих деревьев // Мат.вопросы кибернетики. Вып.З.М.: Наука, 1991. с. 51 -76.
24. Trifonov E.N., Brendel V. Gnomic, A Dictionary of Genetic Codes location // Balaban Publishers, Philadelphia, 1986. - 421 p.
25. Горбань А.Н., Попова Т.Г., Садовский М.Г. Корреляционный подход к сравнению нуклеотидных последовательностей // ЖОБ, 1994, т. 55, №4/5, с. 420 - 430.
26. Popova T.G., Sadovsky M.G. Investigating statistical properties of genetic texts: new method to compare two genes // Modelling, Measurement & Control, ser. C, 1994, AMSE Press, vol.45, №4, pp.27 - 36.
27. Левенштейн В.И. О совершенных кодах в метрике выпадений и вставок // Дискретн.математика, 1991, т. 3, №1, с.З -20.
28. Sankoff D. Edit distance for genome comparison based on non-local operations: Combin. Pattern Match, 3rd Ann. Symp., Tucson, Ariz., Apr. - May 1992 // Lect. Notes Comput. Sci., 1992, vol.644, pp.121 - 135.
29. Roytberg M.A. Similarity search in two biological sequences // Proc.of the Conf. «Modeling and computer methods in molecular biology and genetics», Novosibirsk, 1990, pp.7-8.
30. Вернослов С.Е., Кондратов А.С., Ройтберг М.А., Шабалина С.А., Юрьева О.В., Назипова Н.Н. Программный комплекс «Самсон» для анализа первичной структуры биополимеров // Молекулярная биология, 1989, т. 24, №2, с. 524 - 529.
31. Sadovsky M.G. Comparison of Symbol Sequences: No Editing, No Alignment // Open Systems & Information Dynamics, 2002, v. 9, №1, pp.19 - 36.
32. Sadovsky M.G. The method of comparison of nucleotide sequences based on the minimum entropy principle // Bulletine of Mathematical Biology, 2003, vol.65, pp. 309 - 322.
33. Мазур М. Качественная теория информации. - М.: Мир, 1984. - 280 с.
34. Гуменюк А.С. Элементы классической и современной теории информации. (Организация информирования). Учеб.пособие, - Омск: Изд-во ОмГТУ, 1994. - 82 с.
35. Гуменюк А.С. Прикладная теория информации. Конспект лекций, - Омск: Изд-во ОмГТУ, 2006. - 63 с.
Приложение
Исходный код программы:
Index.cshtml
@using LibiadaWeb. Helpers
@model dynamic
@{
ViewBag. Title = «Вычисление локальных характеристик»;
}
<h2>Вычисление локальных характеристик</h2>
<script type= «text/javascript»>
var divCounter = 0;
var formTable;
$(document).ready (function() {
formTable = $(«table»).dataTable({
bJQueryUI: true,
sPaginationType: «full_numbers»
});
$('form').submit (function() {
$(formTable.fnGetHiddenNodes()).find ('input:checked').attr («hidden», true).appendTo(this);
});
AddCharacteristic();
});
function AddCharacteristic() {
var characteristicTypes = new Array();
var linkUps = new Array();
@foreach (var option in ViewBag.characteristicsList)
{
@:characteristicTypes.push($(«<option></option>»).attr («value»,@option. Value).text ('@option. Text'));
}
@foreach (var option in ViewBag.linkUpsList)
{
@:linkUps.push($(«<option></option>»).attr («value»,@option. Value).text ('@option. Text'));
}
var characteristicsDiv = $(«<div/>»).attr ('name', 'characteristc' + divCounter).attr ('id', 'characteristic' + divCounter);
$(«#characteristics_list»).append(characteristicsDiv);
var selectList = $('<select/>').attr ('name', 'characteristicIds');
for (var i = 0; i < characteristicTypes.length; i++)
{
selectList.append (characteristicTypes[i]);
}
characteristicsDiv.append(selectList);
selectList = $('<select/>').attr ('name', 'linkUpIds');
for (var i = 0; i < linkUps.length; i++)
{
selectList.append (linkUps[i]);
}
characteristicsDiv.append(selectList);
// функция, возвращающая функцию для call back'а
var tempDeleteFunction = function(element) {
return function() {
DeleteElementByName (element.elemName);
};
};
var callBackDeleteFunction = tempDeleteFunction({elemName: 'characteristic' + divCounter});
characteristicsDiv.append($('<input/>').attr ('type', 'button').attr ('value', 'Удалить').click(callBackDeleteFunction));
AppendBr(characteristicsDiv);
divCounter++;
return false;
}
</script>
@using (Html. BeginForm())
{
<table>
<thead>
<tr>
<th>
Название объекта
</th>
</tr>
</thead>
<tbody>
@{
List<MvcHtmlString> mattersList = Html. CheckBoxGroup («matterIds», (List<SelectListItem>) ViewBag.mattersList);
foreach (var item in mattersList)
{
<tr>
<td>
@item
</td>
</tr>
}
}
</tbody>
</table>
<br/>
@Html. Label («Размер окна:»)
<input type = «number» id = «length» name = «length» value= «50»/>
@Html. Label («Размер шага:»)
<input type = «number» id = «step» name = «step» value= «2»/>
<br/>
<br/>
@Html. CheckBox («isDelta», «Считать разницу между характеристиками», null)
<br/>
@Html. CheckBox («isGrowingWindow», «Считать увеличивающееся окно», null)
<br/>
@Html. CheckBox («isFurie», «Быстрое преобразование Фурье», null)
<br/>
@Html. Label («Форма записи:»)
<select name= «notationId»>
@foreach (var option in ViewBag.notationsList)
{
<option value= "@option. Value»>@option. Text</option>
}
</select>
<br/>
<br/>
<input type= «button» onclick= «AddCharacteristic()» value= «Добавить характеристику»/>
<br/>
<div id= «characteristics_list»></div>
<br/>
<br/>
<input type= «submit» value= «Вычислить» />
}
Result.cshtml
@model dynamic
@{
ViewBag. Title = «Локальные характеристики»;
}
<h2>Локальные характеристики цепочки @ViewBag.chainName</h2>
@Scripts. Render («~/bundles/jqueryui»)
@Scripts. Render («~/bundles/Slider»)
@Styles. Render («~/Content/JQAllRange»)
<script type='text/javascript'>
var characteristics = new Array();
var partNames = new Array();
var chainNames = new Array();
$(document).ready (function() {
for (var l = 0; l < $(«table»).length; l++) {
partNames.push (new Array());
var rows = $(«table») [l].tBodies[0].rows;
for (var i = 0; i < rows.length; i++) {
partNames[l].push (rows[i].cells[0].textContent);
}
}
@{
for (int j = 0; j < ViewBag.characteristics. Count; j++)
{
@: characteristics.push (new Array());
var characteristicList = ViewBag.characteristics[j];
for (int i = 0; i < characteristicList. Count; i++)
{
@: characteristics[@j].push (new Array());
var characteristic = characteristicList[i];
for (int k = 0; k < characteristic. Count; k++)
{
String[] tempValue = characteristic[k].ToString().Split (', ');
String value = tempValue. Length == 2? tempValue[0] +».» + tempValue[1]: tempValue[0];
@: characteristics[@j] [@i] [@k] = @value;
}
}
}
for (int k = 0; k < ViewBag.chainNames. Count; k++)
{
@:chainNames.push («@ViewBag.chainNames[k]»);
}
}
$(«table»).dataTable({
bJQueryUI: true,
sPaginationType: «full_numbers»
});
// make the container smaller and add a second container for the master chart
var container = $('#visualization_container')
css ('position', 'relative');
var detailContainer = $('<div id= «detail-container»>')
css({position: 'absolute', top: 0, height: 600, width: '100% '})
appendTo(container);
var masterContainer = $('<div id= «master-container»>')
css({position: 'absolute', top: 500, height: 100, width: '100% '})
appendTo(container);
});
var masterChart, detailChart;
function setScale() {
var min = $(«#slider_container»).rangeSlider («min»);
var max = $(«#slider_container»).rangeSlider («max»);
var detailData = [];
var xAxis = masterChart.xAxis[0];
min =+min;
max =+max;
// reverse engineer the last part of the data
for (var k = 0; k < masterChart.series.length; k++) {
jQuery.each (masterChart.series[k].data, function (i, point) {
if (point.x > min && point.x < max) {
detailData.push({
x: point.x,
y: point.y
});
}
});
}
// move the plot bands to reflect the new detail span
xAxis.removePlotBand('mask');
xAxis.addPlotBand({
id: 'mask',
from: min,
to: max,
color: 'rgba (0, 0, 0, 0.2)'
});
detailChart.series[0].setData(detailData);
}
function createMaster (dataSeries, yMin, yMax) {
masterChart = new Highcharts. Chart({
chart: {
renderTo: 'master-container',
reflow: false,
borderWidth: 0,
backgroundColor: null,
marginLeft: 50,
marginRight: 20,
events: {
// listen to the selection event on the master chart to update the
// extremes of the detail chart
selection: function(event) {
var extremesObject = event.xAxis[0],
min = extremesObject.min,
max = extremesObject.max,
detailData = [],
xAxis = this.xAxis[0];
// reverse engineer the last part of the data
jQuery.each (this.series[0].data, function (i, point) {
if (point.x > min && point.x < max) {
detailData.push({
x: point.x,
y: point.y
});
}
});
// move the plot bands to reflect the new detail span
xAxis.removePlotBand('mask');
xAxis.addPlotBand({
id: 'mask',
from: min,
to: max,
color: 'rgba (0, 0, 0, 0.2)'
});
detailChart.series[0].setData(detailData);
return false;
}
}
},
title: {
text: null
},
xAxis: {
type: 'number',
showLastTickLabel: true,
maxZoom: 3, //
title: {
text: null
}
},
yAxis: {
gridLineWidth: 0,
labels: {
enabled: false
},
title: {
text: null
},
min: 0.6,
showFirstLabel: false
},
tooltip: {
formatter: function() {
return false;
}
},
legend: {
enabled: false
},
credits: {
enabled: false
},
plotOptions: {
area: {fillColor: {linearGradient: [0, 0, 0, 300], stops: []}, lineWidth: 1, marker: {enabled: false, states: {hover: {enabled: true, radius: 5}}}, pointStart: 0, pointInterval: 1, shadow: false, states: {hover: {lineWidth: 1}}},
series: {
lineWidth: 1,
marker: {
enabled: false
},
shadow: false,
states: {
hover: {
lineWidth: 1
}
},
enableMouseTracking: false
}
},
series: dataSeries,
exporting: {
enabled: true
}
}, function(masterChart) {
createDetail (masterChart, dataSeries, yMin, yMax);
});
}
// create the detail chart
function createDetail (masterChart, dataSeries, yMin, yMax) {
// prepare the detail chart
var detailData = [],
detailStart = 0;
jQuery.each (masterChart.series[0].data, function (i, point) {
if (point.x >= detailStart) {
detailData.push (point.y);
}
});
// create a detail chart referenced by a global variable
detailChart = new Highcharts. Chart({
chart: {marginBottom: 120, renderTo: 'detail-container', reflow: false, marginLeft: 50, marginRight: 20, style: {position: 'absolute'}},
credits: {enabled: false},
title: {text: «Локальные характеристики цепочек»},
xAxis: {
title: {text: «Фрагменты цепочки»},
type: 'number'
},
yAxis: {
title: {text: $(«#yaxis option:selected») [0].text},
maxZoom: 0.1,
max: yMax,
min: yMin
},
tooltip: {
formatter: function() {
var point = this.points[0];
return point.series.name + «<br/>» + this.y;
},
shared: true
},
legend: {align: 'left', backgroundColor: '#FFFFFF', borderWidth: 1, floating: true, layout: 'vertical', verticalAlign: 'top', x: 100, y: 50},
plotOptions: {
area: {fillColor: {linearGradient: [0, 0, 0, 300], stops: []}, lineWidth: 1, marker: {enabled: false, states: {hover: {enabled: true, radius: 5}}}, pointStart: 0, pointInterval: 1, shadow: false, states: {hover: {lineWidth: 1}}},
series: {marker: {enabled: false, states: {hover: {enabled: true, radius: 3}}}}
},
series: dataSeries,
exporting: {enabled: false}
});
}
function shift (left, right) {
$(«#slider_container»).rangeSlider («values», left, right);
setScale();
}
function stepSlider(step) {
var min = $(«#slider_container»).rangeSlider («min»);
var max = $(«#slider_container»).rangeSlider («max»);
min =+min;
max =+max;
step =+step;
$(«#slider_container»).rangeSlider («values», min+step, max+step);
}
function GetMaxArrayLength(arrayOfArrays) {
var maxLength = 0;
for (var i = 0; i < arrayOfArrays.length; i++) {
if (arrayOfArrays[i].length > maxLength) {
maxLength = arrayOfArrays[i].length;
}
}
return maxLength;
}
var yVals;
function FillSeries (characteristicId, dataSeries) {
for (var i = 0; i < partNames.length; i++) {
var series = new Object();
series.data = new Array();
series.type = 'area';
series.name = chainNames[i];
for (var j = 0; j < partNames[i].length; j++) {
var y = characteristics[i] [j] [characteristicId];
var pointName = partNames[i] [j];
series.data[j] = new Object();
series.data[j].x = j + 1;
series.data[j].y = y;
series.data[j].name = pointName;
// массив для определения минимального значения для границ графика
yVals.push(y);
}
dataSeries.push(series);
}
}
function CreateChart (dataSeries, minY) {
chart = new Highcharts. Chart({
chart: {renderTo: 'visualization_container', defaultSeriesType: 'scatter', zoomType: 'x'},
legend: {align: 'left', backgroundColor: '#FFFFFF', borderWidth: 1, floating: true, layout: 'vertical', verticalAlign: 'top', x: 100, y: 50},
plotOptions: {area: {fillColor: {linearGradient: [0, 0, 0, 300], stops: []}, lineWidth: 1, marker: {enabled: false, states: {hover: {enabled: true, radius: 5}}}, pointStart: 0, pointInterval: 1, shadow: false, states: {hover: {lineWidth: 1}}}},
title: {text: «Локальные характеристики цепочек»},
tooltip: {
formatter: function() {
return this.point.name + «<br/>» + this.y;
}
},
xAxis: {min: 0, maxZoom: 3, title: {text: 'Фрагменты цепочки'}},
yAxis: {endOnTick: false, startOnTick: false, min: minY, title: {text: $(«#yaxis option:selected») [0].text}},
series: dataSeries
});
}
function getBorderOfArrows() {
var min = $(«#slider_container»).rangeSlider («min»);
var max = $(«#slider_container»).rangeSlider («max»);
$.ajax({
type: «GET»,
//url
data: {«min»:min, «max»:max},
success:result
});
function result(data) {
alert(data);
return false;
}
}
function DrawChart() {
yVals = new Array();
var dataSeries = new Array();
slider = $(«#slider_container»).rangeSlider({
bounds: {min: 0, max: GetMaxArrayLength(partNames)},
defaultValues: {min: 0, max: GetMaxArrayLength(partNames)},
wheelMode: «zoom»,
valueLabels: «show»,
step: false,
scales: [
// Primary scale
{
first: function(val) {return val;},
next: function(val) {return val + 10;},
stop: function(val) {return false;},
label: function(val) {return val;}
},
// Secondary scale
{
first: function(val) {return val;},
next: function(val) {
if (val% 10 === 9) {
return val + 2;
}
return val + 1;
},
stop: function() {return false;},
label: function() {return null;}
}]
});
$(«#slider_container»).bind («valuesChanging», function (e, data) {
console.log («min:» + data.values.min + «max:» + data.values.max + «step:»);
});
$(«#slider_container»).bind («valuesChanging», function() {
setScale();
});
if ($(«#allGraphics») [0].checked) {
for (var j = 0; j < $(«#yaxis option»).length; j++) {
FillSeries($(«#yaxis option») [j].value, dataSeries);
}
} else {
FillSeries($(«#yaxis option:selected») [0].value, dataSeries);
}
createMaster (dataSeries, Math.min.apply (null, yVals), Math.max.apply (null, yVals));
}
</script>
@for (int k = 0; k < ViewBag.chainNames. Count; k++)
{
<table>
<thead>
<tr>
<th>
@ViewBag.chainNames[k]
</th>
@foreach (var characteristicName in ViewBag.characteristicNames)
{
<th>
@characteristicName
</th>
}
</tr>
</thead>
<tbody>
@for (int i = 0; i < ViewBag.characteristics[k].Count; i++)
{
<tr>
<td id= «chainNameCell»>
@ViewBag.partNames[k] [i]
</td>
@foreach (var characteristic in ViewBag.characteristics[k] [i])
{
<td>
@characteristic
</td>
}
</tr>
}
</tbody>
</table>
}
<br/>
<div id= «visualization_container» style= «width: 800px; height: 630px»></div>
<br/>
<div style= «width: 755px; height: 30px; margin-left: 35px»>
<div id= «slider_container»>
</div>
</div>
<br/>
<div style= «width: 800px; height: 300px;»>
<div id= «control-form» style = «clear:both»>
<label>Левая граница
<input type= «number» id= «leftArrow» name= «leftArrow» value= «5» />
</label>
<label>Правая граница
<input type= «number» id= «rightArrow» name= «rightArrow» value= «10» />
</label>
<input type= «button» value= «сдвиг» onclick= «stepSlider (stepOfWindow.value);»/>
<input type= «button» value= «значение» onclick= «shift (leftArrow.value, rightArrow.value);»/>
</div>
<div id= «new-params» style = «clear:both; border: 2px solid #aaa; width: 430px; border-radius: 10px; padding: 5px;»>
<label>Изменить параметры разбиения</label>
<label>Шаг окна
<input type= «number» id= «stepOfWindow» name= «stepOfWindow» value= «2»>
</label>
<label>Размер окна
<input type= «number» id= «widthOfWindow» name=»» value= «10»>
</label>
<input type= «button» value= «значение» onclick= «shift (stepOfWindow.value, widthOfWindow.value);»/>
</div>
</div>
@Html. Label («Ось y»)
<select name= «yaxis» id= «yaxis»>
@foreach (var option in ViewBag.characteristicsList)
{
<option value= "@option. Value»>@option. Text</option>
}
</select>
<br/>
<input type= «checkbox» name = «allGraphics» id= «allGraphics» value= «true» >Вывести все графики сразу</input>
<br/>
<button onclick= «DrawChart()» >Отобразить разбиение</button>
CutRule.cs
using System. Collections. Generic;
namespace LibiadaCore. Classes. Misc. Iterators
{
public abstract class CutRule
{
protected List<int> starts = new List<int>();
protected List<int> stops = new List<int>();
public abstract CutRuleIterator getIterator();
}
}
CutRuleIterator.cs
using System. Collections. Generic;
using System. Linq;
namespace LibiadaCore. Classes. Misc. Iterators
{
public class CutRuleIterator
{
private List<int> starts;
private List<int> stops;
private int i = -1;
public CutRuleIterator (List<int> starts, List<int> stops)
{
this.starts = starts; // храним начальные позиции
this.stops = stops; // храним конечные позиции
}
public bool next()
{
i++;
return (starts. Count() > i) && (stops. Count() > i);
}
public int getStartPos()
{
return starts[i];
}
public int getStopPos()
{
return stops[i];
}
}
}
DifCutter.cs
using System;
using System. Collections. Generic;
namespace LibiadaCore. Classes. Misc. Iterators
{
public class DifCutter
{
public List<String> cut (String chain, CutRule rule)
{
List<String> result = new List<String>();
rule.getIterator();
CutRuleIterator iterator = rule.getIterator();
while (iterator.next())
{
String s = chain. Substring (iterator.getStartPos(), iterator.getStopPos());
result. Add(s);
}
return result;
}
}
}
FromFixStartCutRule.cs
namespace LibiadaCore. Classes. Misc. Iterators
{
public class FromFixStartCutRule: CutRule
{
public FromFixStartCutRule (int length, int step)
{
for (int i = step; i <= length; i+= step)
{
starts. Add(0);
stops. Add (i < length? i: length);
}
}
public override CutRuleIterator getIterator()
{
return new CutRuleIterator (starts, stops);
}
}
}
SimpleCutRule.cs
namespace LibiadaCore. Classes. Misc. Iterators
{
public class SimpleCutRule: CutRule
{
public SimpleCutRule (int chainLength, int step, int windowLength)
{
for (int i = 0; i + windowLength < chainLength; i+= step)
{
starts. Add(i);
stops. Add (windowLength + i);
}
}
public override CutRuleIterator getIterator()
{
return new CutRuleIterator (starts, stops);
}
}
}
Размещено на Allbest.ru
Подобные документы
Стадии разработки программного средства. Средства, методологии и методы его разработки. Оценка надежности и качества проекта. Обоснование необходимости разработки программы. Тестирование как процесс выполнения тестовой программы с намерением найти ошибки.
презентация [57,0 K], добавлен 27.12.2013Необходимые для разработки автоматизированной информационной системы программные и технические средства. Иерархическая схема наследования объектов. Добавление новой записи. Формирование отчетов в формате Word. Инструментальные средства разработки.
дипломная работа [996,2 K], добавлен 20.06.2014Методика исследования и анализа средств аудита системы Windows с целью обнаружения несанкционированного доступа программного обеспечения к ресурсам вычислительных машин. Анализ угрозы информационной безопасности. Алгоритм работы программного средства.
дипломная работа [2,9 M], добавлен 28.06.2011Создание автоматизированной системы мониторинга серверного окружения. Обоснование выбора среды разработки. Включение и исполнение JavaScript. Программный комплекс CargoCRM 2.7. Система "Учет-Логистик". Целесообразность написания своего сервиса.
дипломная работа [2,3 M], добавлен 29.06.2012Оптимизационная задача линейного программирования. Виды задач линейного программирования. Принятие решений на основе количественной информации об относительной важности критериев. Выбор средств разработки. Программный комплекс векторной оптимизации.
дипломная работа [1,3 M], добавлен 27.03.2013Обоснование выбора метода проектирования и инструментальных средств для разработки программного средства и базы данных. Требования к эргономике и технической эстетике. Разработка алгоритмов приложения. Руководство пользователя. Безопасность труда.
дипломная работа [2,9 M], добавлен 17.10.2014Краткая история организации ТОО "Актобе Саулет". Программные средства: операционная система, инструментальная среда разработки, прикладные программы. Работа с жесткими дисками, флэш-дисками, СD-дисками (разделение, форматирование) и модернизация ПК.
отчет по практике [1,2 M], добавлен 24.07.2012Обзор средств программирования. Описание и свойства языка Delphi. Основания для разработки, ее назначение, предъявляемые требования, стадии разработки. Описание схемы основного модуля, процедур, программы. Используемые технические и программные средства.
курсовая работа [42,8 K], добавлен 25.02.2012Анализ способов построения генераторов случайных чисел для криптографических задач. Анализ генератора случайных чисел на основе магнитометров. Анализ статистических свойств двоичных последовательностей, полученных путем квантования данных магнитометра.
дипломная работа [2,5 M], добавлен 06.05.2018Анализ существующих методов и средств выявления требований. Стадии разработки программного обеспечения. Структуризация требований в базе знаний на основе расширенной классификации. Наблюдение за бизнесом заказчика. Моделирование бизнес-процессов компании.
диссертация [2,1 M], добавлен 21.02.2016