Можно ли создать карту ограничений с помощью python? [закрыто]

У меня есть несколько фрагментов ДНК из одинарного и двойного переваривания с использованием трех разных ферментов рестрикции. Я пытаюсь построить рестрикционную карту линейного фрагмента ДНК. На карте необходимо указать относительное положение сайтов рестрикции вместе с расстояниями от концов.

Можно ли это сделать с помощью python вообще?

Размеры фрагментов ДНК (п.н.) - неразрезанная ДНК = 900

Разрез ДНК с EcoRI = 500, 350, 50

Разрез ДНК с HindIII = 600, 300

Разрез ДНК с BamHI = 400, 300, 200

Разрез ДНК с помощью EcoRI + HindIII = 350, 300, 200, 50

Разрез ДНК с помощью EcoRI + BamHI = 300, 250, 200, 100, 50

Разрез ДНК с помощью HindIII + BamHI = 300, 200, 100

Я обновил описание, надеюсь, оно стало более понятным.
Может быть, указывая в правильном направлении? Например, где найти возможные модули, которые делают это? Мы не все эксперты.
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что речь идет о программировании на питоне, а не о биологии или биоинформатике.

Ответы (2)

Я согласен с предыдущим ответом. Вы, конечно, можете написать решение на питоне, но сначала нужно сформулировать его в виде алгоритма. Это позволит нам предложить реальное решение.

Кроме того, я хотел бы предположить, что размещение этих вопросов на форуме, посвященном биоинформатике (biostars.org), может дать более точные отзывы.

Сначала я отвечу на этот вопрос, исходя из предположения, что вы изучаете или собираетесь изучать Python (возможно, потому, что вы слышали, что он стал популярен в биоинформатике) и хотите знать, можно ли его применить к этой проблеме. Ответ: почти наверняка да. Python — это язык программирования того типа, который можно использовать для автоматизации решения такого рода задач, так же как C, C++, Java, Perl.

Как бы вы это сделали? Сначала вы решите проблему вручную, проанализируете логику своего решения, а затем попытаетесь разработать общий алгоритм, основанный на этой логике, который может работать в самых разных случаях. Затем вы бы закодировали это на python (или что-то еще). Программе пришлось бы столкнуться с неточностями в реальных значениях длин фрагментов (ваши данные явно надуманные) и возможностью более чем одного фрагмента одинаковой длины (см. ниже). Если вы использовали python и хотели получить графический вывод, вам нужно было бы использовать библиотеку, которая предоставляет графику, поскольку python не поставляется с графикой, как это делает Java. Я понимаю, что есть некоторые. Однако это, безусловно, не самая простая задача программирования для новичка, в чем вы убедитесь, когда попытаетесь проанализировать логику ручного решения. И, конечно, данных может быть недостаточно для предоставления уникального решения.

Однако, поскольку это домашнее задание, вы также можете захотеть найти программу для проверки своего ответа и, возможно, не знаете, как это сделать. Я не знаю ни одного пакета для этого — возможно, это не «передовой». Итак, как это сделать?

Что бы я сделал, так это начал с отдельных дайджестов и нарисовал набор диаграмм для каждого из возможных расположений сайтов рестрикции в каждом случае (карандаш и бумага здесь хорошо работают). Затем я просматривал простейший двойной дайджест, выявлял уникальные фрагменты, которые также присутствовали в одиночных дайджестах и, следовательно, не разрезались вторым ферментом, и снова рисовал диаграммы возможностей для пар сайтов рестрикции. Будь осторожен; двойной дайджест HindIII/BamHI не дает в сумме 900, поэтому здесь должно быть два фрагмента одинакового размера. Когда вы вычертите все возможности, вероятно, останется только одна окончательная диаграмма ограничений, которая согласуется со всеми данными.

Если подумать, разработка алгоритма для решения этого общего случая была бы довольно сложной задачей. Если вы начинаете программировать, я бы сначала занялся более простыми алгоритмами. И эффективный алгоритм может использовать подход грубой силы, а не полуинтуитивный способ, которым мы решаем их вручную. Например, ваш алгоритм может генерировать все возможные карты для каждой из трех одиночных дайджестов, а затем генерировать все возможные карты для двойных дайджестов вместе с расчетом размера фрагментов, которые будут генерироваться двойными дайджестами. Они будут сравниваться с размером фактических фрагментов из двойного переваривания, исключая те возможности, которые не подходят. Его кодирование будет включать в себя написание методов/функций (или как они называются в python) для создания этих карт,

Спасибо за совет Дэвид. Это было домашнее задание, и я с ним справился. Мой вопрос о том, возможно ли использовать python, представляет интерес, поскольку я только начал его изучать.
ХОРОШО. Я отредактирую свой ответ, чтобы учесть это.
Python имеет хорошие строковые функции, как и Java и C++. Вы можете составить список ферментов рестрикции, возможно, карту или хэш-карту. Затем вы загружаете свою последовательность ДНК в виде строки и перебираете список ферментов, ищете сайт рестрикции в строке ДНК и возвращаете положение сайта в последовательности ДНК. Если строки не совпадают, возвращается -1. Поэтому, если вам просто нужен список, вы можете распечатать его на консоли или в текстовом файле. Если вам нужно изображение, вам нужно составить список сайтов рестрикции с типом фермента и местом разреза, а затем использовать pygame или что-то еще, чтобы нарисовать карту.
Начертить карту тоже не сложно. В случае линейности ДНК, состоящая из оснований B, представляет собой линию длиной в P пикселей. Таким образом, сайт рестрикции в позиции b рисуется в пикселе p, где p = P * b/B. При круглом изображении вам нужно вычислить пиксель по углу, где угол равен 360 * b/B.