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).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
ex de séquence : ---CTG-GG--GTGAAGTCGTAACAA-GGTAGCCGTAGGGGAAC
Ce que je dois récupérer, c'est l'index de départ et de fin du motif dans la séquence
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Je bloque dans le premier while
je ne sais pas comment calculer la position de C qui est le 5ième nucléotide à partir de la fin.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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} - ?))
Merci pour votre aide.
Partager