java -jar gene-1.0-SNAPSHOT-jar-with-dependencies.jar ($путь до хромосомы)
Формат файла для обработки -- GenBank
В качестве примеров на данный момент взяты файлы хромосом Arabidopsis thaliana из сервера NCBI
- Весь файл читаем через Scanner по строчкам
- Сначала scanningGeneAnnotation равен true, так как мы в данный момент ищем аннотации генов
- Если есть подстрока " gene ":
- Комплиментарный ген?
- Раазделение данной строки по маскам
"(\\.\\.)|(\\s+complement\\()|(\\))|(\\s+<)|(\\s+)"
или две точки, или пробелы с complement(, или просто пробелы, или скобки - Читаем след строку, и если там есть название гена -- записывает опять же
split
- Вырезаем инфу о Locus_tag, Gene_synonyms, который вырезается более сложным образом:
- Соединяем все строки в StringBuilder, относящиеся к "gene_synonym", ибо они могут быть в нескольких строках
- Читаем полученный StringBuilder через Scanner, у которого будут новые точки прерывания
Pattern.compile("(\\s+/gene_synonym=\")|\"|(;\\s+)")
- Далее мы получим все названия синонимов, однако, они будут не в самом резентабельном виде, так как будут много пробелов. Полученную строку снова оборачиваем в новый Scanner с дефолтными точками разрыва.
- Запоминаем в ArrayList
- Вся необходимая информация записывается в объект Promotor
- Название гена
- Номер хромосомы
- Название локуса
- Список синонимов к этому гену
- Начало и конец промоторной области
- Комплиментарна ли она
- Сама последовательность(если комплиментарна, то делай reverce)(мы ее получим позже)
- Вся собранная информация об одной промоторной части складывается в контейнер List
- А теперь мы доходим до "ORIGIN "
- Всю последовательность соединяем аккуратно и складываем в StringBuilder
- Так как мы все промоторные части сохранили в List, мы их и начинаем снова читать
- Находим индексы начала и конца требуемой подпоследовательности
- Вырезаем
- Если нужна комплиментарная -- делаем Reverce
- Сохраняем обратно в Promotor
- Теперь экспорт в файлы: каждый файл в формате FASTA описывает промоторную часть с описанем из Promotors