découper une séquence en tronçons
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| #!/usr/local/bin/perl
use strict;
use warnings;
=h
on va couper la séquence par tronçons de $window nucléotides (sans point)
On doit garder les index de ces nucléotides
=cut
# clé : id valeurs : array contenant la séquence
my %h_seq;
# position dans l'alignement du 1ier nucléotide de la séquence
my %h_start;
# position dans l'alignement du dernier nucléotide de la séquence
my %h_end;
my $k = 'Escherichia_coli';
my $s = '---CTG-GG--GTGAAGTCGTAACAA-GGTAGCCGTAGGGGAACCTGCGGCTGGATCACCTCCTTA--ACGAAAGATT---GACGATTGGTAAGAATCCACAACAAGTTGTTC-----TTCA-------';
$s =~ s/[-~]/\./g;
if($s =~ /^\.*([a-z])[.a-z]+?([a-z])\.*$/i){
# position dans l'alignement du 1ier nucléotide de la séquence
$h_start{$k} = $-[1]; # = 3 (C)
# position dans l'alignement du dernier nucléotide de la séquence
$h_end{$k} = $-[2]; # = 18 (A)
}
# clé : id valeurs : array contenant la séquence
@{$h_seq{$k}} = split(//, $s);
# taille de la fenêtre du criblage
my $window = 5;
# position dans la séquence
my $index = $h_start{$k};
# motif de $window nucléotide
my $pattern= '';
# index de départ de ce motif dans la séquence alignée
my $pattern_start;
# index de fin de ce motif dans la séquence alignée
my $pattern_end;
# on doit s'arrêter $window nucléotides (sans point) avant la fin de la séquence
# dans cet exemple ci au C de : C-----TTCA-------
while ($index < ($h_end{$k} - ?)){
while(length($pattern)<$window){
if(!$pattern){
$pattern_start = $index;
}
if($h_seq{$k}[$index] !~ /\./){
$pattern .= $h_seq{$k}[$index];
}
if(length($pattern)==5){
$pattern_end = $index;
$pattern = '';
}
$index++;
}
}
print $pattern."\t".$pattern_start."\t".$pattern_end."\n";
# premier pentanucléotide : CTGGG 3 8
# second pentanucléotide : TGGGG 4 11
# 3ième pentanucléotide : GGGGT 5 12 |
J'ai une séquence que j'aimerais découper en tronçons de 5 nucléotides + x points (compris entre ces 5 nucléotides).
ex de séquence : ---CTG-GG--GTGAAGTCGTAACAA-GGTAGCCGTAGGGGAAC
Code:
1 2 3 4
| # pentanuc départ fin séquence réelle
# premier pentanucléotide : CTGGG 3 8 CTG-GG
# second pentanucléotide : TGGGG 4 11 TG-GG--G
# 3ième pentanucléotide : GGGGT 5 12 G-GG--GT |
Ce que je dois récupérer, c'est l'index de départ et de fin du motif dans la séquence
Je bloque dans le premier while
Code:
1 2 3
| # on doit s'arrêter $window nucléotides (sans point) avant la fin de la séquence
# dans cet exemple ci au C de : C-----TTCA-------
while ($index < ($h_end{$k} - ?)) |
je ne sais pas comment calculer la position de C qui est le 5ième nucléotide à partir de la fin.
Merci pour votre aide.