1.6: Instalación de software (Bioinformática)
- Page ID
- 55206
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)
( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\id}{\mathrm{id}}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\kernel}{\mathrm{null}\,}\)
\( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\)
\( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\)
\( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)
\( \newcommand{\vectorA}[1]{\vec{#1}} % arrow\)
\( \newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow\)
\( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vectorC}[1]{\textbf{#1}} \)
\( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)
\( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)
\( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)Idealmente, la infraestructura computacional a la que tiene acceso ya incluye una gran cantidad de paquetes de software especializados necesarios para su trabajo, y las instalaciones de software se mantienen actualizadas a medida que los desarrolladores realizan mejoras. Si este no es el caso, podrías considerar sobornar a tu administrador del sistema local con dulces y cafeína. En su defecto, es probable que tenga que instalar el software que necesita usted mismo.
Instalar software más sofisticado que los simples scripts descritos en el capítulo 5, “Permisos y ejecutables”, seguirá el mismo patrón básico: (1) obtener archivos ejecutables, (2) meterlos en $ Inicio/local/bin
, y (3) asegurar que $ Inicio/local/bin
esté presente en el $ Variable de entorno PATH
. El capítulo 5 cubrió el paso 3, que solo debe hacerse una vez por nuestra cuenta. Los pasos 2 y 3, sin embargo, suelen ser bastante diferentes dependiendo de cómo se distribuya el software.
En este capítulo, vamos a repasar un ejemplo de instalación y ejecución de una suite de bioinformática conocida como HMMER. Este software busca coincidencias de secuencias proteicas (a partir de un conjunto de secuencias) basadas en un modelo probabilístico oculto de Markov (HMM) de un conjunto de secuencias proteicas similares, como en proteínas ortólogas de diferentes especies. La motivación para elegir este ejemplo no es para que podamos aprender sobre el modelado HMM o específicamente esta suite de software, sino que es una tarea representativa que requiere que los usuarios descarguen archivos, instalen software de diferentes maneras y obtengan datos de repositorios públicos.
El primer paso para instalar HMMER es encontrarlo en línea. Una simple búsqueda web nos lleva a la página principal:
Convenientemente, vemos un bonito botón grande de “Descargar”, pero el botón indica que la descarga está hecha para macOS X/Intel, el sistema operativo que se ejecuta en mi portátil personal. Debido a que estamos conectados remotamente a una computadora Linux, esta descarga no funcionará para nosotros. Al hacer clic en el enlace “Opciones de descarga alternativas” se revelan opciones que podrían funcionar para el sistema Linux que estamos usando.
En esta captura de pantalla, vemos una serie de opciones de descarga interesantes, incluyendo una para “Fuente”, dos para “binarios de Linux” y a continuación una sugerencia de alguna documentación, a la que volveremos más adelante.
¿Fuente o Binario?
Algún software bioinformático se crea como un simple script del tipo discutido en el capítulo 5: un archivo de texto con un #!
línea que hace referencia a un programa de interpretación (que ojalá esté instalado en el sistema) y se haga ejecutable con chmod
.
Pero resulta que tales programas interpretados son lentos debido a la capa extra de ejecución, y para algunas aplicaciones, la conveniencia y relativa facilidad no valen la pena la pérdida de velocidad. En estos casos, el software puede escribirse en un lenguaje compilado, lo que significa que el código del programa comienza como “código fuente” legible por humanos pero luego se procesa en código binario legible por máquina. El truco es que el proceso de compilación necesita ser realizado de forma independiente para cada tipo de CPU. Aunque hay menos tipos de CPU de uso común que en días pasados, las arquitecturas de CPU x86 de 32 y 64 bits siguen siendo comunes, y el software compilado para una no funcionará en la otra. Si el desarrollador ha puesto a disposición binarios compilados compatibles con nuestro sistema, entonces mucho mejor: podemos descargarlos, asegurarnos de que sean ejecutables y colocarlos en $ HOME/local/bin
. Alternativamente, es posible que necesitemos descargar los archivos de código fuente y realizar la compilación nosotros mismos. En algunos casos, los desarrolladores distribuyen binarios, pero ciertas características del programa se pueden personalizar en el proceso de compilación.

En aras de la integridad, haremos una instalación fuente de HMMER; más adelante, obtendremos algún otro software como binarios. [1]
Desempaquetar y descargar
Vamos a descargar los archivos fuente para HMMER; primero, vamos a crear un nuevo directorio para almacenar descargas, llamadas descargas
, en nuestro directorio home (es posible que ya tengas dicho directorio).

Si tuviéramos que hacer clic en el enlace de la página de descarga del HMMER, el navegador web intentaría descargar el archivo ubicado en la URL correspondiente (http://eddylab.org/software/hmmer3/3.1b2/hmmer-3.1b2.tar.gz) al escritorio local. Debido a que queremos que el archivo se descargue al sistema remoto, al hacer clic en el botón de descarga no funcionará. Lo que necesitamos es una herramienta llamada wget
, que pueda descargar archivos de Internet en la línea de comandos. [2] La utilidad wget
toma al menos un parámetro importante, la URL, para descargar. Por lo general, es una buena idea poner las URL entre comillas, porque a menudo tienen caracteres que confunden el shell y necesitarían ser escapadas o citadas. Adicionalmente, podemos especificar -O
<filename>, donde <filename>es el nombre a usar al guardar el archivo. Aunque no se requiere en esta instancia, puede ser útil para URL cuyos nombres de archivo final no son razonables (como
index.php? query=fasta&search=drosophila
).
En este punto, tenemos un archivo que termina en .tar.gz
, conocido como “gzipped tarball”, que representa una colección de archivos que primero se han combinado en un solo archivo (un tarball), y luego comprimido (con la utilidad gzip
).

Para sacar el contenido, tenemos que revertir este proceso. Primero, descomprimiremos el archivo con gzip -d hmmer-3.1b1.tar.gz
, que reemplazará el archivo con el hmmer-3.1b1.tar
sin comprimir. [3] A partir de ahí, podemos des-tar el tarball con tar -xf hmmer-3.1b1.tar
(el -x
indica extracto, y el f
indica que los datos serán extraídos del nombre de archivo especificado).

Parece que el tarball gzip contenía un directorio, llamado hmmer-3.1b1
.
Otros métodos de descarga y compresión
Antes de continuar trabajando con el código fuente descargado, hay un par de cosas a tener en cuenta con respecto a los archivos comprimidos y la descarga. En primer lugar, aunque los tarballs gzip son el formato de compresión más utilizado para sistemas similares a Unix, también se pueden encontrar otros tipos de compresión. Por lo general, se pueden identificar por la extensión del archivo. Diferentes herramientas están disponibles para cada tipo, aunque también hay una utilidad genérica de descomprimir
que puede manejar los tipos más comunes.
Extensión | Comando de descomprimir |
---|---|
archivo.bz2 | bunzip2 archivo.bz2 |
file.zip | descomprimir file.zip |
archivo.tgz | Igual que para .tar.gz |
La sintaxis más común para crear un tarball gzip usa la utilidad tar
, que puede hacer ambos trabajos de tarring y gzipping de las entradas. Como ejemplo, el comando tar -cvzf hmmer_compress_copy.tar.gz hmmer-3.1b1
crearía (c
), con salida detallada (v
), un tarball gzipped (z
) en un archivo (f
) llamado hmmer_compress_copy.tar.gz
desde el directorio de entrada hmmer- 3.1b1
.
Tradicionalmente, los archivos comprimidos de código fuente eran la forma más común de distribuir software. Más recientemente, los sistemas de control de versiones (utilizados por los desarrolladores para rastrear los cambios en su software a lo largo del tiempo) se han habilitado para la web como una forma de distribuir software a los usuarios finales. Uno de esos sistemas es git
, que permite a los usuarios descargar directorios completos de archivos usando una “URL de clon” a través de la web. GitHub es una página igualmente popular para alojar estos proyectos. Aquí hay una captura de pantalla de la página de GitHub para Sickle, una recortadora de calidad rápida para datos de secuencia de alto rendimiento.
Se muestra la “URL de clon HTTPS” de GitHub después de hacer clic en el enlace verde “Clonar o descargar”; para descargar la fuente de Sickle en la línea de comandos, solo se necesita ejecutar un comando como git clone https://github.com/najoshi/sickle.git
, siempre que el programa git
esté instalado. (El programa git
también se puede utilizar en la línea de comandos para rastrear “instantáneas” de archivos en un directorio a lo largo del tiempo, proporcionando un registro del trabajo realizado. Dichos directorios registrados se pueden sincronizar con GitHub, lo que hace que sea relativamente fácil compartir proyectos con otros.)
Compilación de la Fuente
Habiendo descargado y desempaquetado el código fuente HMMER, el primer paso es verificar el contenido del directorio y buscar cualquier archivo README
o INSTALAR
. Dichos archivos a menudo se incluyen y contienen información importante del desarrollador de software.

Echando un vistazo al contenido del directorio hmmer-3.1b1
, hay un archivo INSTALL
, que deberíamos leer con menos
. Aquí está la parte superior del archivo:

La documentación de instalación describe una serie de comandos, incluyendo muchos que ya hemos ejecutado (para extraer los datos del tarball gzip). También hay cuatro comandos más enumerados:. /configure
, haga
, verifique
y haga la instalación
. Tres de ellos comprenden el “proceso de instalación canónica” — make check
es un paso opcional para verificar el éxito del proceso a mitad de camino. Los tres pasos importantes son: (1). /configure
, (2) make
y (3) make install
.
- El contenido del directorio (arriba) incluye
configure
como un script ejecutable, y el comando. /configure
ejecuta el script desde el directorio de trabajo actual. Este script generalmente verifica que todas las bibliotecas y programas de requisitos previos estén instalados en el sistema. Más importante aún, este paso puede establecer algunas variables de entorno o crear un archivo llamadoMakefile
, dentro del cual habrá instrucciones detallando cómo debe proceder el proceso de compilación e instalación, personalizado para el sistema. - En realidad,
make
es un programa de interpretación muy parecido abash
(que make
es probable que devuelva/usr/bin/make
—es un programa binario). Al ejecutarmake
, su comportamiento predeterminado es buscar un archivo llamadoMakefile
en el directorio actual, y ejecutar un conjunto predeterminado de comandos especificados en elMakefile
en el orden especificado. En este caso, estos comandos predeterminados ejecutan los programas de compilación que convierten el código fuente en binarios ejecutables. - El comando
make install
vuelve a ejecutarmake
, que busca elMakefile
, pero esta vez estamos especificando que el conjunto de comandos “install” en elMakefile
debe ejecutarse. Este paso copia los archivos ejecutables binarios (y otros archivos auxiliares, si es necesario) en la ubicación de instalación.
Este último paso, hacer instalar
, puede llevarnos a preguntar: ¿cuál es la ubicación de la instalación? Por defecto, será algo así como /usr/bin
, una ubicación en todo el sistema que solo puede escribir el administrador. Entonces, a menos que estemos conectados como root
(el administrador), el paso final en el proceso fallará. Debemos especificar la ubicación de instalación, y aunque la instalación en sí ocurre en el tercer paso, todo el proceso se configura en el primer paso. Puede haber muchas opciones que podemos especificar en el. /configure
paso, aunque la ubicación de instalación (conocida como PREFIX
) es, con mucho, la más utilizada. Corriendo. /configure —help
imprime mucha información; aquí está la sección relevante:

La opción —prefix
es la que usaremos para determinar dónde deben ubicarse los binarios. Aunque nuestros binarios ejecutables eventualmente irán en $HOME/local/bin
, para esta opción vamos a especificar $HOME/local
, porque la porción bin
de la ruta está implícita (y otros directorios como lib
y share
también podrían crearse junto el directorio bin
). Finalmente, nuestro proceso de instalación canónica modificado constará de tres pasos:. /configure —prefix=$HOME/local
, make
, y make install
.



En este punto, si navegamos a nuestro directorio $HOME/local
, veremos los directorios agregados y los archivos binarios.

Debido a que estos archivos ejecutables existen en un directorio listado en la variable $PATH
, podemos, como siempre, escribir sus nombres en el símbolo del sistema cuando trabajamos en cualquier directorio para ejecutarlos. (Aunque, de nuevo, es posible que necesitemos cerrar sesión y volver a entrar para obtener el shell para ver estos nuevos programas. [4])
Instalación desde binarios
Nuestro objetivo es ejecutar HMMER para buscar un perfil de conjunto de secuencias en una base de datos más grande de secuencias. Para más detalles, la documentación de HMMER (disponible en el sitio web) es muy recomendable, particularmente la sección “Tutorial”, que describe convertir una alineación múltiple de secuencias en un perfil (con hmmbuild
) y buscar ese perfil contra el conjunto más grande (con hmmsearch
). También es útil leer la publicación revisada por pares que describe los algoritmos implementados por HMMER o cualquier otro software bioinformático. Incluso si el material está fuera de su área de especialización, revelará las fortalezas y debilidades del software.

Pronto llegaremos a descargar conjuntos de secuencias de consulta y destino, pero rápidamente nos daremos cuenta de que aunque los programas de la suite HMMER pueden producir el perfil y buscarlo contra el conjunto objetivo, no pueden producir una alineación múltiple a partir de un conjunto de secuencias que son similares pero no todas de la misma longitud. Aunque hay muchas herramientas de alineación múltiple con diferentes características, descargaremos el músculo
relativamente popular. Esta vez, lo instalaremos desde binarios.
Vale la pena discutir cómo se va a descubrir estas secuencias de pasos, y qué herramientas usar. Las siguientes estrategias generalmente funcionan bien, aunque la creatividad casi siempre es recompensada.
- Lee las secciones de métodos de ponencias con objetivos similares.
- Pregunte a sus compañeros.
- Buscar en Internet.
- Lee la documentación y los trabajos publicados para herramientas con las que ya estás familiarizado, así como aquellas publicaciones que las citan.
- No dejes que la aparente complejidad de un análisis te impida dar los primeros pasos. La mayoría de los tipos de análisis emplean una serie de pasos y muchas herramientas, y es posible que no tenga una idea clara de cuál será el procedimiento final. Experimenta con herramientas alternativas y busca ayuda cuando te quedes atascado. Asegúrese de documentar su trabajo, ya que inevitablemente querrá volver sobre sus pasos.
Si visitamos la página de inicio muscular
, veremos una variedad de opciones de descarga, incluyendo binarios para nuestro sistema, Linux.

Desafortunadamente, parece que hay dos opciones para los binarios de Linux: 32 bits y 64 bits. ¿Cómo sabemos cuál de estos queremos? Podemos obtener una pista ejecutando el programa uname
, junto con el parámetro -a
para dar la mayor cantidad de información posible.

El programa uname
da información sobre el sistema operativo, que en este caso parece ser GNU/Linux para una CPU x86 de 64 bits. Si es probable que alguno de los binarios funcione, será el conjunto “i86linux64”. Vamos a conseguir
ese tarball gzip en el directorio de descargas
.

Tenga en cuenta que en este caso no hemos usado la opción -O
para wget
, porque el nombre de archivo descrito por la URL (muscle3.8.31_i86linux64.tar.gz
) es lo que nos gustaría llamar al archivo cuando se descarga de todos modos. Continuando para desempaquetarlo, encontramos que contiene solo un ejecutable que podemos intentar ejecutar.

Debido a que no reportó un error de ejecución, podemos instalarlo copiándolo a nuestro directorio $HOME/local/bin
. Al hacerlo, le daremos un nombre más sencillo, músculo
.

¡Ahora nuestro alineador múltiple, músculo
, está instalado!
Ejercicios
- Sigue los pasos anteriores para instalar la suite HMMER (de origen) así como
muscle
(de binarios) en tu directorio$HOME/local/bin
. Asegúrate de poder ejecutarlos desde cualquier lugar (incluso desde tu directorio de inicio) ejecutandomuscle —help
yhmmsearch —help
. Ambos comandos deben mostrar texto de ayuda en lugar de un error. Además, comprueba que las versiones que encuentra el shell son de tu directorio home ejecutandoqué hmmsearch
yqué músculo
. - Determine si tiene instaladas las herramientas “NCBI Blast+” buscando el programa
blastn
. Si están instalados, ¿dónde están ubicados? Si no están instalados, encuéntrelos e instálelos desde binarios. - Instala
hoz
desde el repogit
en https://github.com/najoshi/sickle. Para instalarlo, deberá seguir las instrucciones personalizadas dentro del archivoREADME.md
. Si no tienes el programagit
, está disponible para la instalación binaria y fuente en http://git-scm.com.
Obtención de datos
Ahora que tenemos el software instalado para nuestro análisis de ejemplo, necesitaremos obtener algunos datos. Suponiendo que no tenemos datos novedosos con los que trabajar, haremos la siguiente pregunta: ¿podemos identificar, usando HMMER y músculo
, homólogos de genes P450-1A1 en el conjunto de datos de proteínas Drosophila melanogaster? (Este es un ejemplo inútil, ya que el genoma de D. melanogaster ya está bien anotado.)
El primer paso será descargar el conjunto de datos de D. melanogaster, que podemos encontrar en http://flybase.org, el repositorio del genoma para genomas de Drosophila. Generalmente, los repositorios genómicos como FlyBase proporcionan conjuntos de datos completos para su descarga, pero pueden ser difíciles de encontrar. Para comenzar, navegaremos a “Archivos”, luego a “Releases (FTP)”.

A partir de ahí, navegaremos a un lanzamiento reciente, como FB2014_05. Debido a que la información genómica a menudo se actualiza a medida que se dispone de mejor información, las versiones más nuevas son indicadas por las nuevas versiones

A continuación veremos enlaces para especies específicas; trabajaremos con dmel_r6.02
. A menudo es una buena idea anotar números de lanzamiento específicos o fechas de lanzamiento para los conjuntos de datos que descargues, para una descripción eventual en las secciones de métodos de cualquier trabajo que escribas que se basen en esos datos.

El formato más común para la información de secuencia se conoce como FASTA y es el formato que queremos, por lo que el siguiente paso es navegar al directorio fasta
. Otras opciones potencialmente interesantes incluyen los directorios gff
y gtf
, que contienen archivos de anotación basados en texto que describen la ubicación y función de los genes en el genoma. (Estos formatos suelen ser útiles para el análisis de RNA-seq).

Por último, vemos una variedad de archivos gzip que podemos wget
en la línea de comandos. Debido a que estamos interesados en el conjunto completo de datos de proteínas para esta especie, usaremos la URL para dmel-todo-traducción-r6.02.fasta.gz
.

Antes de ejecutar wget
en el archivo, crearemos un directorio de proyectos
en nuestro directorio home, y un directorio p450s
dentro de ahí para trabajar.

Debido a que el archivo es gzip, podemos usar gzip -d
para descomprimirlo, y luego usar menos -S
para ver los resultados sin las largas líneas envueltas en la ventana del terminal.

El resultado ilustra el formato estándar para un archivo FASTA. Cada registro de secuencia comienza con una línea que comienza con un carácter >
, y la primera palabra que no contiene espacios en blanco siguiente que se considera el ID de secuencia.

Esta línea podría entonces contener caracteres de espacio en blanco y metadatos. El espacio en blanco comprende una secuencia de uno o más espacios, tabulaciones (representadas en Unix/Linux como un carácter especial a veces escrito como\ t
), o nuevas líneas (representadas en Unix/Linux como un carácter especial a veces escrito como\ n
) en una fila.
Las líneas que siguen a la línea de cabecera contienen la información de secuencia, y no hay un formato específico para el número de líneas sobre las que se puede romper la secuencia, o la longitud de esas líneas. Después de la última línea de secuencia para un registro, puede comenzar un nuevo registro de secuencia.
Dependiendo de la fuente del archivo FASTA, los IDs o metadatos pueden representar múltiples piezas de datos; en este ejemplo, los metadatos están separados por espacios y tienen un <label><value>formato =;
que es específico de las secuencias de proteínas de FlyBase.
Para nuestro siguiente truco, descargaremos algunas secuencias de proteínas P450-1A1 de UniProt.org. Uniprot.org es una conocida base de datos de proteínas, y está compuesta por la base de datos “TremBL” y el subconjunto de TremBL, conocido como “Swiss-Prot”. Si bien la primera contiene muchas secuencias con anotaciones, muchas de esas anotaciones han sido asignadas por búsquedas de homología automatizadas y no han sido revisadas. Este último, Swiss-Prot, contiene únicamente secuencias cuyas anotaciones han sido revisadas manualmente.
Para la descarga, ingresaremos “p450 1A1” en el campo de búsqueda, y filtraremos los resultados solo a aquellos en Swiss-Prot haciendo clic en el enlace “Revisado”, resultando en 28 coincidencias. A continuación, podemos hacer clic en el botón “Descargar” para descargar un archivo “FASTA (canónico)” (en lugar de con todas las isoformas incluidas).

El sitio web de Uniprot se sometió recientemente a un rediseño, de tal manera que el archivo descargado se transfiere directamente al navegador web, en lugar de presentarse como una URL a la que se podría acceder con wget
. Esto no es un problema, ya que nos da la oportunidad de discutir cómo transferir archivos entre el sistema remoto y el escritorio local a través de SFTP.
Al igual que SSH, SFTP es un protocolo cliente/servidor común. Siempre que el servidor se esté ejecutando en el equipo remoto (de hecho, usa el mismo puerto que SSH, puerto 22, porque SSH proporciona la conexión segura), solo necesitamos instalar y ejecutar un cliente SFTP en nuestro escritorio. Hay muchos clientes SFTP disponibles para Microsoft Windows (por ejemplo, Core-FTP), OS X (por ejemplo, Cyberduck) y sistemas Linux (por ejemplo, sftp
en la línea de comandos o el FileZilla gráfica). El cliente discutido aquí se llama FireFTP, y está disponible como una extensión para el navegador web Mozilla Firefox (en sí mismo disponible para Windows, OS X y Linux). Para obtenerlo requiere instalar y ejecutar Firefox, navegar a Herramientas → Addons y buscar “FireFTP”.

Una vez instalado el plugin (lo que requiere reiniciar Firefox), podremos acceder a él desde el submenú Herramientas → Desarrollador. Conectar el cliente a un equipo remoto requiere que primero configuremos la conexión seleccionando “Crear una cuenta”. La información básica requerida incluye un nombre de cuenta, el host al que conectarse (por ejemplo, una dirección IP como 128.196.64.120
o un nombre de host como files.institution.edu
), así como nuestro nombre de usuario y contraseña.

También necesitamos decirle al cliente con qué protocolo conectarse, que se realiza en la pestaña “Conexión”; queremos SFTP en el puerto 22.

Con eso logrado, podemos transferir cualquier archivo de un lado a otro usando las flechas verdes en la interfaz, donde el sistema de archivos remoto se muestra a la derecha y el sistema de archivos local se muestra a la izquierda. Aquí está el resultado después de transferir nuestro archivo p450s.fasta
.

DOS/Windows y Unix/Linux
En su mayor parte, la forma en que se codifica el texto en los sistemas operativos Microsoft (como DOS y Windows) y en sistemas similares a Unix (como Linux y OS X) es similar. Pero hay una diferencia: cómo se representan los extremos de las líneas, o “caracteres de nueva línea”. En sistemas tipo Unix, una nueva línea está representada por un solo byte de 8 bits (el carácter “Line Feed” (NF)): 00001010
. En los sistemas Microsoft, están representados por un par de bytes de 8 bits (“Carriage Return” (CR) seguido de NF): 0000110100001010
. Esto significa que los archivos de texto creados en archivos operativos de Microsoft pueden no ser legibles en sistemas similares a Unix, y viceversa.
Afortunadamente, hay utilidades disponibles para convertir entre estos formatos. En la línea de comandos, las utilidades dos2unix
y unix2dos
convierten a y desde un formato similar a Unix, respectivamente. Esto no suele ser un problema, ya que la mayoría de los programas de transferencia de archivos (incluido FireFTP) realizan automáticamente la conversión adecuada. El archivo
de utilidad de línea de comandos también se puede utilizar para determinar el tipo de archivo, incluido su tipo de nueva línea.
Poniéndolo todo junto
En este punto, hemos obtenido los datos que deseamos procesar, y hemos instalado con éxito el software que pretendemos ejecutar en esos datos.

El primer paso es correr músculo
en el archivo p450s.fasta
para producir una alineación múltiple. Una forma rápida de identificar cómo se debe ejecutar un programa como el músculo
(qué parámetros se necesita) es ejecutarlo sin ningún parámetro. Alternativamente, podríamos probar las opciones más comunes para obtener ayuda: músculo -h
, músculo —ayuda
, músculo —h
, o músculo -ayuda
.

La línea más importante de este texto de ayuda es la información de uso: muscle -in -out
<inputfile><outputfile>; los parámetros entre paréntesis angulares indican que el parámetro es requerido (los parámetros no requeridos suelen aparecer entre corchetes rectos). El texto de ayuda adicional indica otros parámetros que podríamos optar por agregar. Presumiblemente, podrían colocarse antes o después de los especificadores de entrada o salida. Entonces, ejecutaremos músculo
en nuestro archivo p450s.fasta
, y produciremos un archivo cuyo nombre de archivo indique su pedigrí de alguna manera:

Una vez que el comando haya terminado de ejecutarse, podremos ver el archivo de alineación con menos -S p450s.fasta.aln
.

Con una mayor inspección, veríamos que las secuencias se han hecho de la misma longitud mediante la inserción de caracteres de hueco. El siguiente paso es ejecutar hmmbuild
para producir el perfil HMM. Nuevamente, ejecutaremos hmmbuild
sin ninguna opción para obtener información sobre qué parámetros necesita.

El resultado de ayuda para hmmbuild
es más corto, aunque el comando también señala que podríamos ejecutar hmmbuild -h
para obtener información más detallada. La línea de uso, hmmbuild [-options]
<hmmfile_out><msafile>, indica que se requieren los dos últimos parámetros, y son el nombre del archivo de salida (para el perfil HMM) y el archivo de entrada de alineación de secuencias múltiples. Los corchetes indican que, antes de estos dos últimos parámetros, se pueden dar una serie de parámetros opcionales, descritos más adelante en la salida de ayuda. En este caso, <hmmfile_out>y
<msafile>son posicionales: el argumento penúltimo debe especificar la salida, y el último debe especificar la entrada.

Después de que termine esta operación, puede ser interesante echar un vistazo al archivo HMM resultante con menos -S p450s.fasta.aln.hmm
. Aquí hay un fragmento:

Con cierta lectura de documentación, incluso podemos decodificar cómo se representa el perfil probabilístico en esta matriz de letras y números. Como recordatorio, nuestro directorio de proyectos ahora contiene el archivo de secuencia original, un archivo de alineación múltiple y el archivo de perfil HMM, así como el archivo de proteínas D. melanogaster en el que deseamos buscar el perfil.

En este punto, estamos listos para buscar el perfil en el conjunto de proteínas de D. melanogaster con hmmsearch
. Como de costumbre, primero inspeccionaremos el uso de hmmsearch
.

Este breve texto de ayuda indica que hmmsearch
puede tomar una serie de parámetros opcionales (y tendríamos que ejecutar hmmsearch -h
para verlos), y los dos últimos parámetros son requeridos. Estos dos últimos parámetros constituyen el archivo de perfil HMM que estamos buscando, así como el <seqdb>en el que buscar. No dice qué formato
<seqdb>debe ser, así que lo probaremos en nuestro archivo FASTA de D. melanogaster y esperamos lo mejor (si falla, tendremos que leer más texto de ayuda o documentación).

Tenga en cuenta que no había ninguna opción requerida para un archivo de salida. La ejecución de este comando hace que se imprima bastante información en el terminal, incluyendo líneas como:

Y, cuando ejecutamos ls
, encontramos que no se ha creado ningún archivo de salida.

Parece que hmmsearch
, por defecto, imprime toda su salida significativa en el terminal. En realidad, hmmsearch
está imprimiendo su salida al flujo de salida estándar. La salida estándar es el mecanismo de salida principal para los programas de línea de comandos (que no sean escribir archivos directamente). Por defecto, la salida estándar, también conocida como “salida estándar” o “stdout”, se imprime en el terminal.
Afortunadamente, es posible redirigir el flujo de salida estándar a un archivo indicando esto a nuestro shell con un operador >
redirect, y especificando un nombre de archivo o ruta. En este caso, redireccionaremos la salida de standard out a un archivo llamado p450s_hmmsearch_dmel.txt
.

Cuando se ejecuta este comando, no se imprime nada, y en su lugar se crea nuestro archivo. Al usar la redirección >
, el archivo se sobrescribirá si ya existe. Si, en cambio, quisiéramos agregar a un archivo existente (o crear un nuevo archivo si no hay ningún archivo al que agregar), podríamos haber utilizado la redirección >>
.
Aquí están los contenidos de nuestro análisis final, un archivo de texto simple con bastante información, incluyendo algunos datos de fila y columna muy bien formateados, como se muestra por menos -S p450s_hmmsearch_dmel.txt
.

Reproducibilidad con scripts
Es muy poco probable que un análisis de este tipo se realice sólo una vez. La mayoría de las veces, desearemos ajustar o reemplazar los archivos de entrada, comparar con diferentes conjuntos de proteínas o ajustar los parámetros para los programas ejecutados. Así tiene sentido capturar el análisis que acabamos de realizar como un script ejecutable, quizás llamado runhmmer.sh
.

Tenga en cuenta en lo anterior que hemos roto la línea larga de hmmsearch
en dos al terminarla a mitad de camino con una barra invertida y continuarla en la siguiente línea. La barra invertida le permite a bash
saber que se va a especificar más del comando en líneas posteriores. (La barra invertida debe ser el último carácter de la línea, sin espacios ni tabulaciones siguientes). Después de hacer este script ejecutable con chmod
, podríamos volver a ejecutar el análisis navegando a este directorio y ejecutándolo.
/runhmmer.sh.
¿Y si quisiéramos cambiar el archivo de entrada, digamos, a argonasa-1s.fasta
en lugar de p450s.fasta
? Podríamos crear un nuevo directorio de proyectos para trabajar, copiar este script allí, y luego cambiar todas las instancias de p450s.fasta
en el script a argonase 1s.fasta
.
Alternativamente, podríamos usar el poder de las variables de entorno para diseñar nuestro script de tal manera que este proceso sea más fácil.

Ahora los nombres de archivo de interés se especifican solo una vez, cerca de la parte superior del script, y a partir de entonces el script utiliza sus propios identificadores (como variables de entorno) para referirse a ellos. Reutilizar este script sería tan sencillo como cambiar los nombres de archivo especificados en tres líneas.
Podemos ir un paso más allá. Resulta que los scripts de shell pueden tomar parámetros desde la línea de comandos. El primer parámetro dado a un script en la línea de comandos se almacenará automáticamente en una variable accesible para el script llamada $1
, el segundo parámetro se almacenará en $2
, y así sucesivamente. Así podemos generalizar aún más nuestro guión:

Podríamos haber reemplazado todas las instancias de $query
por $1
, pero esta organización hace que nuestro script sea más fácil de leer en el futuro, una consideración importante a la hora de programar. Ahora podemos ejecutar un análisis completo especificando los tres nombres de archivo relevantes en la línea de comandos, como en:. /runhmmer.sh p450s.fasta dmel-todo-traducción-r6.02.fasta p450s_hmmsearch_dmel.txt
.
Este runhmmer.sh
es un buen candidato para su inclusión en nuestro $ Inicio/local/bin
para que podamos ejecutarlo desde cualquier lugar, aunque es posible que queramos agregar líneas inmediatamente después del #!
line, para proporcionar algún texto de ayuda para cualquier persona que intente ejecutar el script sin proporcionar las entradas correctas:

El “if block” anterior solo se ejecutará si el número de parámetros dados ($#
) no es igual a 3. Aunque lenguajes como Python proporcionan facilidades mucho más agradables para este tipo de ejecución basada en lógica, la capacidad de proporcionar condicionalmente información de uso para scripts es importante. Como es habitual para bash
, el intérprete ignora líneas que comienzan con #
.
Ejercicios
- Crea una nueva carpeta en tu carpeta de
proyectos
llamadac_elegans
. Localice el archivo FASTA para el genoma de referencia de Caenorhabditis elegans de http://wormbase.org, y descárguelo a esta carpeta usandowget
. El archivo que estás buscando se llamará algo así comoC_Elegans.prjna13758.ws244.genomic.fa.gz
. Después de que se descargue, descomprima y visualícelo conmenos -S
. - Instale un cliente SFTP en su escritorio, como FireFTP o CyberDuck, e intente conectarse a la misma máquina en la que inicie sesión a través de SFTP. Descargue un archivo FASTA de algunas secuencias potencialmente homólogas de Uniprot a su escritorio local y transfiéralo a su directorio remoto
c_elegans
. - Intenta ejecutar
muscle
y HMMER en las secuencias que descargaste de uniprot.org contra el genoma de C. elegans. - Si tiene acceso a más de una máquina basada en Unix (como una computadora de escritorio OS X y una computadora Linux remota, o dos computadoras Linux remotas), lea la página man para
scp
conman scp
, y también lea sobre ello en línea. Intente transferir un archivo y un directorio entre máquinas usandoscp
en la línea de comandos. - Escribe un script
bash
ejecutable que automatice un proceso de algún tipo, e instálalo en tu$HOME/local/bin
. Pruebalo después de cerrar la sesión y volver a entrar.
- Si tiene privilegios de administrador en la máquina, también están disponibles repositorios de software seleccionados con muchos paquetes. Dependiendo del sistema, si inicia sesión como
root
, instalar HMMER puede ser tan simple como ejecutarapt-get install hmmer
oyum install hmmer
. - Una herramienta similar llamada
curl
se puede utilizar para el mismo propósito. Los conjuntos de características son ligeramente diferentes, por lo que en algunos casos se prefierecurl
sobrewget
y viceversa. Para las tareas simples de descarga en este libro, o bien bastará. - La utilidad
gzip
es uno de los pocos programas que se preocupan por las extensiones de archivo. Si bien la mayoría de los programas funcionarán con un archivo de cualquier extensión,gzip
requiere un archivo que termine en.gz
. Si no está seguro del tipo de un archivo, la utilidad dearchivo
puede ayudar; por ejemplo,file hmmer-3.1b1.tar.gz
informa que el archivo esgzip
-compressed data, y lo haría incluso si el archivo no terminara en.gz
. - No es estrictamente necesario volver a cerrar sesión y volver a entrar; cuando se trabaja en bash, ejecutar
hash -r
hará que el shell actualice su lista de software que se encuentra en$PATH
.