• 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;

    « Perl répétitions des bases: aléas.Perl codons: m protéines n organismes »

  • Commentaires

    Aucun commentaire pour le moment

    Suivre le flux RSS des commentaires


    Ajouter un commentaire

    Nom / Pseudo :

    E-mail (facultatif) :

    Site Web (facultatif) :

    Commentaire :