-
Perl répétition des bases: chromosome
17.11.15 Paris
Programme en perl pour compter les bases répétées
#!/usr/local/bin/perl mekki 17.11.15 Comptage de séquences de bases répétées
#
# Résultat: KEGG donne 4 641 652 paires de bases. Chercher dans organismes de KEGG eco (Escherichia Coli).
#
#3 50279 50147 31599 31526 490653 −−−−> Il y a 31 526 séquences de ggg.n t a c g 1 572,076 575,694 684,256 684,448 2,516,474 2 155,479 155,226 185,070 183,945 1,359,440 3 50,279 50,147 31,599 31,526 490,653 4 15,523 15,380 6,067 6,027 171,988 5 5,929 5,810 1,086 1,056 69,405 6 1,929 1,891 153 154 24,762 7 475 472 31 25 7,021 8 97 109 7 3 1,728 9 11 7 1 0 171 10 0 0 0 1 10 4,641,652 La séquence de base originale est celle de NCBI, eco par exemple, et je copie le fichier FASTA dans un document .txt. Chaque ligne contient 70 bases. Pour accéder à eco NCBI je passe par KEGG2 organism et clique sur la séquence du chromosome.
#
# ** perl **
@Valeurs = ();
# Initialisation du tableau
foreach $b (2..5) {foreach $n (2..21) { $Valeurs [$b] [$n] = 0;}} # ********* augmenter les bornes supérieures si nécessaire: séquences spécifiques ************
$NbElem = @Valeurs;
# ********* Changer le fichier qui doit être en txt ************
$filename = "dnaecoli.txt";
my $tl = -s $filename;
print ("$tl total \n"); # *Total sur le disque différent de KEGG ***********
my $i = 0, $k=0;
my @m= (1,2,3,4);
my $j=0;
my @p = (0)x4;
# ********* Comptage du 1er caractère pour les chromosomes circulaires ************
open ($fh, '<', $filename);
$lis1 = <$fh>;
$car = substr($lis1,0,1 );
$j=1;
for ($i=1; $i<=70; $i+=1) { # 70 à changer si on doute que le 1er caractère est sur une séquence plus grande ***********
$lu = substr($lis1,$i,1 );
if ($lu eq $car) { $j+=1;}
else { $i=70;}}
#print ( $car, " ", $j, "\n");
$d=$j;
close $fh;
$i=0;
$j=0;
# ********* Comptage de toutes les séquences répétitives. A compléter pour les séquences spécifiques. ************
open ($fh, '<', $filename);
while( defined( $lis = <$fh> ) ) {
chomp $lis;
while ($i <= 70) { # 70 à remplacer par la longueur total du chromosome si on a un seul enregistrement ***********
$lu = substr($lis,$i,1 );
if( $lu eq "T" ) { #("1","2","3","4"); pour les aléas. ************
if($p[1] == 0) {
foreach $j (@m, $m!=1) {
if( $p[$j] !=0 ) { $n=$p[$j]+1; $b=$j+1;
$Valeurs [$b] [$n] +=1; $p[$j]=0; } }
$p[1]+=1;}
else { $p[1]+=1; }}
if( $lu eq "A" ) {
if($p[2] == 0) {
foreach $j (@m, $m!=2) {
if( $p[$j] !=0 ) { $n=$p[$j]+1; $b=$j+1;
$Valeurs [$b] [$n] +=1; $p[$j]=0; }}
$p[2]+=1;}
else {$p[2]+=1;}}
if( $lu eq "C" ) {
if($p[3] == 0) {
foreach $j (@m, $m!=3) {
if( $p[$j] !=0 ) { $n=$p[$j]+1; $b=$j+1;
$Valeurs [$b] [$n] +=1; $p[$j]=0; }}
$p[3]+=1;}
else {$p[3]+=1;}}
if( $lu eq "G" ) {
if($p[4] == 0) {
foreach $j (@m, $m!=4) {
if( $p[$j] !=0 ) { $n=$p[$j]+1; $b=$j+1;
$Valeurs [$b] [$n] +=1; $p[$j]=0; }}
$p[4]+=1;}
else {$p[4]+=1;}}
$i+=1;};
$i = 0;};
foreach $j (@m) {
if( $p[$j] !=0 ) { $n=$p[$j]+1; $b=$j+1;
$Valeurs [$b] [$n] +=1; $p[$j]=0; } };
#print ( $Valeurs [$b] [$n], " ", $b, " ", $n, "\n");
#
# ********* Ce qui suit: uniquement si le chromosome est circulaire. A compléter pour les séquences spécifiques. ************
#
@c=("T","A","C","G"); #@c=("1","2","3","4"); pour les aléas. ************
foreach $k (0..3) {
#print ( $c[$k], " ", $b, "\n");
if ($c[$k] eq $car) { $x=$k+2;}};
if ( $x == $b ) {
$Valeurs [$b] [$n] -=1;
#print ( $Valeurs [$b] [$n], "\n");
$n = $n + $d;
#print ( $b, " ", $n, "\n");
$Valeurs [$b] [$n] +=1;
$n = $d+1;
#print ( $b, " ", $n, "\n");
$Valeurs [$b] [$n] -=1;}
#
# ********* Fin de ce qui suit uniquement si le chromosome est circulaire. ************
#
print ("n t a c g \n");
foreach $k (2..21) { $j=$k-1; print ( $j," ", $Valeurs [2] [$k]," ", $Valeurs [3] [$k]," ", $Valeurs [4] [$k]," ", $Valeurs [5] [$k], "\n")};
close $fh;
-
Commentaires