#!/usr/bin/perl ########################################################## #Script para realizar busquedas en bases de secuencias de ADN o proteinas #Diego Mauricio Riaño Pachón, Instituto de Biotecnología Universidad Nacional de Colombia, 2002 # #Es una version modificada de: # #Script to do blast searches on database sequences for WWW #Steven Jones, Sanger Centre, 1995. ########################################################## &output_header; #Recibir los datos desde un formulario read(STDIN, $entrada, $ENV{'CONTENT_LENGTH'}); #descomponer el mensaje recibidor por el formulario y asignar los valores a las variables correspondientes foreach (split(/\&/,$entrada)){ ($clave,$valor)=split(/=/,$_); $parametro{$clave}=$valor; } #eliminar caracteries extraños en las variables de interes # if ($parametro{formatosecuencia} eq "textoplano"){ $parametro{secuencia}=~s/%3E/>/; $parametro{secuencia}=~s/%0D%0A//g; $parametro{secuencia}=~s/>/\n/g; $parametro{secuencia}=~s/%/\n/g; $parametro{secuencia}=~s/[0123456789]//g; $parametro{secuencia}=~s/ //g; $parametro{secuencia}=~s/\+//g; } else { if ($parametro{secuencia}=~/%/){ print "

Con el formato seleccionado solo puede ingresar una línea en el cuadro de texto

"; exit; } else { $parametro{secuencia}=~s/\+//g; } } $parametro{basededatos}=~s/%2F/\//g; $parametro{basededatos}=~s/%3A/:/g; $parametro{basededatos}=~s/\+/ /g; $parametro{email}=~s/%40/@/g; #Revisar que el tipo de programa seleccionado corresponda con la base de datos seleccionada if ($parametro{programa} eq "") { print "

Error: No especificó el programa Blast!!!!<\H2>"; exit; } elsif (($parametro{programa} eq "blastp" || $parametro{programa} eq "blastx") && ($parametro{basededatos}!~/^swissprot/ && $parametro{basededatos}!~/^swissprot/)) { print "

Con el programa \"$parametro{programa}\" debe realizar la búsqueda en las base de datos de proteínas (SwissProt o SwissProt/TrEMBL/TrEMBL_NEW/Varsplic)!!!!<\H2>"; exit; } elsif (($parametro{programa} eq "blastn" || $parametro{programa} eq "tblastn" || $parametro{programa} eq "tblastx") && ($parametro{basededatos}=~/^swiss/)){ print "

Con el programa \"$parametro{programa}\" debe realizar la búsqueda en las bases de ADN!!!!<\H2>"; exit; } elsif (($parametro{programa} eq "tblastx" || $parametro{programa} eq "tblastn") && $parametro{email} eq "none"){ print "

Con el programa \"$parametro{programa}\" debe especificar su dirección de correo electrónico<\H2>"; exit; } #Revisar la existencia de la secuencia o de un Numero de Acceso y hacer lo necesario para trabajar con eso if ($parametro{secuencia} eq ""){ print "

Error: No ingresó ninguna secuencia!!!!<\H2>"; exit; } if ($parametro{formatosecuencia} eq "textoplano"){ open (dna, ">/tmp/temp$$") || print "

Error: Es imposible crear el archivo temporal, intente de nuevo mas tarde

";; select((select(dna),$|=1)[0]); #Es necesario que la secuencias se encuentre en formato fasta if ($first!=1) { if ($parametro{secuencia}=~/^>/) { $first=1; } else { print dna ">SIN NOMBRE\n"; } ;$first=1; } print dna "$parametro{secuencia}\n"; close dna; } elsif ($parametro{formatosecuencia} eq "swiss"){ &traersecuencia($parametro{formatosecuencia},$parametro{secuencia}) } elsif ($parametro{formatosecuencia} eq "trembl"){ &traersecuencia($parametro{formatosecuencia},$parametro{secuencia}) } elsif ($parametro{formatosecuencia} eq "embl"){ &traersecuencia($parametro{formatosecuencia},$parametro{secuencia}) } else {} #Ejecutar el proceso BLAST, en este caso se ejecuta un cliente blast que envia la peticion a un servidor dentro del mismo Instituto de Biotecnología, esta linea se puede modificar para utilizar BLASt en el mismo equipo (standalone) system("/usr/local/bin/blastall.remote -P 5556 -B $parametro{email} -p $parametro{programa} -d \"$parametro{basededatos}\" -i /tmp/temp$$ -m $parametro{alinOpt} -F $parametro{Filtro} -G $parametro{AbrirGap} -E $parametro{ExtenderGap} -q $parametro{NucPen} -r $parametro{NucRec} -v $parametro{descripciones} -b $parametro{alineamientos} -f $parametro{Threshold} -g $parametro{Gapped} -M $parametro{matriz} 2>&1 > /tmp/saltemp$$"); if ($parametro{email}=~"none"){ print "

Sus resultados estarán disponibles durante los proximos 5 dias en: http://bioinf.ibun.unal.edu.co/servicios/BLAST/tmp/blast$$.html

"; system("/usr/local/bin/html4blast.BlastServer -go /usr/local/httpd/htdocs/servicios/BLAST/tmp/blast$$.html /tmp/saltemp$$"); open BLAST, "/usr/local/httpd/htdocs/servicios/BLAST/tmp/blast$$.html"; @blastlineas=; foreach $lineablast(@blastlineas){ print "$lineablast"; } } else { print "
Los resultados de la búsqueda serán enviados a:
$parametro{email}
\n"; } #Remover archivos temporales unlink "/tmp/temp$$"; unlink "/tmp/saltemp$$"; ######################################################### #SUBROUTINES ######################################################### #Subrutina para recuperar secuencias de las bases de datos empleando seqret sub traersecuencia{ ($basedatos,$secuencia)=@_; system("/usr/local/BioMol/emboss/bin/seqret $basedatos:$secuencia -auto -stdout > /tmp/temp$$"); if ($?!=0){ print "

La secuencia $secuencia no se encuentra en la base de datos $basedatos

"; exit; } } #subrutina para imprimir un encabezado sub output_header { print < Grupo de Bioinformática - Instituto de Biotecnología -UNAL

Servicios
Servicios
Cursos
Documentos
Contactos

INSTITUTO DE BIOTECNOLOGÍA

GRUPO DE BIOINFORMÁTICA

Servidor BLAST


Resultados de la búsqueda

EOM }