Преобразование последовательностей ДНК в пиксельные изображения

У меня есть текстовый файл последовательностей ДНК, более 3 миллиардов символов из четырех букв - A, T, C и G-. Я хотел бы иметь изображение этого файла и преобразовать каждый символ в изображение с правильным пикселем. Я очень ценю ваши комментарии? любое программное обеспечение для этого?


person mansour ebrahimi    schedule 28.12.2016    source источник
comment
Боюсь, это должен быть наивный вопрос: что такое изображение с правильными пикселями?   -  person Bill Bell    schedule 28.12.2016


Ответы (3)


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

ATCGAATTCCGGAAATACGATCGGCTCA... к изображению?

person mansour ebrahimi    schedule 04.01.2017

Конечно, есть способ. Мой ответ на https://bioinformatics.stackexchange.com/questions/14184/how-does-deepvariant-construct-rgb-images-from-dna-sequences поможет.

In RGB, each dimension is an NxN image. Since you have three dimensions, so it's 3xNxN. The red dimension was used to encode the nucleotide bases. The green dimension was used to encode quality scores. Finally, the blue dimension was used to encode the strand information.

person SmallChess    schedule 30.09.2020

Я не знаю, что означают эти четыре буквы, но:
1) Назначьте каждой из них цвет. У вас есть четыре цвета для четырех букв.
2) Очевидно, вы убьете ПК, если прочитаете весь файл и сохраняет его в оперативной памяти, поэтому вы должны читать его кусками.
3) Допустим, вы будете отображать это на мониторе 1024x768, тогда 3 000 000 000/1024=2 929 687,5 ; это размер ваших кусков. Я бы:

-1: прочитал первые 2 929 688 букв вашего файла.
-2: создайте глобальную переменную RGB, которая может быть массивом, в котором хранятся 3 двойных значения.
-3: для каждой буквы я делю ее цвет на компоненты RGB и добавляю его к глобальной компоненте RGB, например:
//letterRGB={red:255,green:125,blue:255} ;
globalRGB["красный"]+=letterRGB["красный"]/255; // дает 1
globalRGB["green"]+=letterRGB["green"]/255; // дает 0,5
globalRGB["blue"]+=letterRGB["blue"]/255;//дает 1

-4: разделите каждый компонент на количество точек, а затем умножьте это за 255. Это даст вам цвет куска. Например:

globalRGB["red"]=Math.round((globalRGB["red"]/nPoints)*255);//nPoints=2 929 688

Итак, вот вы в основном вычисление среднего цвета всех 2 929 688 букв, и это цвет только 1 точки (или пикселя) на вашем экране, одной из 1024 точек.
Я бы повторил процесс со следующими 2 929 688 буквами, пока не получу свои 1024 представлены фрагменты.
Предположим, пользователь нажимает на одну точку (или фрагмент) на экране. Ваша система должна увеличить масштаб, и способ сделать это — повторить весь этот процесс, но только для 2 929 688 букв в этой точке.< br>
Таким образом, ваши куски будут состоять только из 2 929 688/1024=2861 точек. И так один. Держу пари, вы уже поняли логику.

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

Дайте мне знать, что вы думаете об этом, и удачи.

person Gabo Alvarez    schedule 28.12.2016