Библиотека CBioInfCpp — набор функций C++ для биоинформатики и не только (строки, графы, вектора)


Всем интересующимся биоинформатикой, а также работающим в том или ином виде с графамистроками и массивами (векторами) в C++ позвольте предложить первую версию библиотеки CBioInfCpp.h

Исходники и описание размещено здесь, все распространяется свободно:

https://drive.google.com/open?id=1FQwsQm2kG_nTO45ab0yj52xtp6_B4IB2

https://github.com/chernouhov/CBioInfCpp-0-

оригинал статьи


Данная библиотека содержит ряд функций для:

(1) Считывания из файла и вывода (в файл, на экран) одной командой стандартных векторов и матриц (такая «питонизация» C++), а также данных специальных форматов (считывание массива строк в формате FASTA).

(2) Работы со строками – от сравнительно общих задач поиска наименьшей общей надстроки и вычисления редакционного расстояния до специфических биоинформатических задач от подсчета GC-состава до поиска в строке всех «мутировавших» подстрок, т.е. тех, редакционное расстояние до которых от искомой не превышает заданного.

(3) Работы с графами – тут надо остановиться чуть подробнее. В библиотеке предлагается использование для хранения графов такой структуры, как «вектор смежности». Ребра графа (вершины которого, кстати, могут нумероваться и отрицательными целыми числами, а дуги – как целыми, так и double) представляются в виде одной упорядоченной последовательности чисел – «пар» или «дуплетов» для невзвешенного и «триплетов» для взвешенного графа. Такая структура данных является довольно компактной и реализована, что называется, «безо всяких классов», с помощью стандартных элементов C++. Функции считывания графов из файлов, нахождения Эйлерова путитопологической сортировкикратчайших расстояний и пр. прилагаются.

С июня 2019 для обеспечения более быстрого доступа к значению веса ребра в графе добавлена еще одна структура данных хранения графов - Ассоциативный массив смежности — как вариант ранее предложенной и реализованной структуры Вектор смежности.

(4) Некоторые вспомогательные функции, например, разбиение числа на слагаемые.

Быстрый старт: для использования библиотеки достаточно написать #include <CBioInfCpp.h> в самом начале Вашей программы (предварительно разместив файл CBioInfCpp.h в соответствующем каталоге, ну или же задать к нему путь самостоятельно при произвольном размещении файла CBioInfCpp.h на Вашем компьютере). Остальные библиотеки, требуемые в ней, подсоединяются сами, не надо ничего самостоятельно «собирать, подключать» и т.д. «Открыли-сели-поехали».

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

Что же дальше? Ну, во-первых, конечно, библиотека может содержать ошибки (тем более, что написана она не профессиональным программистом, а в порядке хобби). Ошибки будем стараться, по возможности, исправлять, лучше «всем миром».

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

Также, думается, в ней нужны многие другие функции. Что в части работы со строками (те же выравнивания, вычисление редакционных расстояний с различными «штрафами» за несовпадения и пропуски, и т.д.), так и с графами. Кстати, какие функции были бы нужны?

Возможно, что-то осилю сам. Но коллективно же веселее?

Обновление от 23.06.2019:

- Доработаны функции семейства FindIn,
- Доработаны функции PairVectorCout, PairVectorFout.
- Добавлено семейство функций GraphCout и GraphFout: теперь можно выводить графы пореберно: каждое ребро в отдельной строке.
- Добавлена функция StrToCircular для нахождения кратчайшей "круговой" ("скрученной в кольцо") строки для заданной.
- Добавлено семество функций MaxFlowGraph для поиска максимального потока в графе, минимального разреза и нахождения одного из вариантов "сети путей", обеспечивающих максимальный поток.
Для обеспечения более быстрого доступа к значению веса ребра в графе добавлена структура данных хранения графов - Ассоциативный массив смежности как вариант ранее предложенной и реализованной структуры Вектор смежности.
- Добавлены функции конвертации Вектора смежности в Ассоциативный массив смежности и назад. Важно: при конвертировании Векстора смежности в Ассоциативный массив смежности множественные ребра объединяются с суммированием весов.
- Добавлена TandemRepeatsFinding для поиска тандемных повторов в заданной строке, что может быть полезно в решениях задач в области Microsatellite Instability.

Обновление от 14.07.2019:
- Добавлена функция CIGAR1: Формирует строку CIGAR по результату "прикладывания" одной строки к другой с заданной позиции.
- Расширено семейство функций GraphCout и GraphFout: теперь можно выводить и графы, заданные ассоциативным массивом смежности.
- Добавлена функция EditDistA как расширенная версия функции EditDist: помимо редакционного расстояния возвращает также и один из возможных вариантов выравнивания строк.

Обновление от 09.08.2019:

- Добавлено семейство функций NBPaths для поиска максимально длинных неразветвляющихся путей в графе (взвешенном, невзвешенном, ориентированном, неориентированном).
- Добавлены функции ConsStringQ1 и ConsStringQ2 для определения консенсусной строки с учетом качества символов в строках исходной коллекции. Ввиду малого объема данных для тестирования могут быть ошибки.