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
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 : 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
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 : 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} - ?))
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.