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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| #------------------------------------- AmorcesAvecMismatchFonction.pl -------------------------------------#
# Programmes qui prend en entrée
# 1) une séquence à cribler
# 2) un motif à rechercher
# 3) le nombre de nucléotides de l'extrémité 3' du motif devant être identique
# 4) un pourcentage d'identité global du motif (sur toute sa longueur)
# Une fenêtre de la taille du motif est glissée le long de la séquence afin d'y rechercher
# les positions où on retrouve des motifs similaires mais d'extrémité 3' identique.
# Les motifs trouvés ainsi que leur position sont stockés dans un tableau non indexé
#------------------------------------- AmorcesAvecMismatchFonction.pl -------------------------------------#
use strict;
use warnings;
# VERIFIER QUE LA CASSE SOIT IDENTIQUE ENTRE LA SEQUENCE ET L'AMORCE
my $Sequence = "CGTTCAGCTCATCG";
# 5'-amorce- 3'
my $Amorce = "ATC";
# seuil nécessaire d'identité afin d'être gardé
my $Seuil = 1;
# nombre de nucléotides devant être identiques en 3'
my $Num_Ident_E3 = 2;
my %Seq_Position = SUB_AmorcesAvecMismatch($Sequence, $Amorce, $Seuil, $Num_Ident_E3);
foreach my $Seq (%Seq_Position)
{
foreach my $Position (@{$Seq_Position{$Seq}})
{
print "$Seq $Position\n";
}
};
sub SUB_AmorcesAvecMismatch
{
# VERIFIER QUE LA CASSE SOIT IDENTIQUE ENTRE LA SEQUENCE ET L'AMORCE
my $Sequence = $_[0];
# 5'-amorce- 3'
my $Amorce = $_[1];
# seuil nécessaire d'identité afin d'être gardé
my $Seuil = $_[2];
# nombre de nucléotides devant être identiques en 3'
my $Num_Ident_E3 = $_[3];
my %Seq_Position;
my $L = length($Amorce);
my $N = length($Sequence) - length($Amorce) + 1;
my @A_Amorce = split('',$Amorce);
# partie 5' de l'amorce pouvant être variable
my $Amorce_E5 = $L-$Num_Ident_E3;
# partie 3' de l'amorce devant être identique à 100%
my $Amorce_E3 = substr($Amorce, $Amorce_E5, $Num_Ident_E3);
print "Sequence de l'amorce à rechercher = $Amorce\n";
print "Extrémite 3' obligatoire = $Amorce_E3\n";
print "Pourcentage d'identité nécessaire = $Seuil\n\n";
for(my$i=0; $i<$N; $i++)
{
my $Fenetre = substr($Sequence,$i,$L);
# extrémité 3' doit être identique
my $Fenetre_E3 = substr($Fenetre, $Amorce_E5, $Num_Ident_E3);
if($Fenetre_E3 eq $Amorce_E3)
{
my @A_Fenetre = split('',$Fenetre);
my $Score = 0;
for (my $j = 0; $j<@A_Amorce; $j++)
{
if($A_Amorce[$j] eq $A_Fenetre[$j])
{
$Score++;
}
}
$Score = sprintf("%.3f", $Score/$L);
if ($Score >= $Seuil)
{
push (@{$Seq_Position{$Fenetre}},$i);
}
}
}
return %Seq_Position;
} |
Partager