#!/usr/bin/perl -w use strict; #Midgard #Programa en perl creat per Moises Coll, Carla Conejo, Marta Vila, Paula Ortiz, Anna Molinet #Si vols mes informacio del nom del programa, pots anar a la seguent pagina web: http://es.wikipedia.org/wiki/Midgard ########################################################## FITXER AMB PROT ########################################################### my @proteines; my $protname; my $masterfile; my $mfile; my $cont; print "Dona el nom del fitxer que conte la llista de proteianes: \n"; $masterfile = ; chomp ($masterfile); open ($mfile, "<$masterfile") || die "ERROR: el fitxer amb la llista que has introduit no existeix\n"; $cont = 0; while (<$mfile>) { chomp ($_); $proteines[$cont] = $_; $cont = $cont + 1; } close ($mfile); print "Les proteines que he trobat al document son: @proteines \n"; foreach (@proteines){ chomp ($_); $protname = $_; ########################################################## CANVIAR U PER X ########################################################### my @squery; my $lquery; my $aminoacid; my $entrada; my $sortida; my $ent; my $sor; my $line; $entrada = $protname; $sortida = "N_$entrada"; chomp ($sortida); print "\n"; open ($ent, "<$entrada") || die "ERROR: el fitxer amb el nom de la query que has introduit no existeix\n"; open ($sor, ">$sortida") || die "ERROR: el fitxer amb el nom de la query que has introduit no existeix\n"; $line = 0; while (<$ent>) { @squery = split(//,$_); $lquery = scalar(@squery); $aminoacid = 0; while ($lquery > 0 && $line != 0) { if ($squery[$aminoacid] eq "U") { $squery[$aminoacid] = "X"; } if ($squery[$aminoacid] eq "@") { $squery[$aminoacid] = ""; } if ($squery[$aminoacid] eq "#") { $squery[$aminoacid] = ""; } if ($squery[$aminoacid] eq "%") { $squery[$aminoacid] = ""; } $aminoacid = $aminoacid + 1; $lquery = $lquery - 1; } if ($line == 0) { $line = $line + 1; } print $sor @squery; } close ($ent); close ($sor); system ("mv $entrada $entrada\_"); system ("mv $sortida $entrada"); ############################################################## BLAST ##################################################################### my $nomblast; my $nomblastindex; my $pesfitxerblast; $nomblast = "blast_$protname"; $nomblastindex = "index_$nomblast"; $pesfitxerblast = -s $nomblast; if ((-e $nomblast) && ($pesfitxerblast > 0)) {} # Si el fitxer existeix I el fitxer esta ple else { # Si el fitxer NO existeix o existeix pero esta buit print "S'esta fent el blast de $protname i el seu index; roman a l'espera, pot trigar uns segons... \n"; system('/bin/bash', '-c', qq(blastall -p tblastn -i "$protname" -d /cursos/BI/genomes/vertebrates/2014/Thunnus_orientalis/genome.fa -o "$nomblast" -m8 -e0.01)); system('/bin/bash', '-c', qq(cut -f 2 "$nomblast" | sort | uniq > "$nomblastindex")); system('/bin/bash', '-c', qq(blastall -p tblastn -i "$protname" -d /cursos/BI/genomes/vertebrates/2014/Thunnus_orientalis/genome.fa -o "full_$nomblast" -e0.01)); } ############################################################ IndexDB #################################################################### my $nomindex; my $pesfitxerindex; $nomindex = "index_databaseTo"; $pesfitxerindex = -s $nomindex; if ((-e $nomindex) && ($pesfitxerindex > 0)) {} # Si el fitxer existeix I el fitxer esta ple else { print "S'esta fent el l'index de la base de dades; roman a l'espera, pot trigar uns segons... \n"; system('/bin/bash', '-c', qq(fastaindex "/cursos/BI/genomes/vertebrates/2014/Thunnus_orientalis/genome.fa" "$nomindex")); } ################################################### Llistar els contics del blast ####################################################### my $idbl; my @llistacontigs; my $lineindex; open ($idbl, "<$nomblastindex") || die "ERROR: L'index del blast no existeix\n"; $lineindex = 0; while (<$idbl>) { chomp($_); $llistacontigs[$lineindex] = $_; $lineindex = $lineindex + 1; } close ($nomblastindex); ############################################################# FASTAFETCH ################################################################ my $nlcontigs; my $nl1; my $contig; $nlcontigs = scalar(@llistacontigs); $contig = $nlcontigs -1; $nl1 = $nlcontigs; while ($nl1 > 0){ system('/bin/bash', '-c', qq(fastafetch "/cursos/BI/genomes/vertebrates/2014/Thunnus_orientalis/genome.fa" "$nomindex" "$llistacontigs[$contig]" > "contig_$nl1\_$protname")); $contig = $contig - 1; $nl1 = $nl1 - 1; } ############################################################## EXONERATE ################################################################# my $nomexonerate; my $nomexonerateprevi; my $pesfitxerexonerate; my $nl2; $nl2 = $nlcontigs; $nomexonerate = "cDNA_contig_$nl2\_$protname\_exonerate.gff"; $nomexonerateprevi = "contig_$nl2\_$protname\_exonerate.gff"; $pesfitxerexonerate = -s $nomexonerate; if ((-e $nomexonerate) && ($pesfitxerexonerate > 0)) {} # Si el fitxer existeix I el fitxer esto ple (nomes mirara que existeixi un) else { # Si el fitxer NO existeix o el fitxer NO esta ple while ($nl2 > 0){ $nomexonerate = "cDNA_contig_$nl2\_$protname\_exonerate.gff"; $nomexonerateprevi = "contig_$nl2\_$protname\_exonerate.gff"; print "S'esta fent el l'exonerate de $protname ; roman a l'espera, pot trigar uns segons... \n"; system('/bin/bash', '-c', qq(exonerate -m p2g --showtargetgff -q "$protname" -t "contig_$nl2\_$protname" --exhaustive yes > "$nomexonerateprevi")); system('/bin/bash', '-c', qq(cat "$nomexonerateprevi" | egrep -w exon > "$nomexonerate")); $nl2 = $nl2 - 1; } } ############################################################# FASTASEQFROMGFF ############################################################ my $nl3; $nl3 = $nlcontigs; while ($nl3 > 0){ $nomexonerate = "cDNA_contig_$nl3\_$protname\_exonerate.gff"; system('/bin/bash', '-c', qq(fastaseqfromGFF.pl "contig_$nl3\_$protname" "$nomexonerate" > "genepredict_$nl3\_$protname")); $nl3 = $nl3 - 1; } ###################################################### rm genewise&exonerate&contig ###################################################### #system('/bin/bash', '-c', qq(rm *contig*)); ############################################################## FASTATRANSLATE ############################################################ my $nl4; $nl4 = $nlcontigs; while ($nl4 > 0){ system('/bin/bash', '-c', qq(fastatranslate -f "genepredict_$nl4\_$protname" -F 1 > "protpredict_$nl4\_$protname")); $nl4 = $nl4 - 1; } ################################################################## T_COFEE ############################################################## my $nl5; my $nomtcofee; my $pesfitxertcofee; $nl5 = $nlcontigs; $nomtcofee = "t_cofee_$nl5\_$protname"; $pesfitxertcofee = -s $nomtcofee; if ((-e $nomtcofee) && ($pesfitxertcofee > 0)) {} # Si el fitxer existeix I el fitxer esta ple (nomes mirara que existeixi un) else { # Si el fitxer NO existeix o el fitxer NO esta ple print "S'esta fent el t_cofee de $protname ; roman a l'espera, pot trigar uns segons... \n"; while ($nl5 > 0){ $nomtcofee = "t_cofee_$nl5\_$protname"; system('/bin/bash', '-c', qq(t_coffee $protname protpredict_$nl5\_$protname \>\ $nomtcofee)); $nl5 = $nl5 - 1; } } ############################################################## GENEWISE ################################################################## my $nomgenewise; my $pesfitxergenewise; my $nl6; $nl6 = $nlcontigs; $nomgenewise = "contig_$nl6\_$protname\_genewise"; $pesfitxergenewise = -s $nomgenewise; if ((-e $nomgenewise) && ($pesfitxergenewise > 0)) {} # Si el fitxer existeix I el fitxer esta ple (nomes mirara que existeixi un) else { # Si el fitxer NO existeix o el fitxer NO esta ple while ($nl6 > 0){ $nomgenewise = "contig_$nl6\_$protname\_genewise"; print "S'esta fent el el genewise de $protname ; roman a l'espera, pot trigar uns segons... \n"; system ("genewise -cdna -pep -pretty -gff -both $protname contig_$nl6\_$protname > $nomgenewise"); $nl6 = $nl6 - 1; } } ######################################################### Gruardar a la carpeta ########################################################## my $foldername; $foldername = "magodeoz"; system('/bin/bash', '-c', qq(mkdir $foldername)); system('/bin/bash', '-c', qq(mv *$protname* $foldername)); system('/bin/bash', '-c', qq(mv $foldername $protname)); } ################################################################# FI #################################################################### print "\n"; print "\n"; print "\n"; print "El programa ha finalitzat el seu proces amb exit\n";