BioJava - BioJava

BioJava
BioJava-logo-full.png
Autor (es) original (is) Andreas Prlić
Desenvolvedor (s) Amr ALHOSSARY, Andreas Prlic, Dmytro Guzenko, Hannes Brandstätter-Müller, Thomas Down, Michael L Heuer, Peter Troshin, JianJiong Gao, Aleix Lafita, Peter Rose, Spencer Bliven
lançamento inicial 2002 ; 19 anos atras ( 2002 )
Versão estável
5.2.1 / 5 de fevereiro de 2019 ; 2 anos atrás ( 05/02/2019 )
Repositório github .com / biojava
Escrito em Java
Plataforma Navegador da web com Java SE
Disponível em inglês
Modelo Bioinformática
Licença GPL 2.1 menor
Local na rede Internet biojava .org

BioJava é um projeto de software de código aberto dedicado a fornecer ferramentas Java para processar dados biológicos . BioJava é um conjunto de funções de biblioteca escritas na linguagem de programação Java para manipular sequências, estruturas de proteínas, analisadores de arquivos, interoperabilidade de Common Object Request Broker Architecture (CORBA), Distributed Annotation System (DAS), acesso a AceDB , programação dinâmica e estatísticas simples rotinas. O BioJava suporta uma grande variedade de dados, desde sequências de DNA e proteínas até o nível de estruturas de proteínas 3D. As bibliotecas BioJava são úteis para automatizar muitas tarefas bioinformáticas diárias e mundanas , como analisar um arquivo Protein Data Bank (PDB), interagir com Jmol e muito mais. Esta interface de programação de aplicativos (API) fornece vários analisadores de arquivos, modelos de dados e algoritmos para facilitar o trabalho com os formatos de dados padrão e permite o desenvolvimento e análise de aplicativos rápidos.

Projetos adicionais do BioJava incluem rcsb-sequenceviewer, biojava-http, biojava-spark e rcsb-viewers.

Recursos

BioJava fornece módulos de software para muitas das tarefas típicas de programação de bioinformática. Esses incluem:

  • Acessando dados de sequência de nucleotídeos e peptídeos de bancos de dados locais e remotos
  • Transformando formatos de banco de dados / registros de arquivo
  • Análise e manipulação da estrutura da proteína
  • Manipulando sequências individuais
  • Procurando sequências semelhantes
  • Criação e manipulação de alinhamentos de sequência

História e publicações

O projeto BioJava surgiu do trabalho de Thomas Down e Matthew Pocock para criar uma API para simplificar o desenvolvimento de ferramentas de bioinformática baseadas em Java. BioJava é um projeto ativo de código aberto que foi desenvolvido ao longo de mais de 12 anos e por mais de 60 desenvolvedores. BioJava é um de vários projetos Bio * projetados para reduzir a duplicação de código. Exemplos de tais projetos que se enquadram em Bio * além de BioJava são BioPython , BioPerl , BioRuby , EMBOSS etc.

Em outubro de 2012, o primeiro artigo sobre BioJava foi publicado. Este artigo detalhou os módulos, funcionalidades e objetivos do BioJava.

Em novembro de 2018, o Google Scholar contabiliza mais de 130 citações.

O artigo mais recente sobre BioJava foi escrito em fevereiro de 2017. Este artigo detalhou uma nova ferramenta chamada BioJava-ModFinder. Esta ferramenta pode ser usada para identificação e mapeamento subsequente de modificações de proteínas para 3D no Protein Data Bank ( PBD ). O pacote também foi integrado com o aplicativo da web RCSB PDB e adicionou anotações de modificação de proteína ao diagrama de sequência e exibição da estrutura. Mais de 30.000 estruturas com modificações de proteínas foram identificadas usando BioJava-ModFinder e podem ser encontradas no site RCSB PDB.

No ano de 2008, foi publicada a primeira nota de aplicação do BioJava. Ele foi migrado de seu repositório CVS original para o hub Git em abril de 2013. O projeto foi movido para um repositório separado, BioJava-legacy, e ainda é mantido para pequenas alterações e correções de bugs.

A versão 3 foi lançada em dezembro de 2010. Foi uma atualização importante para as versões anteriores. O objetivo deste lançamento era reescrever o BioJava para que pudesse ser modularizado em componentes pequenos e reutilizáveis. Isso permitiu que os desenvolvedores contribuíssem com mais facilidade e reduzissem as dependências. A nova abordagem vista no BioJava 3 foi modelada após o Apache Commons .

A versão 4 foi lançada em janeiro de 2015. Esta versão trouxe muitos novos recursos e melhorias para os pacotes biojava-core, biojava-structure, biojava-structure-gui, biojava-phylo, entre outros. BioJava 4.2.0 foi o primeiro lançamento disponível usando o Maven no Maven Central.

A versão 5 foi lançada em março de 2018. Isso representa um marco importante para o projeto. BioJava 5.0.0 é o primeiro lançado baseado em Java 8, que introduz o uso de funções lambda e chamadas de API de streaming. Também houve mudanças importantes no módulo de estrutura de biojava. Além disso, os modelos de dados anteriores para estruturas macromoleculares foram adaptados para representar mais de perto o modelo de dados mmCIF . Este foi o primeiro lançamento em mais de dois anos. Algumas das outras melhorias incluem otimizações no módulo de estrutura de biojava para melhorar a detecção de simetria e suporte adicionado para formatos MMTF. Outras melhorias gerais incluem atualizações Javadoc, versões de dependência e todos os testes agora são Junit4. O lançamento contém 1.170 commits de 19 contribuidores.

Módulos

Durante 2014-2015, grandes partes da base de código original foram reescritas. BioJava 3 é uma partida clara da versão 1 da série. Ele agora consiste em vários módulos independentes construídos usando uma ferramenta de automação chamada Apache Maven . Esses módulos fornecem ferramentas de última geração para comparação de estruturas de proteínas, alinhamentos de sequências em pares e múltiplos, trabalhando com sequências de DNA e proteínas, análise de propriedades de aminoácidos, detecção de modificações de proteínas, previsão de regiões desordenadas em proteínas e analisadores para arquivo comum formatos usando um modelo de dados biologicamente significativo. O código original foi movido para um projeto de legado BioJava separado, que ainda está disponível para compatibilidade com versões anteriores.

O BioJava 5 introduziu novos recursos para dois módulos, biojava-alinhamento e biojava-structure.

As seções a seguir descreverão vários dos novos módulos e destacarão alguns dos novos recursos incluídos na versão mais recente do BioJava.

BioJava 5 Module Layout.png

Módulo Núcleo

Este módulo fornece classes Java para modelar sequências de aminoácidos ou nucleotídeos . As aulas foram projetadas para que os nomes sejam familiares e façam sentido para os biólogos e também forneçam uma representação concreta das etapas de uma sequência de genes para uma sequência de proteínas para cientistas da computação e programadores.

Uma grande mudança entre o projeto legado do BioJava e o BioJava3 está na maneira como a estrutura foi projetada para explorar as inovações em Java. Uma sequência é definida como uma interface genérica permitindo que o resto dos módulos criem qualquer utilitário que opere em todas as sequências. Classes específicas para sequências comuns, como DNA e proteínas, foram definidas a fim de melhorar a usabilidade para biólogos. O mecanismo de tradução realmente alavanca esse trabalho, permitindo conversões entre sequências de DNA, RNA e aminoácidos. Esse mecanismo pode lidar com detalhes como a escolha da tabela de códons, a conversão de códons iniciais em metionina, o corte de códons de parada, a especificação do quadro de leitura e o processamento de sequências ambíguas.

Atenção especial foi dada ao projeto do armazenamento de sequências para minimizar as necessidades de espaço. Padrões de design especiais, como o padrão Proxy, permitiram que os desenvolvedores criassem a estrutura de forma que as sequências pudessem ser armazenadas na memória, buscadas sob demanda em um serviço da web como o UniProt ou lidas em um arquivo FASTA, conforme necessário. As duas últimas abordagens economizam memória, não carregando dados de sequência até que sejam referenciados no aplicativo. Este conceito pode ser estendido para lidar com conjuntos de dados genômicos muito grandes, como o NCBI GenBank ou um banco de dados proprietário.

Módulos de estrutura de proteína

Image
Esta janela mostra duas proteínas com IDs "4hhb.A" e "4hhb.B" alinhadas uma contra a outra. O código é fornecido no lado esquerdo. Ele é produzido usando bibliotecas BioJava que, por sua vez, usam o visualizador Jmol. O algoritmo rígido FATCAT é usado aqui para fazer o alinhamento.

Os módulos de estrutura de proteínas fornecem ferramentas para representar e manipular estruturas biomoleculares 3D. Eles se concentram na comparação da estrutura da proteína.

Os algoritmos a seguir foram implementados e incluídos no BioJava.

  • Algoritmo FATCAT para alinhamento de corpos rígidos e flexíveis.
  • O algoritmo de Extensão Combinatória (CE) padrão.
  • Uma nova versão do CE que pode detectar permutações circulares em proteínas.

Esses algoritmos são usados ​​para fornecer a Ferramenta de Comparação de Proteínas do Banco de Dados de Proteínas RCSB (PDB), bem como comparações sistemáticas de todas as proteínas no PDB semanalmente.

Analisadores para formatos de arquivo PDB e mmCIF permitem o carregamento de dados de estrutura em um modelo de dados reutilizável. Este recurso é usado pelo projeto SIFTS para mapear entre sequências UniProt e estruturas PDB. As informações do RCSB PDB podem ser buscadas dinamicamente sem a necessidade de baixar dados manualmente. Para visualização, é fornecida uma interface para o visualizador 3D Jmol.

Módulos de genoma e sequenciamento

Este módulo é focado na criação de objetos de sequência gênica a partir do módulo central. Isso é realizado por meio do suporte à análise dos seguintes formatos de arquivo padrão populares gerados por aplicativos de previsão de genes de código aberto:

  • Arquivos GTF gerados pelo GeneMark
  • Arquivos GFF2 gerados por GeneID
  • Arquivos GFF3 gerados por Glimmer

Em seguida, os objetos de sequência de genes são gravados no formato GFF3 e importados para o GMOD. Esses formatos de arquivo são bem definidos, mas o que é escrito no arquivo é muito flexível.

Para fornecer suporte de entrada-saída para várias variantes comuns do formato de arquivo FASTQ dos sequenciadores de próxima geração, um módulo de sequenciamento separado é fornecido. Para obter exemplos de como usar este módulo, acesse este link .

Módulo de alinhamento

Este módulo contém várias classes e métodos que permitem aos usuários realizar alinhamentos em pares e de sequência múltipla. As sequências podem ser alinhadas de forma simples ou multithread. BioJava implementa o algoritmo Needleman-Wunsch para alinhamentos globais ideais e o algoritmo de Smith e Waterman para alinhamentos locais. As saídas de alinhamentos locais e globais estão disponíveis em formatos padrão. Além desses dois algoritmos, há uma implementação do algoritmo Guan – Uberbacher que realiza o alinhamento de sequência global de forma muito eficiente, pois usa apenas memória linear.

Para o alinhamento de sequência múltipla , qualquer um dos métodos discutidos acima pode ser usado para realizar progressivamente um alinhamento de sequência múltipla.

Módulo ModFinder

Image
Um exemplo de aplicação usando o módulo ModFinder e o módulo de estrutura de proteína. As modificações de proteínas são mapeadas na sequência e estrutura da ferredoxina I (PDB ID 1GAO). Dois aglomerados de ferro-enxofre possíveis são mostrados na sequência de proteínas (3Fe – 4S (F3S): triângulos / linhas laranja; 4Fe – 4S (SF4): diamantes / linhas roxas). O cluster 4Fe – 4S é exibido na janela de estrutura Jmol acima da exibição da sequência

O módulo ModFinder fornece novos métodos para identificar e classificar modificações de proteínas em estruturas 3D de proteínas. Mais de 400 tipos diferentes de modificações de proteínas, como fosforilação , glicosilação , quelação de metais por ligações dissulfeto , etc., foram coletados e selecionados com base em anotações em PSI-MOD, RESID e RCSB PDB. O módulo também fornece um API para detectar modificações de proteínas pré, co e pós-tradução dentro de estruturas de proteínas. Este módulo também pode identificar a fosforilação e imprimir todas as modificações pré-carregadas de uma estrutura.

Módulo de propriedades de aminoácidos

Este módulo tenta fornecer propriedades físico-químicas precisas de proteínas. As propriedades que podem ser calculadas usando este módulo são as seguintes:

Os pesos moleculares precisos para aminoácidos marcados isotopicamente comuns estão incluídos neste módulo. Também existe flexibilidade para definir novas moléculas de aminoácidos com seus pesos moleculares usando arquivos de configuração XML simples . Isso pode ser útil onde a massa precisa é de grande importância, como os experimentos de espectrometria de massa .

Módulo de desordem de proteína

O objetivo deste módulo é fornecer aos usuários maneiras de encontrar distúrbios em moléculas de proteínas. BioJava inclui uma implementação Java do preditor RONN . O BioJava 3.0.5 faz uso do suporte Java para multithreading para melhorar o desempenho em até 3,2 vezes, em uma máquina quad-core moderna, em comparação com a implementação C legada.

Existem duas maneiras de usar este módulo:

  • Usando chamadas de função de biblioteca
  • Usando linha de comando

Alguns recursos deste módulo incluem:

  • Calculando a probabilidade de desordem para cada resíduo em uma sequência
  • Calculando a probabilidade de desordem para cada resíduo na sequência para todas as proteínas de um arquivo de entrada FASTA
  • Obtenha as regiões desordenadas da proteína para uma única sequência de proteína ou para todas as proteínas de um arquivo de entrada FASTA

Módulo de acesso ao serviço web

De acordo com as tendências atuais em bioinformática, as ferramentas baseadas na web estão ganhando popularidade. O módulo de serviço da web permite que os serviços de bioinformática sejam acessados ​​usando protocolos REST . Atualmente, dois serviços são implementados: NCBI Blast por meio do Blast URLAPI (anteriormente conhecido como QBlast) e o serviço web HMMER.

Comparações com outras alternativas

A necessidade de software customizado na área de bioinformática tem sido abordada por vários grupos e indivíduos. Semelhante ao BioJava, os projetos de software de código aberto , como BioPerl , BioPython e BioRuby, todos fornecem kits de ferramentas com múltiplas funcionalidades que facilitam a criação de pipelines ou análises personalizadas.

Como os nomes sugerem, os projetos mencionados acima usam diferentes linguagens de programação. Todas essas APIs oferecem ferramentas semelhantes, portanto, em quais critérios devemos basear sua escolha? Para programadores com experiência em apenas uma dessas linguagens, a escolha é direta. No entanto, para um bioinformaticista experiente que conhece todos esses idiomas e deseja escolher o melhor idioma para um trabalho, a escolha pode ser feita com base nas seguintes diretrizes fornecidas por uma revisão de software feita nos kits de ferramentas Bio *.

Em geral, para programas pequenos (<500 linhas) que serão usados ​​apenas por um indivíduo ou pequeno grupo, é difícil superar o Perl e o BioPerl . Essas restrições provavelmente cobrem as necessidades de 90 por cento da programação de bioinformática pessoal.

Para iniciantes e para escrever programas maiores no domínio Bio, especialmente aqueles a serem compartilhados e apoiados por outros, a clareza e a brevidade do Python o tornam muito atraente.

Para aqueles que estão inclinados a seguir uma carreira em bioinformática e querem aprender apenas uma linguagem, Java tem o mais amplo suporte de programação geral, suporte muito bom no domínio Bio com BioJava, e agora é a linguagem de fato dos negócios (a nova COBOL, para melhor ou pior).

Além desses projetos Bio *, há outro projeto chamado STRAP que usa Java e visa objetivos semelhantes. A caixa de ferramentas STRAP, semelhante ao BioJava, também é um kit de ferramentas Java para o design de programas e scripts de bioinformática. As semelhanças e diferenças entre BioJava e STRAP são as seguintes:

Semelhanças

  • Ambos fornecem coleções abrangentes de métodos para sequências de proteínas.
  • Ambos são usados ​​por programadores Java para codificar algoritmos de bioinformática.
  • Ambas as implementações e definições separadas usando interfaces java.
  • Ambos são projetos de código aberto.
  • Ambos podem ler e gravar muitos formatos de arquivo de sequência.

Diferenças

  • BioJava é aplicável a sequências de nucleotídeos e peptídeos e pode ser aplicado a genomas inteiros. STRAP não pode lidar com sequências únicas tão longas quanto um cromossomo inteiro. Em vez disso, o STRAP manipula sequências de peptídeos e estruturas 3D do tamanho de proteínas individuais. No entanto, ele pode conter um grande número de sequências e estruturas na memória. O STRAP é projetado para sequências de proteínas, mas pode ler arquivos de codificação de nucleotídeos, que são então traduzidos em sequências de peptídeos.
  • O STRAP é muito rápido, pois a interface gráfica do usuário deve ser altamente responsiva. BioJava é usado onde a velocidade é menos crítica.
  • O BioJava é bem projetado em termos de segurança de tipo, ontologia e design de objetos. BioJava usa objetos para sequências, anotações e posições de sequência. Mesmo aminoácidos ou nucleotídeos únicos são referências de objeto. Para aumentar a velocidade, o STRAP evita instanciações frequentes de objetos e invocação de métodos de objetos não finais.
    • No BioJava, as sequências de peptídeos e de nucleotídeos são listas de símbolos. Os símbolos podem ser recuperados um após o outro com um iterador ou subseqüências podem ser obtidas. As vantagens são que a seqüência inteira não reside necessariamente na memória e que os programas são menos suscetíveis a erros de programação. Objetos de símbolo são elementos imutáveis ​​de um alfabeto. No STRAP, no entanto, matrizes de bytes simples são usadas para sequências e matrizes de float para coordenadas. Além da velocidade, o baixo consumo de memória é uma vantagem importante dos tipos de dados básicos. As classes no Strap expõem dados internos. Portanto, os programadores podem cometer erros de programação, como a manipulação de matrizes de bytes diretamente, em vez de usar os métodos setter. Outra desvantagem é que nenhuma verificação é executada no STRAP para saber se os caracteres nas sequências são válidos em relação a um alfabeto subjacente.
    • No BioJava as posições de sequência são realizadas pela classe Location . Objetos de Location descontíguos são compostos de vários objetos de RangeLocation contíguos ou objetos de PointLocation . Para a classe StrapProtein , no entanto, as posições de resíduo único são indicadas por números inteiros entre 0 e countResidues () - 1 . Múltiplas posições são fornecidas por matrizes booleanas. Verdadeiro em um determinado índice significa selecionado, enquanto falso significa não selecionado.
  • BioJava lança exceções quando os métodos são chamados com parâmetros inválidos. STRAP evita a demorada criação de objetos Throwable. Em vez disso, os erros nos métodos são indicados pelos valores de retorno NaN, -1 ou nulo. Do ponto de vista do design do programa, no entanto, os objetos lançáveis são mais agradáveis.
  • No BioJava, um objeto de Sequência é uma sequência de peptídeo ou uma sequência de nucleotídeo. Uma StrapProtein pode conter ambos ao mesmo tempo se uma sequência de nucleotídeos codificantes foi lida e traduzida em proteína. Ambas, a sequência de nucleotídeos e a sequência de peptídeos estão contidas no mesmo objeto StrapProtein. As regiões codificantes ou não codificantes podem ser alteradas e a sequência peptídica alterada em conformidade.

Projetos usando BioJava

Os projetos a seguir fazem uso do BioJava.

  • Metabolic Pathway Builder: Conjunto de software dedicado à exploração de conexões entre genes, proteínas, reações e vias metabólicas
  • DengueInfo : portal de informações do genoma da dengue que usa BioJava no middleware e se comunica com um banco de dados biosql.
  • Dazzle : Um servidor DAS baseado em BioJava.
  • BioSense : Um plug-in para o InforSense Suite, uma plataforma de software analítico da IDBS que unifica BioJava.
  • Bioclipse : Uma bancada de trabalho gratuita e de código aberto para quimio e bioinformática com poderosas capacidades de edição e visualização de moléculas, sequências, proteínas, espectros, etc.
  • PROMPT : Uma estrutura e aplicativo de código aberto gratuito para comparação e mapeamento de conjuntos de proteínas. Usa BioJava para lidar com a maioria dos formatos de dados de entrada.
  • Cytoscape : Uma plataforma de software de bioinformática de código aberto para visualizar redes de interação molecular.
  • BioWeka : Um aplicativo de mineração de dados biológicos de código aberto.
  • Geneious : Um kit de ferramentas de biologia molecular.
  • MassSieve : Um aplicativo de código aberto para analisar dados de proteômica de espectrometria de massa.
  • STRAP : Uma ferramenta para alinhamento de sequência múltipla e alinhamento de estrutura baseado em sequência.
  • Jstacs : uma estrutura Java para análise estatística e classificação de sequências biológicas
  • jLSTM : "Long Short-Term Memory" para classificação de proteínas
  • LaJolla : Uma ferramenta de alinhamento estrutural de código aberto para RNA e proteínas usando uma estrutura de índice para alinhamento rápido de milhares de estruturas; inclui uma interface de linha de comando fácil de usar.
  • GenBeans : Uma plataforma de cliente rica para bioinformática focada principalmente em biologia molecular e análise de sequência.
  • JEnsembl : Uma API Java com reconhecimento de versão para sistemas de dados Ensembl.
  • MUSI : Um sistema integrado para identificar especificidade múltipla de conjuntos de dados muito grandes de peptídeos ou ácidos nucléicos.
  • Bioshell : Uma biblioteca de utilitários para bioinformática estrutural

Veja também

Referências

links externos