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
| #!/usr/local/bin/perl
use strict;
use warnings;
use Data::Dumper;
#----------------------------------------- IdentiteAmorces.pl -----------------------------------------#
# contient en clé la séquence et en valeur son numéro de référence
my %Hash = (
"ATGTCCTGTCCGTG" => 0,
"ATCTCCTGTCCGTG" => 1,
"ATGTCCTGGACGTG" => 2,
"ATCTCCTGGACGTG" => 3,
"ATCTCCTGTCCGTA" => 4
);
# Pour chaque couple possible d'amorces, calcul du nombre de nucléotides commun
# Chaque amorce mise dans une array par un split @Amorce_ref et @Amorce
my %Hash_Identite; # clef : séquence de référence et en valeur les amorces étant une identité la plus proche
my %TabComp_Identite; # $TabComp_Identite{$Num_seq}{$Seq_ref} = @ListeAmorcesAssociees
foreach my $Seq_ref (keys %Hash)
{
my @Amorce_ref = split ("", $Seq_ref);
my @Liste_Amorces; # liste des amorces ayant un pourcentage d'identité supérieur au seuil
foreach my $Seq (keys %Hash)
{
unless ($Seq eq $Seq_ref)
{
my $Identite = getCommonLettersCount($Seq_ref, $Seq);
my $Seuil = @Amorce_ref-2;
if ($Identite>$Seuil)
{push (@Liste_Amorces, $Seq);}
}
}
#foreach my $val (@Liste_Amorces){print $val."\n\n";}
$TabComp_Identite{$Hash{$Seq_ref}}{$Seq_ref}= \@Liste_Amorces;
$Hash_Identite{$Seq_ref}=\@Liste_Amorces;
}
# $TabComp_Identite{$Num_seq}{$Seq_ref}
foreach my $Num_seq (keys %TabComp_Identite)
{
foreach my $Seq_ref (keys %{$TabComp_Identite{$Num_seq }})
{
my $Compte_Amorces_Associees = @{$TabComp_Identite{$Num_seq }{$Seq_ref}};
print ("N° $Num_seq\t$Seq_ref => $Compte_Amorces_Associees amorces associées\n");
}
}
# print Dumper %TabComp_Identite;
# print Dumper %Hash_Identite;
close;
sub getCommonLettersCount
{
my ($string1, $string2) = @_;
my $length1 = length($string1);
my $length2 = length($string2);
my $minlength = ($length1 > $length2) ? $length2 : $length1;
my $count = 0;
for (my $pos = 0; $pos < $minlength; $pos++) {
my $char1 = substr($string1, $pos, 1);
my $char2 = substr($string2, $pos, 1);
$count += ($char1 eq $char2);
}
return $count;
} |
Partager