ig-pipeline's People
ig-pipeline's Issues
Выгрузка данных с сервера
Возможность архивации и сохранения указанных данных.
Алгоритмы выравнивания
Добавить в контейнер алгоритм локального выравнивания и выравнивания с аффинными гэпами.
Pipeline
Возможность накручивать на данные серию обработчиков (аналог pipe в Bash)
Review containers
Both C++ and Scala code need to be reviewed for optimal usage of memory.
Class hasher.
Рефакторинг
Пришли к следующей структуре каталогов:
- ig-backend
- ig-frontend
- data
- tools
tools:
- ig-splitter (./ngs-splitter && ./splitter)
- ig-snooper (./svm_data_generator and scripts)
- ig-aligner (./gene_*)
- ig-container
- common_lib
Аналогично структуре папки tools будем создавать приложения в ig-frontend.
Загрузка данных
- Загрузка файлов на сервер
- Добавление в проект
- Возможность передачи файла на вход снупера
Цитирование
Сюда складываем список статей, которые точно будем цитировать.
Выкладывать сразу в BibTeX формате со ссылкой, что это и зачем.
ig-snooper pipeline.py predictor parameter
Привет.
Мог бы ты вынести отдельным параметром скриптов train.py predict.py имя предиктора?
Нужно добавить дополнительный ключ запуска: --predictor=RandomForest
Внутри должен быть dict "Имя предиктора" -> ("Список параметров train", "Список параметров predict"). Затем эти списки подставляются в pipeline.py в строки 77 и 100 взамен части параметров. Если ключ --predictor отсутствует, то подставляется дефолтное значение из мапы (сейчас подставляй "RandomForest").
Например, для предиктора RandomForest в словаре будут два списка: ['weka.classifiers.trees.RandomForest', '-I', '10', '-K', '0', '-S', '1'] для train и ['weka.classifiers.trees.RandomForest'] для predict. Первый подставляется в 77 строку взамен захардкоженных, а второй - в строку 100. Остальные параметры в этих строках ('--no-cv' и т.п.) оставь как есть.
Я затем расширю словарь, добавив новые классификаторы.
Настроить nginx для ig-frontend
Необходимо настроить работу nginx с ig-frontend, затем написать инструкцию по установке на сервер. Паша затем сможет установить все локально.
Мысли по черновику
Внести всем соображения, что в принципе писать в статье в черновик. Желательно закончить до 14.12.
Удалять треш на концах сиквенсов
Может случиться, что на краях останутся адаптеры/праймеры. Можно либо использовать список праймеров/адаптеров, либо отрезать по error prediction (http://weka.wikispaces.com/Making+predictions) . Низкоприоритетно.
Кластеризация по регионам
- Получение fasta и файла разметки
- Выделение нужного региона
- Возврат дерева кластеризации по данному региону, множественного выравнивания, fasta-файлов кластеров
Перенос scan_dir.py
Перенести скрипт scan_dir.py из снупера в какое-нибудь логичное место (не в ig-tools), переписать путь в backend.
Upload
Добавление файла с локального компьютера сразу в storage
Перенести все либы из gene_* в common_lib
Splitter пропускает в вывод последовательности с 'N'
Последовательности с такой буквой нужно отправлять в треш.
Сделать генерацию задач для backend'а через форму на frontend'е
Сейчас приходится задавать json с командами руками.
Добавить поддержку CDR3 и FR4 в Nomenclature.h
Еще лучше, чтобы решение было универсальным, и SVM работал как для регионов, так и для генов, нужно сделать новый класс вместо Nomenclature, который будет хранить координаты начала и конца любого количества отрезков (это могут быть как регионы, так и гены) без имени. Тем более что для SVM имя не нужно, достаточно только номера класса.
Манифесты
Требуется внедрить манифесты (см #21) как можно скорее, а то сейчас от пары запусков storage похож на помойку.
В случае же наличия манифеста можно будет добавлять в storage только "полезные" outputs, игнорируя все прочее.
Форма кластеризации
В форме кластеризации SIM и SHORTEST CONS - это флаги без значений, соответственно, выглядить они должны checkbox`ами.
Проверить, что подобные булевые флаги правильно генерятся в строке команды в backend.
Покрыть тестами common_lib
Заготовки уже есть, нужно дописать тест-кейсы
Настройка рабочего окружения
- Настроить VPN - нужен доступ к тестовому серверу, файловому серверу и к SQL базе.
- Поставить на тестовую машину MySQL - я займусь подключением наших тулов к базе
Интерфейс для кластеризации
Добавился тул ig-simplecluster.
Идея такова:
- Имея на входе только fasta файл можно его скластеризовать одним из двух способов, на выходе получается директория с кучей результатов (консенсус, кластеры, дерево кластеризации, файл выравнивания и т.д.)
- Имея на входе две такие директории от двух ранов можно построить json-файл статистики, который хотят биологи.
Аргументы кластеризации:
- Входной fasta-файл
- Директория для результатов
- --sim - использовать поиск дубликатов вместо честной кластеризации
- --skip-first 5 - пропустить первые 5 (пример) букв при определнии дубликатов (при использовании --sim)
- --use-prct 70 - использовать только первые 70% (пример) сиквенса при определении дубликатов (при использовании --sim)
- --shortest-cons - использовать самые короткие сиквенсы для консенсуса вместо самых длинных (при использовании --sim, консенсус в этом случае - представитель класса эквивалентности)
- --min-len 100 - скидывать все сиквенсы длиной менее 100 (пример) в trash
Аргументы генерации отчета:
- Директория результатов кластеризации тяжелых цепей
- Директория результатов кластеризации легких цепей
- Путь выходного JSON (из которого нужно генерить красивую табличку)
- --fix-suffix - если у имен сиквенсов есть различные суффиксы (имя праймера, тип цепочки), которые у тяжелой и легкой цепи не совпадают, то их можно почистить
Как видно из аргументов, генерация отчетов не может рассматриваться как самостоятельный тул, он подразумевает обязательный запуск двух кластеризаций.
NB
Если же сразу сделать возможным "однокнопочный" последовательный запуск извлечения cdr3 и передачу их на кластеризацию и создание отчета, то будет совсем круто, и нас очень похвалят. :)
Т.е. use-case - человек грузит 2 fasta файла: один с тяжелыми цепями, другой с легкими, и получает радость в виде отчета! :)
Оптимизации
- Оптимизация подсчета хэшей в индексе K-меров через битовые операции и ленивые списки (Stream).
- Замена перевыделяемых матриц в alicont на один буффер фиксированной высоты (максимальная глубина дерева) и указатель конца буффера.
Отрисовка результатов поиска регионов в интерфейсе
Паша, нужны примеры визуализации данных, чтобы понять куда двигаться.
Понять, почему обрезается ответ от backend'а на frontend'е
Сейчас выводится только начало сообщения + ненужная фраза "Your result", а json воспринимается как строка.
Форма report
В качестве входных параметров требуются директории, которые не могут быть добавлены в storage автоматически.
Вообще, вопрос глубже, и требуется обсудить и сделать максимально удобной систему storage, пока не стало слишком поздно. :)
Подбор параметров случайных деревьев
Для тестовых ламовых данных точность предсказания низка из-за большего количества областей, которые деревья не классифицируют.
Подобрать параметры запуска, построить графики. В случае отсутствия оптимума на любых параметрах поставить вопрос о создании дополнительного фильтра.
Данные
Много для чего нам нужны открытые датасеты, на которых будем демонстрировать результаты.
- Human germline (уже есть)
- IG Base (http://sysimm.ifrec.osaka-u.ac.jp/igBase/Igbase_results.php)
Предлагаем еще!
Мета-актёр
Единый унифицированный Actor для всех CLI тулов - принимает на вход путь/название тула, параметры командной строки и директорию для сохранения файла. Будут исключения, например - актор для шелла.
Вопрос: а не разбить ли нам на 2 статьи материал?
Лимит по статье: 12 страниц (это вместе с картинками, таблицами и прочим).
У анс чисто черновик с идеями получился 6.
Не разбить ли нам все это дело на две статьи? Хочу доводы за и против.
Мне с одной стороны кажется, что это было бы правильно, с другой, нормально ли будут смотреться эти вещи самостоятельно?
2 статьи:
- Random Forest
- Annotation Container
Создать backend на java
Выбрали java, так как мы все знаем ее на достаточном для быстрой разработки уровне. Протокол - JSON. Описание - в protocol.json
Переразобрать данные kabat
Составить kabat файлы для:
- VH, JH (DH - всегда CDR3)
- VK, JK
- VL, JL
для каждого файла иметь соответствующий .kabat в обычном формате
seq fr1_s fr1_e cdr1_s cdr1_e fr2_s fr2_e cdr2_s cdr2_e fr3_s fr3_e cdr3_s cdr3_e fr4_s fr4_e
Так, для некоторого V-гена это будет выглядеть как
IGHV2-70*09 1 90 91 111 112 153 154 201 202 297 0 0 0 0
Для некоторого J-гена:
JH2 0 0 0 0 0 0 0 0 0 0 1 18 19 53
Аналогичную операцию проделать с аминокислотными последовательностями.
Это позволит сильно сократить объем хранимой информации при сохранении удобства использования. Вся необходимая для разметки информация может быть взята здесь: http://www2.mrc-lmb.cam.ac.uk/vbase/alignments2.php
Вынести конфиги в отдельную папку
Нужно вынести все конфиги (application.conf для бэкэнда, и конфиги тулов) в отдельную папку - и убедиться что все работает.
Добавить поддержку обрезанных сиквенсов
Хотим получить поддержку сиквенсов, в которых отсутствует, например, FR1 и CDR1. Сейчас при выводе в kabat отсутствующие регионы будут пропущены, а хочется чтобы отсутствующие регионы помечались нулями, т.е. суммарное число столбцов всегда было константным.
Баги frontend 18.11
Неправильно формируется строка запуска standalone trainРешили. Проблема была в использовании не последней версии Train, которая выдавала ошибку из-за отсутствующего параметра.Проверка уникальности файла в storage идет только по ID, а не по тройке (группа-ран-id)Поправил
Изменить вывод ig-aligner
Паша, нужны примеры вывода. Я понимаю, что должно быть что-то вида:
{read_id: {V: [v_germline_id1, v_germline_id2], D: [d_germline_id1, d_germline_id2], J: [j_germline_id1, j_germline_id2], K: [k_germline_id1, k_germline_id2]}}
Рефакторинг IG-SNOOPER
-
Переписать скрипты запуска на Питоне
-
Обеспечить интерфейсы типа:
train.py fasta kabat model_name config
predict.py fasta model_name config -
Config:
window_size
avg_size
merge_threashold
model_path
out_dir
tools_path
remove-trash-flag
- Автогенерация header по типу последовательности (меньше треша, нет неприятностей с weka)
Вырезание региона
С божью (ig-tools/ig-snooper/ig_snooper_utils) помощью получать отдельный FASTA файл с указанным регионом из каждого сиквенса входного FASTA + Kabat файлов.
Относительные пути
Сейчас много где используются абсолютные пути для гермлайнов, регионов и прочего. Наверное, пора переделать их на относительные.
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.