#!/usr/bin/perl -w
# 2003/11/6 - I. Dutour

# Les variables permettant de stocker les séquences Query et Sbjct
my ($seq_query, $seq_sbjct);

# Parcourir le fichier BLAST ligne par ligne, en concatenant les
# séquences Query et Sbjct

# Ignorer le début
while(<>) {
    last
	if (/^>.*/);
}

while ($ligne = <>) {
    chomp $ligne;
    @mots = split /\s+/, $ligne;
    if ( $ligne =~ /^Query/ ) {
	$seq_query .= $mots[2];
    } elsif ( $ligne =~ /^Sbjct/ ) {
	$seq_sbjct .= $mots[2];
    } 
}

# Initialisation des motifs à rechercher
my @motifs = ('AACAA','GTGA','CAGCT','TCGTAT','GGAG','N');

# Et quand vous les trouvez, les ranger dans des tables de hachage
my (%nb_query, %nb_sbjct); 

# Rechercher et stocker les séquences
foreach $motif (@motifs) {
    $partseq = $seq_query;
    # tant que la sequence courante match avec l'expr reg :
    # on est sur le 1er match : on le compte, 
    # puis on avance à la position match + 1
    while ( $partseq =~ /$motif/i ) {
	$nb_query{$&}++ ; # $& est la chaine matchee par le =~
	#on ne regarde alors que le morceau de sequence qui commence à la position match +1
	$partseq = substr( $partseq, length($`)+1 );  #`
    }

    $partseq = $seq_sbjct;
    # tant que la sequence courante match avec l'expr reg :
    # on est sur le 1er match : on le compte, 
    # puis on avance à la position match + 1
    while ( $partseq =~ /$motif/i ) {
	$nb_sbjct{$&}++ ; # $& est la chaine matchee par le =~
	#on ne regarde alors que le morceau de sequence qui commence à la position match +1
	$partseq = substr( $partseq, length($`)+1 );  #`
    }
}

# Créer un rapport
print "Rapport Requete Séquence\n",
      "exécuté par ID le ", scalar localtime, "\n\n",
      "Note : N représente une donnée manquante\n",
      "dans la séquence chromosomique\n\n",
      "Longueur totale de la séquence requete : ",
      length $seq_query, " lettres\n", "Résultats pour Query :\n";

# Affiche les occurences dans Query
foreach $cle (sort @motifs) {
    print "\t << $cle >> trouvé $nb_query{$cle} fois.\n";
}

print "\nLongueur totale de la séquence <<Sbjct>> : ",
      length $seq_sbjct, " lettres\n", "Résultats pour Sbjct :\n";

# Affiche les occurences dans Sbjct
foreach $cle (sort @motifs) {
    print "\t << $cle >> trouvé $nb_sbjct{$cle} fois.\n";
}

