Feodor, 29.04.2010 21:07
Всем привет!
Подскажите кто-нибудь, как, имея текстовый файл п-ти ДНК человека, используя перл выудить из него п-ти, соответствующие определённым координатам (с такого-то по такой-то нуклеотид)? (Координат около 50.) Какой ещё программой может это будет сделать проще?
Спасибо
Guest, 29.04.2010 22:04
Perl очень хорош для таких нужд.
Советую считать всю последовательность ДНK в одну большую строку. И потом использовать substr. Но если геном и исначальная строка получается слишком большой, то придется пересчитывать координаты.
Feodor, 30.04.2010 00:33
Спасибо...
Будем разбираться.
Guest, 30.04.2010 01:07
(Guest @ 29.04.2010 22:04)

Perl очень хорош для таких нужд.
Советую считать всю последовательность ДНK в одну большую строку. И потом использовать substr.
Но если геном и исначальная строка полу4ается слишком большой, то придется пересчитывать координаты.
А не могли бы вы написать более подробно, как для человека до сего дня не сталкивающегося с программированием? Буду вам очень признателен ес.
Pryanik, 01.05.2010 03:16
$a="dna";
open (INFILE, $a) or die "Could not open the file: $a \n"; ## Открываете файл с ДНК, предположим что ДНК в формате fasta (1 большая последовательность)
## первая строка -- заголоволк
$text=<INFILE>; ## читаете первую строку, она не нужна
$seq=""; ## инициализируете вашу последовательность, пока в ней ничего нет
while(defined($text=<INFILE>)) ## читаете его построчно с начала до конца
{
chomp $text; ## убираете конец строки
$seq=$seq . $text; ## приписываете то что только что считали к тому что уже в последовательности
}
close (INFILE); ## закрываете доступ к файлу
## не знаю где у вас координаты, но вы можете считать их в... ну не знаю 2 списка
@Start={55,128, 555};
@Stop={75,148, 575};
$i=0;
$j=@Start;
while($i<$j)
{
$len=$Stop[$i]-$Start[$i] +1 ## вычисляете длинну фрагмента
$fr=substr $seq, ($Start[$i]-1), $len; ## берете подстроку
print ">", $i, "_fragment\n", $fr, "\n";## печатаете ее на экран в фаста формате
$i++;
}
Pryanik, 01.05.2010 03:27
А learning perl хорошая книга, с нуля за несколько дней можно начать маленькие скриптики, типа того как описан, стряпать, почитайте.
Guest, 01.05.2010 14:19
СПАСИБО!!!
Guest, 06.06.2010 16:41
У меня несколько похожий вопрос:
есть файл с большим количеством последовательностей в FASTA формате. Как сделать так, что бы к каждой отдельной последовательности можно было обращаться как к переменной? Лучше их в массив считать или есть другие способы? Подскажите, пожалуйста
Mike Shelk, 06.06.2010 19:45
Да, я бы это сделал в виде массива
Guest, 07.06.2010 10:11
а можно немного поподробнее
это должно быть что-нибудь вроде этого...?:
$filename = 'c:\...\file.txt';
open(FILE, $filename);
@file = <FILE>;
while (<FILE>) {
....;
}
тогда не совсем понимаю как обратиться, например, к пятой последовательности.
Pryanik, 07.06.2010 10:39
Либо массив либо hash. Если по именам обращаетесь, то лучше хеш, а если все равно все последовательности прогоняете, то все равно хеш или массив.
Pryanik, 07.06.2010 10:54
Так... это уже более длинные вопросы пошли...
Копирую от куда-то кусок просто, все закоменчено однострочно, т.ч. просто скопировать может не получиться, в общем разбирайтесь:
$infile="input_file_with_sequences";
open (INFILE, $infile) or die "Could not read from the file $infile \n"; ## open infiel to read
$seq=""; ## initialize variable $seq where we will store protein seqience fror every gene
%DATA=(); ## it is a hash-table where we will store id-sequence pairs, now it is empty
while ($text=<INFILE>) ## we opened an input file, now we are reading from it line by line till the end of the file, every time we put the line in to the $text variable
{
chomp $text; # remove end line character from $text
if($text=~/^>/) # check if the line we have read is a FASTA header
{
if($seq ne "") ## we are beyond the first protein and there is something in $seq
{
$DATA{$id}=$seq; ## collect the data
$id=substr $text, 1; ## redefine $id for the next protein
$seq = "";
}
else ## we are at the first gene and there is nothing in $seq yet
{
$id=substr $text, 1;
}
}
else
{
$seq = $seq . $text;
}
}
$DATA{$id}=$seq; ## collect info for the last gene
## print sequence with name XXX to the screen in fasta format
print ">XXX\n", $DATA{"XXX"}, "\n";
Pryanik, 07.06.2010 11:00
Прочитала в соседней теме небольшую дискуссию про перл вс питон.
Может кто-нибудь перловый скрипт что в предыдущем сообщении описан написать на питоне. Очень бы помогло моему транзишену!
Guest, 08.06.2010 12:40
спасибо, буду разбираться, уже понятнее )
Guest, 11.06.2010 14:59
>Может кто-нибудь перловый скрипт что в предыдущем сообщении описан написать >на питоне. Очень бы помогло моему транзишену!
#! /usr/bin/env /project/spw/bin/python
import sys
print """Usage: python get_fragments.py /file to be parsed/"""
source_file=sys.argv[1] # path to source file
data, seq, id={},'','' #variables initialization
for str in open(source_file, "r"): #read file line by line
if str[0]==">": #start new pair collecting
if id!='': data[id]=seq #insert previous pair
id=str.rstrip("\n")[1:] #new id
seq=''
else:
seq+=str.rstrip("\n") #sequence collecting
data[id]=seq #last pair
print data
2Pryanik: привет из берлина)
Guest, 11.06.2010 15:07
потерялись пробелы...
Pryanik, 14.06.2010 07:59
Слава, это ты? Или это не ты?
Это — лёгкая версия форума. Чтобы попасть на полную,
щелкните здесь.