Análisis de secuencias de ADN mediante técnicas de tratamiento de datos masivos
Abstract
El presente Trabajo de Fin de Grado pretende explorar el uso de técnicas de procesamiento de datos masivos para el tratamiento y análisis de secuencias de ADN, con el propósito de proporcionar una visión global de las herramientas y entornos disponibles, la actualización de bibliotecas preexistentes y el diseño de un flujo de trabajo de referencia para la aplicación a un conjunto de datos concretos.
Full text
ANÁLISIS DE SECUENCIAS DE ADN MEDIANTE TÉCNICAS DE TRATAMIENTO DE DATOS MASIVOS ANALYSIS OF DNA SEQUENCES USING BIG DATA TECHNIQUES TRABAJO FIN DE GRADO CURSO 2022-2023 AUTORES GLORIA PORTO CABERO SANDRA SÁNCHEZ PREVOST DIRECTOR JOSÉ IGNACIO REQUENO JARABO JORGE ÁLVAREZ JARRETA DOBLE GRADO EN INGENIERÍA INFORMÁTICA Y ADMINISTRACIÓN Y DIRECCIÓN DE EMPRESAS FACULTAD DE INFORMÁTICA UNIVERSIDAD COMPLUTENSE DE MADRID
ANÁLISIS DE SECUENCIAS DE ADN MEDIANTE TÉCNICAS DE TRATAMIENTO DE DATOS MASIVOS ANALYSIS OF DNA SEQUENCES USING BIG DATA TECHNIQUES TRABAJO DE FIN DE GRADO EN INGENIERÍA INFORMÁTICA AUTOR GLORIA PORTO CABERO SANDRA SÁNCHEZ PREVOST DIRECTOR JOSÉ IGNACIO REQUENO JARABO JORGE ÁLVAREZ JARRETA CONVOCATORIA: JUNIO 2023 DOBLE GRADO EN INGENIERÍA INFORMÁTICA Y ADMINISTRACIÓN DE EMPRESAS FACULTAD DE INFORMÁTICA UNIVERSIDAD COMPLUTENSE DE MADRID
AGRADECIMIENTOS A José Ignacio Requeno Jarabo, Jorge Álvarez Jarreta y Fátima Díaz Da Corte por su guía y apoyo constante a lo largo de este proceso. También, a Agustín Estrada Peña, catedrático de la Facultad de Veterinaria en la Universidad de Zaragoza, por su revisión del proyecto y aportaciones sobre líneas de trabajo futuro.
RESUMEN Análisis de secuencias de ADN mediante técnicas de tratamiento de datos masivos El presente Trabajo de Fin de Grado pretende explorar el uso de técnicas de procesamiento de datos masivos para el tratamiento y análisis de secuencias de ADN, con el propósito de proporcionar una visión global de las herramientas y entornos disponibles, la actualización de bibliotecas preexistentes y el diseño de un flujo de trabajo de referencia para la aplicación a un conjunto de datos concretos. Palabras clave ADN, ADN mitocondrial, Análisis secuencias, Datos masivos, Jupyter Notebook, Nextflow, Python, Alineamiento múltiple de secuencias
ABSTRACT Analysis of DNA sequences using Big Data techniques This project aims to explore the use of big data processing techniques for the treatment and analysis of DNA sequences, with the purpose of providing a comprehensive overview of the available tools and environments, the update of preexisting libraries, and a reference workflow for the application to a specific database. Keywords DNA, Mitochondrial DNA, Sequence analysis, Big Data, Jupyter Notebook, Nextflow, Python, Multiple sequence alignment
ÍNDICE DE FIGURAS Figura 1: Hoja de ruta del plan de trabajo seguido ............................................................. 7 Figura 2: Diagrama de Gantt de la hoja de ruta ................................................................. 8 Figura 3: Diagrama de flujo acumulado ............................................................................... 8 Figura 4: Roadmap of the work plan followed ....................................................................16 Figura 5: Gantt chart of the roadmap ..................................................................................17 Figura 6: Cumulative flow diagram .......................................................................................17 Figura 7: Ejemplo de flujo de trabajo con la biblioteca MEvoLib ......................................23 Figura 8: Código de la fase de fetching, flujo de trabajo en Jupyter Notebook .............36 Figura 9: Código de la fase de clustering, flujo de trabajo en Jupyter Notebook ...........36 Figura 10: Proceso del módulo de Fetch ..............................................................................38 Figura 11: Función main de fetch/BioSeqs.py ......................................................................39 Figura 12: Proceso del módulo Cluster .................................................................................39 Figura 13: Función main de cluster/_init_.py ........................................................................40 Figura 14: Función main de cluster/_init_.py ........................................................................41 Figura 15: Función main de align/_init_.py ...........................................................................41 Figura 16: Archivo nextflow.config ........................................................................................42 Figura 17: Código de execute_nextflow.nf ..........................................................................44 Figura 18: Ejemplo línea de comando para el caso de uso ..............................................47 Figura 19: Ejemplo ejecución de Nextflow del caso de uso ...............................................48 Figura 20: Ejemplo de directorio work del caso de uso ......................................................48 Figura 21: Ejemplo del directorio data del caso de uso .....................................................49 Figura 22: Reporte generado en el caso de uso de la máquina local .............................49
Figura 23: Información sobre la CPU del servidor ................................................................50 Figura 24: Información sobre la CPU de la máquina local .................................................50 Figura 25: Reporte generado en el caso de uso del servidor ............................................51 Figura 26: Diagrama de las contribuciones personales de Gloria Porto Cabero .............57 Figura 27: Diagrama de las contribuciones personales de Sandra Sánchez Prevost ......58
ÍNDICE DE TABLAS Tabla 1: Procesos y módulos de MEvoLib .............................................................................22 Tabla 2: Principales funciones actualizadas del módulo MEvoLib.Fetch.BioSeqs ............30 Tabla 3: Principales funciones actualizadas del módulo MEvoLib.Cluster.Genes ............32 Tabla 4: Principales funciones actualizadas del módulo MEvoLib.Align ...........................33
1 Capítulo 1 - Introducción El análisis de secuencias de ADN se ha convertido en una herramienta fundamental en la investigación en áreas como la genética, la biología molecular y la medicina. Sin embargo, la complejidad y la cantidad de datos obtenidos a través de las tecnologías de secuenciación masiva presentan un desafío para su procesamiento y análisis. Este Trabajo de Fin de Grado explora la utilización de técnicas de tratamiento de datos masivos para el procesamiento y análisis de ADN, con el objetivo de ofrecer una visión general de las herramientas disponibles, la actualización de bibliotecas preexistentes y el diseño de un flujo de trabajo (o pipeline) para su aplicación a un conjunto de datos concreto. Más en detalle, durante este Trabajo de Fin de Grado se trabaja y actualiza MEvoLib, una biblioteca en Python con funcionalidades para la extracción y manipulación de secuencias de ADN. Después, se aplica la nueva versión de MEvoLib al diseño de un flujo de trabajo mediante el gestor de tareas Nextflow. Finalmente, se emplea el entorno desarrollado para el estudio del ADN de las garrapatas debido a su interés biológico, principalmente en su papel de vector en la transmisión de enfermedades patógenas. Resulta importante comprender las implicaciones que supone trabajar con, en este caso, ADN mitocondrial de diferentes especies de garrapatas. La abundancia de ADN mitocondrial implica un mayor índice de variabilidad y mutación en la región hipervariante de dicho ADN, que puede resultar en complicaciones en el momento de la secuenciación. Asimismo, las secuencias mitocondriales aportan menos información para la identificación de especies e inferencia de relaciones que las secuencias nucleares, ya que la longitud de estas últimas es hasta cinco órdenes de magnitud mayor. En el caso concreto de garrapatas, trabajar con ADN mitocondrial puede presentar ciertas limitaciones como la falta de información sobre la especie o la posibilidad de que haya procesos de selección concretos de relevancia en la evolución
2 de las secuencias. El presente capítulo reúne los términos, conceptos y objetivos esenciales del proyecto para comprender el proceso de recopilación y tratamiento masivo de datos para el análisis de secuencias de ADN y, en particular, para el contexto del ADN mitocondrial (un tipo especial de ADN). Para aportar un contexto biológico previo al desarrollo de la disertación, cabe destacar que MEvoLib soporta la descarga y análisis de genes o secuencias de ADN independientemente de su fuente, sea este ADN de origen tanto mitocondrial como nuclear. Las definiciones de estos términos se pueden encontrar en el glosario de conceptos desarrollado en el Apéndice 1. De esta manera, en la primera sección de este capítulo se desarrolla una introducción de las motivaciones de este trabajo, seguida por una segunda sección en la que se plasman los principales objetivos que se persiguen y, finalmente, una tercera sección en la que se plasma el plan de trabajo para su consecución. 1.1 Motivación y estado de la cuestión La principal motivación de este proyecto es mejorar la utilización de técnicas de procesamiento de datos masivos para el análisis de secuencias de ADN mitocondrial. Para ello, dicha mejora implica la sistematización y actualización de herramientas de software preexistentes que optimicen la precisión y el rendimiento de los análisis de la filogenética. Asimismo, con el enfoque del flujo de trabajo adaptado a las necesidades del usuario junto con la posibilidad de realizar múltiples consultas y tareas en paralelo, se persigue incrementar y mejorar el alcance de las diferentes técnicas de sistematización que encontramos en este campo de investigación. De esta manera, se intenta proporcionar solución a las dificultades que surgen a gran escala, donde las herramientas de software comunes son ineficientes o, en el peor de los casos, no convergen. Con este fin, podemos distinguir tres puntos principales que motivan la realización de este trabajo:
3 • Actualizar el marco común que aporta la biblioteca MEvoLib para la mayoría de los estudios filogenéticos, de manera que el flujo de trabajo sea accesible tanto desde el campo de la informática como desde el campo de la biología. • Mejorar el rendimiento e integración de la información disponible en las bases de datos para simplificar los pasos a seguir por parte del usuario. • Unificar las diversas aplicaciones de la biblioteca MEvoLib en un flujo de trabajo que concentre todos los procedimientos y módulos con los que trabajar en los casos de uso específicos. Para la consecución de dichos puntos, se ha realizado la correspondiente revisión de la literatura relacionada y, siguiendo la línea de trabajo futuro que se introduce en la tesis que presenta MEvoLib, “Análisis filogenético molecular: diseño e implementación de algoritmos escalables y fiables, y verificación de propiedades filogenéticas”, por el Dr. Jorge Álvarez Jarreta (2017), se han marcado las pautas para, principalmente, mejorar el método de búsqueda, descarga y experiencia del usuario. Además, durante los últimos seis años, la biblioteca no había experimentado ningún trabajo de mejora o mantenimiento, por lo que el estado de la cuestión previo al desarrollo del presente trabajo destaca por la falta de actualizaciones de la biblioteca en la mayoría de sus módulos así como en el soporte de las versiones mínimas de Python, 2.7 y 3.3, ambas ya obsoletas (la última se dejó de mantener hace más de 3 años).
4 1.2 Objetivos Para cumplir con las motivaciones que plantean la ejecución de este trabajo, los objetivos previamente estipulados a cumplir se pueden clasificar de la siguiente manera: Configuración de la infraestructura de desarrollo. Actualización de la biblioteca MEvoLib. Desarrollo del flujo de trabajo en Jupyter Notebook usando la biblioteca MEvoLib. Desarrollo del flujo de trabajo en Nextflow usando la biblioteca MEvoLib. Validación del flujo de trabajo con un caso de estudio. Elaboración de la disertación del proyecto. De este modo, la consecución de todos ellos bajo una metodología principalmente secuencial supone materializar las tres motivaciones esenciales y el objeto de trabajo explicado. Además, para definir las acciones a tomar, se ha seguido un detallado plan de trabajo que garantizase el cumplimiento de cada pequeña tarea relacionada con alguno de los objetivos principales. 1.3 Plan de trabajo Para la consecución de los objetivos descritos en la sección anterior, se plantea un plan de trabajo compuesto por una serie de tareas sucesivas siguiendo una metodología Agile, respaldada por la herramienta JIRA para facilitar el seguimiento de las distintas tareas, así como la sincronización entre las distintas partes y sus dependencias. En una primera instancia, se realiza la configuración de los entornos necesarios en los que se va a desarrollar el presente trabajo. A su vez, se explica las razones y motivaciones para el uso de las distintas herramientas. Este apartado se verá en detalle en el capítulo 2 del presente documento.
5 En segundo lugar, se realiza una contextualización de la biblioteca MEvoLib y su estado más reciente en Python 2.7. Posteriormente, se procede a actualizar la biblioteca para adecuarla a una versión más reciente de Python. Para ello, se revisa el código existente en Python 2.7 y se adecua a los nuevos estándares de Python 3.10. Esta tarea se encuentra explicada en el capítulo 3. En tercer lugar, tras la actualización a una versión más reciente de Python, se procede a implementar el flujo de trabajo con esta biblioteca para realizar el análisis de las secuencias de ADN. Este análisis se enfoca en el estudio de la composición genética de diferentes organismos, identificando las secuencias de nucleótidos presentes en el ADN e investigando las relaciones evolutivas entre organismos. Para poder llevarlo a cabo, es esencial integrar la fase de descarga de secuencias (Fetch), limpieza de datos y de información no pertinente, agrupación de los diferentes genes (Cluster) y alineamiento de las secuencias (Align) en un flujo automatizado para simplificar el procesamiento al usuario final. El flujo de trabajo permite la configuración de ciertos parámetros, como por ejemplo el nombre de los organismos o genes a estudiar. Cabe destacar que cada una de las etapas anteriormente mencionadas se corresponde con uno de los módulos proporcionados por la biblioteca MEvoLib, siendo la fase de alineamiento relevante para un estudio comparativo de las secuencias y la detección de posiciones del ADN con mutaciones. Inicialmente, solo se implementa el flujo de trabajo de los módulos Fetch y Cluster utilizando la herramienta de Jupyter Notebooks. Luego, siguiendo con el Capítulo 4, se traslada el flujo de trabajo implementado a la herramienta Nextflow, donde, a su vez, se amplía la parametrización del mismo para permitir una mayor personalización del análisis de las secuencias y se añade el flujo de trabajo del módulo Align, actualizado por Fátima Díaz Da Corte. En el capítulo 5, se recoge de forma breve los repositorios utilizados, así como el código fuente del presente proyecto. Por otro lado, se destina el capítulo 6 para desarrollar del caso de uso principal del trabajo. Se explica de forma detallada el paso a paso para ejecutar un ejemplo del
6 flujo de trabajo de la biblioteca MEvoLib basado en la descarga, agrupación y alineamiento de genes mitocondriales de una especie de garrapata. En el último capítulo del documento, se realiza una evaluación y análisis de los objetivos y se exponen las conclusiones. Además, se pone de manifiesto las limitaciones encontradas que pueden ser referencias para trabajos futuros. Por último, dentro del apartado de los Apéndices se recogen tanto el glosario de términos como un manual para la configuración e instalación de los entornos y herramientas utilizadas a lo largo del proyecto.
13 • Unify the various applications of MEvoLib library into a workflow that concentrates all the procedures and modules with which to work in specific use cases. In order to achieve these points, the corresponding literature review has been carried out and, considering future work that is introduced in the thesis which presents MEvoLib, “Molecular phylogenetic analysis: design and implementation of scalable and reliable algorithms and verification of phylogenetic properties”, by Dr. Jorge Álvarez Jarreta (2017), guidelines have been set to, mainly, improve the search method, download and user experience. In addition, during the last six years, the library had not undergone any improvement or maintenance work so, the state of the art prior to the development of this work stands out for the lack of updates to the library in most of its modules and, firstly, in the Python language version implemented, specifically supporting up to version 2.7 and 3.3.+. 1.2’ Goals To comply with the motivations that arise from the execution of this work, the previously stablished objectives to be met can be classified as follows: Configuration of the development infrastructure. MEvoLib library update. Development of the workflow in Jupyter Notebook using MEvoLib library. Development of the workflow in Nextflow using MEvoLib library. Validation of the workflow with a case study. Elaboration of the project dissertation. Thus, the achievement of all of them under a mainly sequential methodology, materializes the three essential motivations and the object of explained work.
14 Additionally, to define the actions to be taken, a detailed work plan has been followed to guarantee compliance with each small task related to one of the main objectives. 1.3’ Work plan To achieve the objectives described in the previous section, a work plan is proposed, consisting of a series of successive tasks following an Agile methodology, supported by the JIRA tool to facilitate the tracking of different tasks, as well as the synchronization between different parts and their dependencies. Firstly, the configuration of the necessary environments in which the present work will be developed is carried out. The reasons and motivations for using different tools are also explained. This section will be detailed in Chapter 2 of this document. Secondly, a contextualization of the MEvoLib library and its most recent state in Python 2.7 is presented. Subsequently, the library is updated to adapt it to a newer version of Python. To do this, the existing code in Python 2.7 is reviewed and adjusted to meet the new standards of Python 3.10. This task is explained in Chapter 3. Thirdly, after updating to a more recent version of Python, the workflow of the library is implemented to perform the analysis of DNA sequences. This analysis focuses on studying the genetic composition of different organisms, identifying nucleotide sequences present in DNA, and investigating evolutionary relationships between organisms. To carry it out, it is essential to integrate the sequence downloading phase (Fetch), data cleaning, removal of irrelevant information, gene clustering (Cluster), and sequence alignment (Align) into an automated workflow to simplify processing for the end user. The workflow allows for the configuration of certain parameters, such as the names of organisms or genes to study. It should be noted that each of the aforementioned stages corresponds to one of the modules provided by the MEvoLib library, with the alignment phase being relevant for comparative sequence analysis and detection of DNA positions with mutations.
15 Initially, only the workflow of the Fetch and Cluster modules is implemented using Jupyter Notebooks. Then, following Chapter 4, the implemented workflow is transferred to the Nextflow tool, where the parameterization of the workflow is expanded to allow for greater customization of sequence analysis, and the workflow of the Align module, updated by Fátima Díaz Da Corte, is added. Chapter 5 briefly discusses the repositories used, as well as the source code of the present project. On the other hand, Chapter 6 is devoted to developing the main use case of the work. A detailed step-by-step explanation is provided for executing an example of the MEvoLib library's workflow based on the downloading, clustering, and alignment of mitochondrial genes from a tick species. In the last chapter of the document, an evaluation and analysis of the objectives are carried out, and the conclusions are presented. In addition, the encountered limitations that can serve as references for future work are highlighted. Finally, the Appendices section includes both the glossary of terms and a manual for the configuration and installation of the environments and tools used throughout the project.
16 1.3.1’ Task management As mentioned earlier, to establish an organized work plan, an Agile methodology has been followed, supported by the JIRA tool to facilitate tracking and synchronization of different tasks. The following figures depict the roadmap followed with each task, the corresponding dates (from September 2022 to May 2023), and effort indicators reflected as established meetings and lines of code modified in the source code. Figura 4: Roadmap of the work plan followed Source: Jira tool (Atlassian, 2023).
17 Figura 5: Gantt chart of the roadmap Source: Jira tool (Atlassian, 2023). Figura 6: Cumulative flow diagram Source: Jira tool (Atlassian, 2023). In addition, throughout the project, meetings have been scheduled every two weeks, with a duration of one hour each, to discuss the work done so far, potential obstacles encountered, and the next steps to be implemented. Therefore, a total of 30 team meetings have been conducted, amounting to 30 hours dedicated to this purpose. Furthermore, comparing the final code of the library with the original MEvoLib repository on GitHub, a total of 122 commits have been made, covering 110 files in the library and modifying a total of 3731 lines of code.
18 Lastly, the repository corresponding to the source code of the workflow, "parasitology," has been developed from scratch, consisting of a total of 435 lines of code.
19 Capítulo 2 - Infraestructura SetDev Antes de comenzar con el desarrollo de la disertación, conviene mencionar la motivación de uso de las herramientas que se han configurado para cumplir con el objeto de estudio del presente trabajo. En primer lugar, la elección del lenguaje Python viene previamente dada por la ya existente biblioteca MEvoLib, la cual, en sus inicios, contempla este lenguaje de alto nivel debido a su facilidad de uso, flexibilidad y gran cantidad de bibliotecas disponibles, en este caso concreto relacionadas con la bioinformática. En segundo lugar, el uso de Pyenv se justifica con la gestión de múltiples versiones de Python en un mismo sistema, dada la motivación de actualizar la biblioteca a la versión Python 3.10.6. De este modo, se puede cambiar fácilmente entre versiones de Python y administrar los paquetes y dependencias específicas para cada proyecto sin mayor dificultad. Del mismo modo, Pyenv-Virtualenv permite crear los entornos virtuales aislados para proyectos específicos, con su propia versión de Python y sus propias bibliotecas. Esto resulta de gran utilidad en este proyecto para evitar conflictos de dependencias y distinguir los entornos necesarios. Además, en vista a realizar contribuciones en el repositorio original de la biblioteca, se utiliza GitHub como sistema de control de versiones, rastreando los cambios en el código fuente del proyecto a lo largo del tiempo. Cabe destacar que las contribuciones a la rama correspondiente se pueden hacer indistintamente entre desarrolladores colaborando y compartiendo las actualizaciones pertinentes. En este mismo hilo, se emplea el editor de código fuente Visual Studio Code, el cual, gracias a la multitud de extensiones y personalización que presenta, resulta una herramienta de alta calidad. Además, su sencilla y completa integración con GitHub hace de este editor una aplicación clave para la gestión y colaboración es las distintas versiones de código fuente y módulos.
20 En cuanto al desarrollo del flujo de trabajo, en primer lugar se opta por desarrollar una previa versión inicial en Jupyter Notebook, debido a su sencillez e interfaz gráfica frente a Nextflow. Como se indica, Jupyter Notebook proporciona una plataforma interactiva en la que integrar código, ejecución, resultados, comentarios y visualización del proceso de descarga y análisis de las secuencias en un único documento haciendo que este sea fácil de compartir y reproducir. Seguidamente, Nextflow es una herramienta con matices más complejos que Jupyter Notebook pero cuyo alcance es mayor en términos de gestión y automatización del flujo de trabajo de Fetch, Cluster y Align, ya que permite desplegarlo y reproducirlo en varios entornos como servidores en la nube o computación local. De este modo, gestionando las tareas, recursos y dependencias de forma modular resulta más útil y eficiente para el desarrollo y ejecución del flujo de trabajo completo de MEvoLib. A su vez, se emplea la base de datos GenBank para la extracción de secuencias, ya que es una base de datos de acceso público que permite almacenar y distribuir datos de secuenciación. Es gestionada por el Centro Nacional para la Información Biotecnológica (NCBI). Su uso viene motivado por el aprovechamiento de los recursos existentes, ya que esta herramienta se encuentra implementada en la versión original de la biblioteca MEvoLib. En esta línea, se considera la incorporación de la base de datos ENA (European Nucleotide Archive) para ampliar los recursos disponibles de MEvoLib. Sin embargo, por el alcance del presente proyecto, no se termina implementando. Por último, la motivación principal de considerar Mafft en el módulo de Align como técnica de alineamiento múltiple de secuencias reside en la elección de una herramienta rápida y precisa para la alineación de las secuencias biológicas obtenidas tras la ejecución de los módulos anteriores, de la manera más eficiente posible. Para lograrlo, Mafft utiliza una variedad de técnicas avanzadas, como la optimización iterativa, la alineación progresiva y la alineación de guía, para obtener alineamientos de alta calidad. Además, es una de las herramientas más usada en la comunidad bioinformática para realizar alineamientos de secuencias biológicas.
21 Capítulo 3 - MEvoLib Tal y como se menciona en la introducción de este proyecto, y siguiendo las afirmaciones de Álvarez-Jarreta y Ruiz-Pesini (2016), los estudios centrados en la evolución molecular involucran problemáticas computacionales cuya resolución, en la mayoría de los casos, se aproxima de manera heurística. Este capítulo presenta la versión original de MEvoLib y las nuevas mejoras introducidas. De este modo, MEvoLib es la primera biblioteca de evolución molecular desarrollada para el lenguaje Python, proporcionando, así, un marco de trabajo consolidado con diversas herramientas y métodos comunes de los flujos de trabajo relacionados con la evolución molecular. A diferencia de las bibliotecas de bioinformática ya existentes, MEvoLib se centra en las etapas involucradas en los estudios de evolución molecular, consolidando el conjunto de herramientas de propósito común en una única interfaz de alto nivel con acceso rápido y parametrizaciones frecuentes. De este modo, el agrupamiento de genes a partir de secuencias parciales o, en el mejor de los casos, completas, se ha mejorado con la implementación de un método que aporta información externa accesible. Así, la información y conocimientos de los investigadores volcados en los datos de características de GenBank (base de datos de secuencias genéticas del NCBI) pueden ser procesados y empleados para optimizar el proceso de secuenciación. Además, con el objetivo de aprovechar correctamente los recursos del usuario, se han considerado ajustes y optimizaciones del proceso de conexión y obtención de información a partir de las bases de datos del Centro Nacional para la Información Biotecnológica de Estados Unidos, NCBI, junto con las paralelizaciones implementadas en vista a escalar la herramienta a proyectos de mayor tamaño.
22 3.1 MEvoLib inicial El funcionamiento de la biblioteca MEvoLib se apoya en diversas clases y módulos implementados en BioPython (Cock et al., 2009). De esta manera, MEvoLib cubre las tareas principales involucradas en los estudios de evolución molecular, incluyendo así: la obtención y agrupación de datos apoyados con el conocimiento biológico disponible, la alineación múltiple de secuencias, la inferencia filogenética y el ensamblaje filogenético. En la siguiente tabla se representan los módulos de MEvoLib según la categoría de trabajo a la que pertenece. Tabla 1: Procesos y módulos de MEvoLib Proceso Módulos Data rCRS Fetch BioSeqs, PhyTrees Cluster Naïve rows, Naïve colums, PRD, Genes Align Mafft, Clustal Omega, Muscle Inference FastTree, RAxML PhyloAssemble Consense Fuente: Álvarez-Jarreta y Ruiz-Pesini, 2016 Asimismo, el flujo de trabajo con la herramienta de MEvoLib desde la recopilación (Fetch) de los datos, la agrupación de los mismos (Cluster) y su respectivo alineamiento (Align) con la herramienta especificada (en este caso, Mafft) se puede plasmar en un ejemplo de uso motivador como encontramos en la Figura 1. Además, se puede observar que el flujo de trabajo mencionado puede ampliarse a la inferencia
29 MEvoLib.PhyloAssemble Por último, este módulo de MEvoLib se centra en la implementación del proceso de estimación de árboles de consenso. Para la obtención del árbol de consenso de un conjunto de árboles filogenéticos, la interfaz requiere especificar: la herramienta a emplear, el archivo de árbol de entrada, el formato de archivo y la lista de argumentos de la herramienta. El árbol de consenso resultante se devuelve en un objeto Tree (BioPython). Además, PhyloAssemble también incluye la funcionalidad de conversión automática de formato. La primera versión de MEvoLib incorpora una versión modificada del método Consense de PHYLIP (Felsenstein, 2006) para el proceso de estimación del árbol de consenso. La implementación de esta versión modificada de Consense permite incorporar dos nuevos argumentos: las rutas de los archivos de entrada y las rutas de los archivos de salida, para así evitar posibles problemas de ejecución en infraestructuras como clústeres. 3.2 Actualización de MEvoLib La biblioteca de MEvoLib no ha sido actualizada desde su primera versión, lanzada en 2016. De este modo, en sus inicios fue desarrollada para soportar Python 2.7 y 3.3+, pero las nuevas actualizaciones y funcionalidades añadidas en Python 3.10+ actualmente no se contemplan en la biblioteca, lo cual es un área de mejora que se pretende explotar en este proyecto. Las actualizaciones se han centrado en el copyright y los módulos de Fetch, Cluster y Align. En los párrafos siguientes, se detalla en profundidad las modificaciones introducidas,
30 Primeramente, los archivos de licencia de copyright se han actualizado junto con los términos y condiciones de uso, reproducción y distribución, utilizando como referencia la página oficial de Apache (versión 2). En primera instancia, el primer módulo del que analizaremos la actualización es MEvoLib.Fetch, para seguir el orden del flujo de trabajo. Para esta primera revisión y actualización del código, el archivo __init__.py correspondiente a Fetch se ejecuta automáticamente, de modo que todas las importaciones del módulo correspondiente y de los módulos importados en él deben ser tratadas como importaciones absolutas (desde la raíz del paquete), en lugar de relativas (desde el presente directorio o de sus padres). Del mismo, modo, la clase BioSeqs se adapta a la nueva licencia actualizada, y cada línea de su código es revisada y adaptada a la versión de Python 3.10, como se puede ver en las referencias adjuntadas en el apartado referente al código fuente. Asimismo, las funciones principales que se han visto modificadas en mayor medida del módulo de MEvoLib.Fetch.BioSeqs han sido: Tabla 2: Principales funciones actualizadas del módulo MEvoLib.Fetch.BioSeqs Función Descripción _get_entrez_db_rettype Comprobación para verificar que la base de datos dada está soportada en la clase BioSeqs, comparándola con el diccionario correspondiente _estimate_batch_size Estimación del tamaño del lote de procesamiento, considerando una velocidad de descarga de 1 Mbps y un tiempo máximo de búsqueda deseable de 5 minutos por lote
31 __init__ Función de inicialización de la clase encargada de crear el objeto BioSeqs con la información del diccionario de secuencias y su archivo de reporte asociado from_bioseqs y from_seqfile Creación del objeto BioSeqs recuperando toda la información de los archivos de secuencia y de informe previamente guardados from_entrez Creación del objeto BioSeqs a partir de la búsqueda de las secuencias coincidentes con la consulta correspondiente a la base de datos proporcionada del NCBI __len__ Cálculo del número total de secuencias __str__ Impresión de las secuencias de manera formalizada include Añade la información del archivo de secuencia al objeto BioSeqs join Función empleada para la unión de dos objetos BioSeqs update Actualización del objeto BioSeqs con los últimos valores incluidos en la base de datos del NCBI write Guardado de todas las secuencias relativas al objeto BioSeqs en un archivo con formato GENBANK (.gb), además del correspondiente archivo de reporte statistics Cálculo del número total de secuencias guardadas junto con su media, desviación, mínimos y máximos Fuente: Elaboración propia Como se ha mencionado previamente, para una visión más detallada de los cambios realizados, se pueden analizar los commits realizados en los repositorios de GitHub enlazados en el apartado de código fuente.
32 En segundo lugar, el siguiente módulo actualizado es MEvoLib.Cluster. Tras dicha revisión, el archivo __init__.py correspondiente a este módulo se ejecuta automáticamente para descomprimir la secuencia de ADN y el nombre del archivo FASTA de destino. Dentro de este módulo, la clase Genes se adapta a la nueva licencia actualizada, y cada línea de su código es revisada y adaptada a la versión de Python 3.10+, (ver referencias del apartado de código fuente). En resumen, las principales funciones implicadas en la actualización de la clase de este módulo han sido: Tabla 3: Principales funciones actualizadas del módulo MEvoLib.Cluster.Genes Función Descripción _normalization Normaliza el input de la secuencia con la referencia de la misma _string_filter Devuelve el input introducido en la base de datos con las correcciones pertinentes para adaptarlo al formato de GenBank get_features Devuelve una lista con todas las palabras clave que se pueden encontrar en cualquier registro de consulta de GenBank map_seqs Empalma los genes de la lista de secuencias dada Fuente: Elaboración propia Por otro lado, la principal función actualizada de las clases MEvoLib.Cluster.NaiveCols y MEvoLib.Cluster.NaiveRows es map_seqs, en la que se concatenan las secuencias de ADN de la lista dada según el número de conjunto dados según las columnas o las filas, respectivamente.
33 Además, en cuanto a la clase MEvoLib.Cluster.PRD, las únicas dos funciones presentes y cuyo código ha sido revisado y actualizado son _prd_decomposition y map_seqs, con las que, primeramente, se aplica la descomposición PRD propia del sistema DACTAL al archivo del árbol con la superposición dada, tal y como se especificaba anteriormente y, a continuación, se genera un mapa de las secuencias en conjuntos. En tercer lugar, se actualiza el módulo de MEvoLib.Align, por Fátima Díaz Da Corte, en vista a continuar adaptando el conjunto de la biblioteca. Tabla 4: Principales funciones actualizadas del módulo MEvoLib.Align Función Descripción get_tools Devuelve la lista de herramientas de alineamiento incluidas en la versión actual de MEvoLib get_keywords Devuelve un diccionario con las palabras clave y sus argumentos correspondientes get_alignment Devuelve las secuencias alineadas Fuente: Elaboración propia Cabe destacar que la actualización de este módulo se ha enfocado en un único software de alineamiento múltiple de secuencias, Mafft. Este software utiliza técnicas basadas en la transformada de Fourier, herramienta matemática utilizada para analizar señales en el dominio de una frecuencia. En este contexto, el empleo de esta metodología permite comparar las secuencias de manera más rápida y eficiente. A pesar de que en este trabajo se ha focalizado en el empleo de Mafft, la biblioteca también cuenta con otras dos herramientas MSA, concretamente Clustal Omega y Muscle, con las cuales se puede trabajar especificándolo en los argumentos y siguiendo la misma parametrización con la que se utiliza Mafft.
34
35 Capítulo 4 - Workflow En el presente proyecto, el desarrollo de un flujo de trabajo efectivo es esencial para garantizar la correcta ejecución del plan del proyecto y alcanzar los resultados esperados. Las dos principales herramientas para ejecutar este tipo de flujos de trabajos de datos que se han contemplado han sido Jupyter Notebook y Nextflow. En este capítulo, se plasma cómo desarrollar un primer flujo de trabajo del proyecto de MEvoLib en Jupyter Notebook, configurando la herramienta y construyendo un cuaderno de trabajo sencillo disponible para su ejecución. En segundo lugar, se realiza una migración del workflow desarrollado en Jupyter Notebook a la herramienta de Nextflow para, posteriormente, añadir los módulos restantes y expandir la parametrización que permita una mayor configuración del flujo de trabajo. 4.1 Workflow en Jupyter Notebook Tal y como se ha presentado en la instalación de las herramientas del capítulo SetDev, Jupyter Notebook permite la ejecución de código de varios lenguajes de programación con diversas formas de visualización. El objetivo primero de este cuaderno del flujo de trabajo es recuperar todas las secuencias de ADN mitocondrial de referencia (RefSeq) en GenBank para el género de garrapatas Ixodes. Además, se analizan las secuencias descargadas para obtener estadísticas básicas sobre el proceso de ejecución, como la longitud media, máxima y mínima de las secuencias, cuáles no poseen información adicional y datos relevantes que puedan ser de interés para el desarrollo de futuras etapas del flujo.
36 En primer lugar, añadimos la etapa de descarga o fetching al flujo de trabajo de la siguiente manera: Figura 8: Código de la fase de fetching, flujo de trabajo en Jupyter Notebook Fuente: Elaboración propia Y se analizan las secuencias descargadas para obtener estadísticas básicas relativas al número total de secuencias almacenadas, la media aritmética de los elementos de la matriz de las secuencias, la desviación estándar de la longitud de las secuencias y los valores extremos de su longitud. Por último, se procede a guardar la información en un fichero con formato GENBANK con los objetos SeqRecord obtenidos. De este modo, una vez obtenidas las secuencias deseadas, se procede a añadir la etapa de agrupamiento o clustering al flujo de trabajo, para realizar la división de las secuencias en genes. Figura 9: Código de la fase de clustering, flujo de trabajo en Jupyter Notebook Fuente: Elaboración propia
37 De este modo, con la ejecución secuencial de estos fragmentos de código, podemos formalizar un Jupyter Notebook en el que, automáticamente, se descarguen, analicen y agrupen las secuencias deseadas por el usuario. Una vez ejemplificado este proceso, se procede a realizar la migración a Nextflow, herramienta con la que generalizaremos y parametrizaremos el flujo de trabajo presentado en Jupyter Notebook mediante la integración de los tres módulos principales de MEvoLib: Fetch, Cluster y Align. 4.2 Workflow en Nextflow La segunda herramienta contemplada para la implementación del flujo de trabajo de MEvoLib es Nextflow. En este apartado, se continua con el objetivo de la sección anterior y se migra el flujo de trabajo desarrollado en Jupyter Notebook. A mayores, se extiende la parametrización para incluir tanto la personalización de dicho flujo como el módulo de Align, o alineamiento, de la biblioteca. Como se menciona en capítulos anteriores, Nextflow presenta un marco de flujo de trabajo y lenguaje de programación DSL que facilita la escritura de flujos de trabajo computacionales intensivos de datos. El script de flujo de trabajo implementado para el workflow está compuesto principalmente de tres procesos (Processes) diferentes, uno para cada módulo de Fetch, Cluster y Align, una llamada al flujo de trabajo (workflow) y un archivo de configuración. En cuanto a los procesos, estos se ejecutan de manera independiente y están aislados entre sí, es decir, no comparten un estado común. Para la comunicación de los procesos se utilizan canales (Channels), tanto de entrada (input) como de salida (output). Estos canales son colas FIFO asíncronas. Dentro de cada proceso, se observan tres bloques distintos. El primer bloque, input, define el canal de entrada por el que cada proceso recibe la información. Así mismo, el bloque output hace referencia al canal de salida del proceso. El tercer y último bloque es el script, que representa el comando que ejecuta el flujo.
38 Además, se especifica un directorio de publicación (publishDir) donde se almacenan los archivos de salida, con el modo de copia (mode: 'copy') y la opción de no sobrescribir archivos existentes (overwrite: false). En este caso, los scripts de cada proceso ejecutan un comando de Shell que realiza una llamado a las funciones main respectivas de cada módulo. Dentro de las funciones main se leen los parámetros de entrada y se llama a la función principal de cada módulo. La definición de estos comandos se realiza en el archivo pyproject.toml que se encuentra dentro de la biblioteca MEvoLib. Cabe resaltar que los archivos del workflow con extensión de Nextflow (.nf) se desarrollan en el repositorio de parasitology, dentro de la rama nextflow, en la cual la llamada al flujo de trabajo y la configuración se encuentran en la carpeta worflows y los procesos en la carpeta modules. En referencia al proceso del primer módulo, Fetch, se crea el archivo fetch_seqs.nf. En él, se incluye el primero de los procesos, llamado FETCH_SEQS. Figura 10: Proceso del módulo de Fetch Fuente: Elaboración propia
45 Capítulo 5 - Código Fuente Esta sección del presente documento pretende recoger brevemente las referencias a los repositorios y códigos fuentes utilizados para la elaboración del proyecto. En primer lugar, el código fuente de la biblioteca MEvoLib se encuentra en el repositorio de GitHub de Jorge Álvarez Jarreta (JAlvarezJarreta/MEvoLib: Molecular Evolution Library for Python, 2016/2023). https://github.com/JAlvarezJarreta/MEvoLib/tree/version/2.0 Este repositorio cuenta con las ramas main, dev/nextflow, dev/v2.0 y version/2.0. Esta última siendo sobre la que se ha trabajado principalmente. Para trabajar en MEvoLib, se han creado dos repositorios a mayores haciendo una copia (fork) del repositorio original. Estos repositorios son: (sansanpre/MEvoLib: Molecular Evolution Library for Python2022/2023) https://github.com/sansanpre/MEvoLib/tree/version/2.0 (repmess/MEvoLib: Molecular Evolution Library for Python, 2022/2023) https://github.com/repmess/MEvoLib/tree/version/2.0 A su vez, se ha usado el código fuente del repositorio de parasitology de Jorge Álvarez Jarreta (JAlvarezJarreta/parasitology, 2018/2022). Este repositorio cuenta con las ramas de main, jupyterwf y nextflow. En la rama de jupyterwf se incluye el flujo de trabajo implementado en la herramienta de Jupyter Notebook y en la rama de nextflow se incorpora el flujo de trabajo generado con la herramienta de Nextflow. Al igual que con el repositorio de MEvoLib, se ha creado un repositorio nuevo a través de la opción de copia (fork). Este repositorio es: (sansanpre/parasitology, 2023/2022) https://github.com/sansanpre/parasitology/tree/nextflow
46
47 Capítulo 6 - Caso de Uso En el capítulo 1 del presente documento se explica la importancia del procesamiento y análisis de ADN, específicamente del ADN mitocondrial. Es por ello que el caso de uso que se presenta en este apartado pretende mostrar el paso a paso para realizar la recopilación y el tratamiento de datos de secuencias de ADN mitocondrial de la familia de las garrapatas para su análisis. La ejecución de la biblioteca y de su flujo de trabajo se realiza en la plataforma de Visual Studio Code utilizando la herramienta de Nextflow. Para ello, se debe tener el entorno virtual activo y encontrarse en el directorio raíz de MEvoLib y parasitology. Para la query de consulta, se utilizan las variables species y ref_seq, de tal forma que: • species = Dermacentor • ref_seq = mitochondrion Además, se propone como valor para la variable name dermacentor. La palabra Dermacentor hace referencia a un género de la familia de las garrapatas. Otro ejemplo de garrapata sería el género Ixodes. Para obtener las estadísticas de la ejecución del flujo de trabajo con Nextflow, se incluye -with-report a la línea de comando cuando se lanza su ejecución. Por lo tanto, la línea de comando final que se ejecuta es: Figura 18: Ejemplo línea de comando para el caso de uso Fuente: Elaboración propia
48 Tras la ejecución de la línea anterior, Nextflow lanza a ejecución los distintos procesos. Se puede observar la cantidad de veces que lanza cada proceso: en este caso 1 proceso ejecutado para Fetch y Cluster (que se ejecutan de forma secuencial), respectivamente, y 130 procesos ejecutados para Align (que se ejecutan de forma concurrente). Figura 19: Ejemplo ejecución de Nextflow del caso de uso Fuente: Elaboración propia Cuando finaliza el flujo de trabajo, aparecen dos directorios nuevos: • work: en este directorio se almacenan los ficheros de salida de los procesos, así como los ficheros tipo command.out, command.log, command.err, command.begin, command.run y command.sh. Figura 20: Ejemplo de directorio work del caso de uso Fuente: Elaboración propia
49 • data: en este directorio se guardan los ficheros de salidas de los distintos procesos. Figura 21: Ejemplo del directorio data del caso de uso Fuente: Elaboración propia Finalmente, en el directorio de data en la carpeta del ejemplo del caso de uso se encuentra el reporte generado por Nextflow, el cual es un archivo en formato HTML que se encuentra adjuntado en el Apéndice C. Figura 22: Reporte generado en el caso de uso de la máquina local Fuente: Elaboración propia Además, con el objetivo de analizar el alcance del proyecto y su desempeño, se ha experimentado con la ejecución de MEvoLib y Nextflow en un servidor proporcionado por la Facultad de Informática de la Universidad Complutense de Madrid. De este modo, lanzando el proyecto en dicho servidor y observando el reporte correspondiente generado (ver Apéndice D) se puede apreciar que el tiempo de
50 ejecución de la misma query disminuye respecto al proyecto lanzado en la máquina local. Figura 23: Información sobre la CPU del servidor Fuente: Elaboración propia Figura 24: Información sobre la CPU de la máquina local Fuente: Elaboración propia
51 Figura 25: Reporte generado en el caso de uso del servidor Fuente: Elaboración propia Asimismo, con la comparación de ambos reportes (ver Apéndices C y D) se puede apreciar que el uso de máquinas más potentes, como es el caso del servidor, reducirá hasta un 33% el uso de CPU, escalable a proyectos de mayor volumen. Además del servidor, el flujo de trabajo de Netxflow se puede ejecutar en servidores en la nube, que mejorarían el rendimiento aún más. De esta manera, se puede apreciar claramente que el módulo de Fetch supone un cuello de botella en cualquiera de las máquinas, ya que las conexiones de este método han de realizarse a la base de datos de GenBank y, por tanto, dependen del tráfico que haya en esta y de la velocidad máxima que permita la conexión. Por otro lado, la ventaja significativa recae en el uso de recursos más potentes en el método de Align, en el que se pueden realizar los alineamientos, en este caso de las 132 secuencias, en paralelo para así disminuir notablemente la métrica relativa al consumo de CPU.
52
53 Capítulo 7 - Conclusiones y Trabajo Futuro Tal y como se indica en el Capítulo 1 destinado a la introducción, las motivaciones de este trabajo se plasman en la consecución de diversos objetivos manifestados, también, en dicho capítulo. De este modo, para concluir el trabajo realizado en este proyecto, se procede a evaluar la realización de dichos objetivos, las limitaciones que se han presentado y las futuras acciones propuestas. En primer lugar, la configuración de la infraestructura de desarrollo se ha completado correctamente, ya que sobre ella se ha procedido a completar la actualización de la biblioteca MEvoLib, terminada en su totalidad y presentando, así, la biblioteca adaptada totalmente a la versión de Python 3.10. De este modo, con el desarrollo del flujo de trabajo en Jupyter Notebook y posteriormente en Nextflow, se consigue presentar un flujo de trabajo organizado, sencillo, útil y eficaz con el que el usuario puede desarrollar sus trabajos con la obtención, limpieza y alineación de las secuencias de ADN que considere necesarias para sus investigaciones. Además, con la escritura del presente documento, el usuario podrá reforzar cualquier concepto que considere pertinente, además de poder consultar cualquier duda en cuanto al desarrollo del código fuente, la descripción precisa de los módulos de la biblioteca y el ejemplo del caso de uso que puede guiarle para el desarrollo de su propia investigación. El flujo de trabajo implementado para la ejemplificación de varios casos de uso ha sido validado por un experto en el ámbito de las ciencias biológicas, en el que la utilidad de MEvoLib se vio reflejada tanto en eficacia como en interés para el desarrollo de futuros trabajos de investigación. Por otro lado, una de las limitaciones principales que se ha identificado durante el desarrollo del proyecto ha sido el gran volumen de mejoras y novedades que se
54 podrían desarrollar entorno al objeto de estudio del presente trabajo, que quedan fuera del alcance de este debido a que no el plan de trabajo no pudo contemplarlas por falta de, principalmente, tiempo y carga de trabajo. Como futura mejora consideramos, por ejemplo, la configuración e implementación de pruebas software mediante la biblioteca pytest; o la actualización del módulo de MEvoLib encargado en la construcción de árboles filogenéticos, formado por los módulos de inference y phyloassemble que todavía se encuentran en la versión original de Python, así como su incorporación como nueva tarea al flujo de trabajo diseñado en Nextflow. Por último, de cara al trabajo futuro, además de volver a considerar las limitaciones mencionadas, encontramos relevancia en presentar una interfaz de usuario más vistosa y amigable, en la que la parametrización se pueda realizar por medio de menús y botones disponibles en la aplicación, mejorando así la experiencia de usuarios menos familiarizados con la ejecución de comandos en terminales. Además, se valora la opción de ampliar los casos de uso a diferentes ámbitos científicos, expandiendo la biblioteca a otros sectores de la biología, en los cuales podrá impulsar y facilitar trabajos de investigación.
61 Simple Python Version Management: Pyenv. (2023). [Roff]. pyenv. https://github.com/pyenv/pyenv (Original work published 2012) Stamatakis, A. (2006). RAxML-VI-HPC: maximum likelihood-based phylogenetic analyses with thousands of taxa and mixed models. Bioinformatics, 22(21), 2688–2690. Visual Studio Code—Code Editing. Redefined. (s. f.). Recuperado 13 de mayo de 2023, de https://code.visualstudio.com/ Welcome to Python.org. (2023, mayo 11). Python.Org. https://www.python.org/
62
63 Apéndices Apéndice A – Glosario de términos Con el objetivo de facilitar la lectura y entendimiento de este proyecto, en el presente apéndice se recogen los conceptos más relevantes a tener en cuenta en relación al objeto de estudio. • Secuencia de ADN: conjunto lineal de nucleótidos (moléculas) que conforman la molécula compleja de ADN, en la cual se encuentra la información genética del organismo. • Mitocondria: órgano celular encargado de la producción de energía para la célula eucariota. • ADN nuclear: forma predominante del ADN en las células, organizado en forma de cromosomas y heredado de ambos progenitores. Contiene la mayor parte de la información genética de un organismo. • ADN mitocondrial: molécula de ADN dentro de las mitocondrias, heredado únicamente de la madre y con la información genética necesaria para la producción de proteínas y enzimas. • Filogenética: estudio de las relaciones evolutivas entre organismos y su historia evolutiva. • Alineamiento de secuencias: técnica de bioinformática empleada para comparar dos o más secuencias biológicas y localizar las regiones en las que se asemejan. • Big Data: conjunto de datos masivos, complejos y variables cuyo tratamiento implica técnicas de procesamiento especializadas.
64 • Entorno virtual: un entorno virtual de Python es una copia independiente del intérprete y las bibliotecas instaladas en un sistema que se puede utilizar para trabajar en proyectos sin que afecte a otros. • Python: lenguaje de programación interpretado de alto nivel utilizado en multitud de sectores por su sencillez y claridad. • Biopython: biblioteca de Python de utilidad en el ámbito de la bioinformática, diseñada para procesamiento, análisis y visualización de datos biológicos por parte de programadores y científicos. • Domain Specific Languaje (DSL): el Lenguaje Específico de Dominio es una lenguaje de programación diseñao para abordar un ámbito específico de aplicación. A diferencia de los lenguajes de programación generales, los DSL se centran en un dominio particular, proporcionando una sintaxis y abstracciones específicas para ese ámbito.
65 Apéndice B – Manual de instalación Como se ha comentado en el apartado de Plan de Trabajo, en este apéndice se explica el proceso de instalación que se ha seguido para configurar las herramientas y entornos de trabajo. Todos los manuales y páginas oficiales mencionados en los siguientes párrafos se encuentran recogidos en la bibliografía, para facilitar el acceso y lectura del presente apéndice. Antes de comenzar, conviene destinar un directorio exclusivo en nuestro sistema de ficheros de Linux. En este caso, utilizaremos como ejemplo el directorio ./TFG en Ubuntu. Accediendo a la terminal, el siguiente paso es instalar Python. Como se va a trabajar con diferentes versiones de este lenguaje, ya que uno de los objetivos es actualizar MEvoLib a una versión más moderna, se ha optado por implementar la herramienta de gestión de versiones Pyenv, la cual permite administrar fácilmente múltiples versiones de Python en el mismo sistema. De esta forma, es posible instalar distintas versiones en el ordenador y cambiar entre ellas según sea necesario. A su vez, esta herramienta se encarga de configurar el entorno para cada versión de Python, incluyendo, por ejemplo, las bibliotecas estándar y la ruta de acceso a los binarios. Para instalar Pyenv rápidamente, se puede seguir el manual que encontramos en la página oficial citada en la bibliografía, clonando el repositorio correspondiente y siguiendo la metodología descrita. Una vez configurado Pyenv, se procede a instalar la versión de Python necesaria, en este caso, la versión 3.10.6. Posteriormente, se procede a crear el entorno virtual en el que desarrollar el trabajo. Para ello, se instala la herramienta de Pyenv-Virtualenv, plugin de Pyenv que
66 permite gestionar y crear entornos virtuales de Python. Cada entorno virtual creado se almacena en una carpeta separada en el sistema, para así mantener versiones diferentes de Python y bibliotecas en cada proyecto. A continuación, se crea y activa un entorno virtual al que, por ejemplo, denominar mtdna, con la versión de Python 3.10.6 asignada. Una vez configurada e instalada la infraestructura general, se procede a utilizar la herramienta GitHub, plataforma de almacenaje y colaboración de código fuente que permite a los desarrolladores trabajar en proyectos en equipo. El uso de esta herramienta posibilita el guardado, revisión y colaboración en el código por parte de varios usuarios, además de contribuciones en proyectos de código abierto. Asimismo, también conviene utilizar una plataforma de entorno de desarrollo integrado (IDE) como, por ejemplo, Visual Studio Code. Esta plataforma IDE de Microsoft ofrece una gran cantidad de herramientas y características como editores de código, depuradores, herramientas de control de versiones, compiladores o diseñadores de interfaces de usuarios; además de ser compatible con multitud de lenguajes de programación. A continuación, se detalla la instalación de las herramientas necesaria para alcanzar los objetivos que se detallan en el presente trabajo. Para la actualización de la biblioteca MEvoLib se realiza, en primera instancia, una ramificación del repositorio original de la biblioteca de Jorge Álvarez Jarreta (Alvarez-Jarreta, 2016/2022) a repositorios propios. Una vez creado el repositorio de MEvoLib en la cuenta personal de GitHub, se debe clonar e instalar en el propio sistema, desde la consola de comandos. La clonación se realiza para la rama version/2.0 sobre la que se trabaja. De este modo, el entorno está preparado para actualizar la biblioteca a una versión más reciente de Python, como se detalla en el Capítulo 3.
67 Para implementar el flujo de trabajo de la biblioteca, explicado en el Capítulo 4, ha sido necesario configurar dos herramientas. En primer lugar, se realiza un flujo de trabajo inicial en Jupyter-Notebooks. Esta herramienta es un entorno de programación interactivo basado en la web que permite crear y compartir documentos de código ejecutable, texto explícito y visualizaciones. Cabe destacar que su nombre, Jupyter, proviene de los lenguajes de programación que soporta (Julia, Python y R). Para el segundo flujo de trabajo se utiliza la herramienta de Nextflow, una plataforma de flujo de trabajo diseñada para el análisis de datos y la bioinformática. En ella, se pueden definir y ejecutar flujos de trabajo de manera sencilla y reproducible en distintos entornos como clústeres, servidores en la nube y computación local. Además, es interesante mencionar que Nextflow utiliza un lenguaje de programación basado en DSL o Lenguaje Específico de Dominio y que, para su instalación, se ha de tener una versión de Java 8 o posterior. Finalmente, es necesaria la instalación de la herramienta de Mafft para por realizar los alineamientos en el flujo de trabajo. Mafft es un software de alineación múltiple de secuencias de ADN, ARN y proteínas. De este modo, la biblioteca y, en concreto, el módulo de Align tienen a su disposición la herramienta de Mafft para ejecutar la alineación múltiple de secuencias, en este caso de ADN mitocondrial.
69
70 Apéndice C – Reporte de la máquina local