Программа Perl печатает полные последовательности файлов .fasta в файл, но пытается добиться определенного количества нуклеотидов по отношению к генам - PullRequest
1 голос
/ 18 марта 2012

Пока мне удалось немного лучше понять Perl, и это облегчение, и я хочу поблагодарить вас, ребята.В настоящее время я все еще работаю над другим аспектом, в котором мне нужно прочитать файл .fasta и найти все нуклеотиды G и C, а затем создать файл с разделителями табуляции.

Это были мои сообщения за последние несколько днейв хронологическом порядке:

  1. Как мне усреднить значения столбца из данных, разделенных табуляцией ... (решено)
  2. Почему я не вижу вычисленных результатов в моем выходном файле? (решено)
  3. Использование файла .fasta для вычисления относительного содержания последовательностей
  4. Чтение последовательностей .fasta для извлечения данных о нуклеотидах, а затем ... (Пост, предшествующий этому)

Последний запрос все еще обрабатывается, но я добился определенного прогресса.

Некоторый фон, файл .fasta выглядит примерно так:

>label
sequence
>label
sequence
>label
sequence

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

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

#!/usr/bin/perl -w
# This script reads several sequences and computes the relative content of G+C of each sequence.

use strict; 

my $infile = "Lab1_seq.fasta";                               # This is the file path
open INFILE, $infile or die "Can't open $infile: $!";        # This opens file, but if file isn't there it mentions this will not open
my $outfile = "Lab1_SeqOutput.txt";             # This is the file's output
open OUTFILE, ">$outfile" or die "Cannot open $outfile: $!"; # This opens the output file, otherwise it mentions this will not open

my $sequence = ();  # This sequence variable stores the sequences from the .fasta file
my $GC = 0;         # This variable checks for G + C content

my $line;                             # This reads the input file one-line-at-a-time

while ($line = <INFILE>) {
    chomp $line;                      # This removes "\n" at the end of each line (this is invisible)

    if($line =~ /^\s*$/) {         # This finds lines with whitespaces from the beginning to the ending of the sequence. Removes blank line.
        next;

    } elsif($line =~ qr(^\s*\#/)) {        # This finds lines with spaces before the hash character. Removes .fasta comment
        next; 
    } elsif($line =~ /^>/) {           # This finds lines with the '>' symbol at beginning of label. Removes .fasta label
        next;
    } else {
        $sequence = $line;
    }

    $sequence =~ s/\s//g;               # Whitespace characters are removed
    print OUTFILE $sequence;
}

Код теперь печатает в текстовый файл всю последовательность без пробелов.Единственная проблема в том, что я не знаю, где начинались или заканчивались последовательности, поэтому я не уверен, какие последовательности применимы к каждому гену.Хотя кодон стоп / старт должен дать мне указание.Учитывая это, как бы я изменил / добавил код, чтобы вычислить количество G + C в последовательностях, а затем распечатал их в файл с разделителями табуляции с именами генов, связанных с их соответствующим содержанием G / C?

Я с нетерпением жду ответа от кого-то, кто может дать какое-то руководство, аналогичное приведенному выше коду, относительно того, как найти G / C и затем подсчитать соответствующие значения.

Ответы [ 2 ]

2 голосов
/ 18 марта 2012

Следующие ссылки могут быть полезны. Уже написано много кода, и Bio :: SeqIO и Bio :: Seq , кажется, часто обсуждаются. Есть веб-сайт для BioPerl , но я не знаком с ним. Там есть примеры кода и другая информация. FAQ также полезно.

Вот пример из документации Bio :: SeqIO.

use Bio::SeqIO;

$in  = Bio::SeqIO->new(-file => "inputfilename" ,
                       -format => 'Fasta');
$out = Bio::SeqIO->new(-file => ">outputfilename" ,
                       -format => 'EMBL');

while ( my $seq = $in->next_seq() ) {
        $out->write_seq($seq);
}
1 голос
/ 18 марта 2012

Я сам работаю с FASTA файлами. Итак, я чувствую твою боль.

Чтобы ответить на ваш повторный вопрос о применимости меток к каждой последовательности: каждая метка, предшествующая информации о последовательности, должна относиться к следующей последовательности, если файл отформатирован правильно. Таким образом, вы должны проанализировать файл от начала до конца следующим образом:

>label1
sequence1
>label2
sequence2
>label3
sequence3
...

... где каждая метка указывает новую информацию о последовательности, которой следует следовать. Вам также следует игнорировать строки, начинающиеся с точки с запятой (;), поскольку они также указывают на устаревшие поля комментариев.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...