#!/usr/bin/perl -w # Aquest programa ha estat optimitzat per la Paula de Prado, Judit Faus, Patricia Jiménez i Anna Palomar. use strict; print "Benvingut al programa d'anotació de selenoproteines per Odobenus_rosmarus_divergens. Per continuar, premi enter\n"; <>; # INTRODUCCIÓ DE LA QUERY my $query; print "Introdueixi el nom de la query (sense extensió.fa):"; $query = ; chomp $query; #Canviar U per X my $s; my @v; my $l; my $ent; my $sor; open ($ent, "<$query/$query.fa"); open ($sor, ">$query/${query}_U.fa"); while (<$ent>){ @v = split ("",$_); $s = 0; $l = scalar(@v); while ($l > 0){ if ($v[$s] eq 'U'){ $v[$s] = 'X'; } $s = $s + 1; $l = $l - 1; } print $sor @v; } close ($ent); close ($sor); print "S'han canviat les U's per X en la query\n"; print "Prem enter per realitzar el blast\n"; <>; # REALITZACIÓ DEL BLAST if (-e "$query/BLAST/$query.blast") { print "Ja hi ha un blast per aquesta proteïna,so sorry\n"; } else { system ("mkdir $query/BLAST"); print "Fes un cafetó mentre es crea el blast, estarà tot correcte, don't worry be happy\n"; system ("blastall -p tblastn -i $query/${query}_U.fa -d /cursos/BI/genomes/2015/Odobenus_rosmarus_divergens/genome.fa -o $query/BLAST/$query.blast -m8 -e 0.0001"); print "Campió tens el teu Blast! Prem enter per continuar amb el FASTAFETCH\n"; <>; } #REALITZACIÓ FASTAFETCH if (-e "$query/FETCH"){ print "Ja hi ha un fetch per aquesta query, so sorry\n"; } else { system ("mkdir $query/FETCH"); system ("cut $query/BLAST/$query.blast -s -f 2 > $query/FETCH/regions.txt"); open ('regions', "<$query/FETCH/regions.txt"); my @v = ; close ('regions'); my $f = 0; for (@v){ chomp; system ("fastafetch /cursos/BI/genomes/2015/Odobenus_rosmarus_divergens/genome.fa /cursos/BI/genomes/2015/Odobenus_rosmarus_divergens/genome.index '$_' > '$query/FETCH/$_.txt'"); $f = $f + 1; } print "Ets molt crack i tens els Fetch on hi ha els hits,en són $f\n"; } print "Prem enter per fer els fastasubseq\n"; <>; #REALITZACIÓ FASTASUBSEQ my $pos_start; my $pos_stop; my $start; my $length; my $numcaracter; my $numregiocar; my $longdef; my $i; my %hits; $i = 0; if ( -e "$query/SUBSEQ") { print "Ja tens els teus hits YO!\n"; } else { system ("mkdir $query/SUBSEQ"); open ('BLAST', "<$query/BLAST/$query.blast"); while (){ #Tall de cada línia del blast chomp; next if ($_ =~ m/^#/); my @blast = split ("\t", $_); # Establiment de les posicions d'inici i final. Es té en compte si el sentit és positiu o negatiu. if ($blast[8] < $blast[9]) { $pos_start = $blast[8]; $pos_stop = $blast[9]; } else { $pos_start = $blast[9]; $pos_stop = $blast[8]; } if (exists($hits{$blast[1]})){ # Actualització de les posicions start i stop. if ($hits{$blast[1]}{"START"} > $pos_start){ $hits{$blast[1]}{"START"} = $pos_start; } if ($hits{$blast[1]}{"STOP"} < $pos_stop){ $hits{$blast[1]}{"STOP"} = $pos_stop; } } else{ # Inicialització de les posicions d'inici i final. $hits{$blast[1]}{"START"} = $pos_start; $hits{$blast[1]}{"STOP"} = $pos_stop; } # Guardem el nombre de caràcters total de cada fitxer fetch a l'arxiu caracterseq.txt system ("wc '$query/FETCH/${blast[1]}.txt' -m > '$query/SUBSEQ/caracterseq.txt' "); system ("cut -d ' ' -f1 '$query/SUBSEQ/caracterseq.txt' > '$query/SUBSEQ/numcaracter.txt' "); #Guardem el nombre caràcters del nom de la regió a l'arxiu numregiocar.txt system ("grep '>' './$query/FETCH/${blast[1]}.txt' > '$query/SUBSEQ/nomregio.txt' "); system ("wc '$query/SUBSEQ/nomregio.txt' -m > '$query/SUBSEQ/caracternom.txt' "); system ("cut -d ' ' -f1 '$query/SUBSEQ/caracternom.txt' > '$query/SUBSEQ/numregiocar.txt' "); #Posem la longitud del scaffold amb el nom a la variable $numcaracter open ('caracter', "<$query/SUBSEQ/numcaracter.txt"); my $numcaracter = ; close ('caracter'); $numcaracter = $numcaracter - 1; #Posem la longitud del nom de la regió a la variable $numregiocar open ('regcaracter', "<$query/SUBSEQ/numregiocar.txt"); my $numregiocar = ; close ('regcaracter'); $numregiocar = $numregiocar - 1; #Posem la longitud definitiva del scaffold en la variable $longdef $longdef = $numcaracter - $numregiocar; # Es procedeix a esborrar tots els arxius intermitjos generats system ("rm '$query/SUBSEQ/caracterseq.txt' "); system ("rm '$query/SUBSEQ/numcaracter.txt' "); system ("rm '$query/SUBSEQ/nomregio.txt' "); system ("rm '$query/SUBSEQ/caracternom.txt' "); system ("rm '$query/SUBSEQ/numregiocar.txt' "); #Establim el marge de 25000 i Es comparar $start + $length amb la longitud del scaffold sense el nom, i si és més gran farem que $length adquireixi el valor de (longitud de l'scaffold menys $stop). $start = $pos_start - 25000; if ($start < 0) { $start = 0; } $length = $pos_stop - $pos_start + 25000; if ($length > $longdef) { $length = $longdef - $pos_start; } # Crida de la comanda Fastasubseq system ("fastasubseq '$query/FETCH/${blast[1]}.txt' $start $length > '$query/SUBSEQ/${blast[1]}_${i}_subseq.txt' "); $i = $i + 1; } close (BLAST); } print "Ara sí que ho has petat,els teus hits estan a la carpeta SUBSEQ\n"; print "Prem enter si ets un valent i vols descobrir si els teus hits codifiquen per una proteïna\n"; <>; #REALITZACIÓ DE L'EXONERATE my $file; my $subseq_file; if (-e "$query/EXONERATE"){ print "Ja s'ha fet exonerate per aquesta query\n"; } else { system ("mkdir $query/EXONERATE"); system ("mkdir $query/EXONERATE/GFF"); system ("mkdir $query/EXONERATE/cDNAGFF"); system ("mkdir $query/EXONERATE/cDNAFA"); system ("mkdir $query/EXONERATE/TRANSLATED"); opendir (SUBSEQ, "$query/SUBSEQ/"); while ($file = readdir (SUBSEQ)){ next if ($file =~ m/^\./); chomp $file; $subseq_file = $file; $subseq_file =~ s/\_subseq.txt//g; chomp $subseq_file; system ("exonerate -m p2g --showtargetgff -q '$query/${query}_U.fa' -t '$query/SUBSEQ/$file' --exhaustive yes > '$query/EXONERATE/GFF/$subseq_file.gff'"); system ("egrep -w exon '$query/EXONERATE/GFF/$subseq_file.gff' > '$query/EXONERATE/cDNAGFF/${subseq_file}_cDNA.gff'"); system (" fastaseqfromGFF.pl '$query/SUBSEQ/$file' '$query/EXONERATE/cDNAGFF/${subseq_file}_cDNA.gff' > '$query/EXONERATE/cDNAFA/${subseq_file}_cDNA.fa' "); system (" fastatranslate '$query/EXONERATE/cDNAFA/${subseq_file}_cDNA.fa' > '$query/EXONERATE/TRANSLATED/${subseq_file}_aa.fa'"); } } print "Ja tens els teus cDNA's done i la seva traducció, sensi\n"; print "Prem enter per continuar amb T-coffee\n"; <>; #REALITZACIÓ T-COFFEE my $y = 1; my $arxiu; my $tcoffee_file; if (-e "$query/TCOFFEE/RESULTS"){ print "Ja has fet el teu coffee, ara ves a pel cafetó\n"; } else { system ("mkdir $query/TCOFFEE"); system ("mkdir $query/TCOFFEE/TRANSLATED"); system ("mkdir $query/TCOFFEE/RESULTS"); opendir (TRADUITS, "$query/EXONERATE/TRANSLATED/"); while ($arxiu = readdir(TRADUITS)){ next if ($arxiu =~ m/^\./); chomp $arxiu; $tcoffee_file = $arxiu; $tcoffee_file =~ s/\_aa.fa//g; chomp $tcoffee_file; system ("fastatranslate -F 1 '$query/EXONERATE/cDNAFA/${tcoffee_file}_cDNA.fa' > '$query/TCOFFEE/TRANSLATED/${query}_${y}.fa' "); #Canviar "*" per X my $p; my @f; my $r; my $entrada; my $sortida; open ($entrada, "<$query/TCOFFEE/TRANSLATED/${query}_${y}.fa"); open ($sortida, ">$query/TCOFFEE/TRANSLATED/${query}_${y}_X.fa"); while (<$entrada>){ @f = split ("",$_); $p = 0; $r = scalar(@f); while ($r > 0){ if ($f[$p] eq '*'){ $f[$p] = 'X'; } $p = $p + 1; $r = $r - 1; } print $sortida @f; } close ($entrada); close ($sortida); print "S'han canviat els * per X en la query\n"; system ("t_coffee $query/${query}_U.fa '$query/TCOFFEE/TRANSLATED/${query}_${y}_X.fa' > $query/TCOFFEE/RESULTS/${query}_${y}_tcoffee.txt "); $y = $y + 1; } } print "Ja tens els resultats del T-coffee!!!!!!¡¡¡¡¡¡¡ Ja pots començar a interpretar els resultats\n";