text:
# BioJava
BioJava es un proyecto de código abierto dedicado a proveer herramientas Java para el procesamiento de datos biológicos. BioJava es un conjunto de bibliotecas escritas en el lenguaje de programación Java para manipular secuencias, estructuras de proteínas, conversores de archivos (file parsers), la interoperabilidad CORBA, el DAS, el acceso a AceDB, programación dinámica y rutinas estadísticas simples. BioJava es compatible con una amplia gama de datos, a partir de ADN y secuencias de proteínas a nivel de las estructuras 3D de proteínas. Las bibliotecas BioJava son útiles para la automatización de muchas tareas cotidianas y mundanas de la bioinformática como para analizar un archivo PDB , interactuando con Jmol y muchos más. Esta interfaz de programación de aplicaciones ofrece diversos programas de análisis de archivos, modelos de datos y algoritmos para facilitar el trabajo con los formatos de datos estándar y permite el desarrollo rápido de aplicaciones y análisis. Estas bibliotecas también se han utilizado en el desarrollo de diversas herramientas de análisis extendido, por ejemplo :
- MUSI : Un sistema integrado para la identificación de la especificidad múltiple de un péptido de gran tamaño o un conjunto de datos de ácidos nucleicos[4]
- JEnsembl : Una versión-aware de Java API para los sistemas de datos Ensembl[5]
- Perfiles de expresión de grupos de firmas genéticas con el método de amplificación Trinucleotide threading (TnT)[6]
- La resolución de las características estructurales de las islas genómicas : un enfoque de aprendizaje automático[7]
- Biblioteca de utilidad para la bioinformática estructural[8]

El proyecto BioJava surgió del trabajo de Thomas Down y Mateo Pocock para crear una API para simplificar el desarrollo de herramientas bioinformáticas basadas en Java. BioJava es un proyecto de código abierto activo que se ha desarrollado durante más de 12 años y con más de 60 desarrolladores. BioJava es uno de una serie de Bio *. Proyectos diseñados para reducir la duplicación de código. Los ejemplos de este tipo de proyectos que se enmarcan en Bio * aparte de BioJava son BioPython , BioPerl ,BioRuby , EMBOSS etc.
La última versión de BioJava (3.0.5) es una importante actualización de las versiones anteriores. La nueva versión de BioJava contiene varios módulos independientes. El viejo proyecto ha sido trasladado a un proyecto independiente llamado proyecto BioJava-legacy.
La versión más reciente de BioJava es 4.1.0.

## Características
BioJava proporciona módulos de software para muchas de las tareas típicas de la programación de la bioinformática. Estas incluyen:
- Acceso a los datos de nucleótidos y a la secuencia de péptido de bases de datos locales y remotas.
- La transformación de formatos de registros de base de datos / archivos.
- Análisis y manipulación de la estructura de la proteína.
- La manipulación de secuencias individuales.
- Busca secuencias similares.
- Creación y manipulación de alineamientos de secuencias.
- Interfaz de visualización en Swing y AWT

### Requerimientos
Desde la versión 3 de BioJava se requiere JDK 1.6.

### Licencia
BioJava se encuentra licenciado con LGPL v2.1
Para licenciar los archivos de BioJava, se sigue el tutorial.

## Historia y Publicaciones
En el año 2008, se publicó la nota de solicitud de BioJava. Se migró desde su repositorio CVS original al centro de GitHub en abril de 2013.
En octubre de 2012, se publicó el documento más reciente sobre BioJava. A partir de noviembre de 2012 Google Academic cuenta con más de 130 citas.

## Módulos
Durante los últimos 2 años, gran parte de la base de código original se han reescrito. BioJava 3 es una clara desviación de la serie de la versión 1. Ahora se compone de varios módulos independientes construidos usando una herramienta de automatización llamada Apache Maven. Estos módulos proporcionan herramientas del estado del arte para la comparación de la estructura de proteínas, por parejas y múltiples alineamientos de secuencias, trabajando con ADN y secuencias de proteínas, análisis de propiedades de aminoácidos, la detección de modificaciones de proteínas y predicción de las desordenadas regiones en las proteínas, así como analizadores de formatos de archivo comunes utilizando un modelo de datos biológicamente significativos. El código original ha pasado a un proyecto separado del proyecto BioJava legacy, que todavía está disponible para la compatibilidad hacia atrás.
Las siguientes secciones describen varios de los nuevos módulos y ponen de relieve algunas de las nuevas características que se incluyen en la versión más reciente de BioJava.
Estructuras proteicas: biojava-structure, biojava-alignment Optional module: biojava-structure-gui for the 3D visualisation Optional external library : JmolApplet.jar for the 3D visualisation
Alineamientos: biojava-alignment, biojava-core, biojava-phylo Required external library:       forester.jar
Genomas: biojava-genome.
Secuenciación: biojava-core,biojava-sequencing, Required external library: guava-11.0.1.jar
Árbol Filogenético: biojava-core, Required external library: forester.jar
Propiedades Físico-químicas: biojava-aa-prop, biojava-structure and biojava-core
Desorden de Proteínas: biojava-protein-disorder.
Identificación de Proteínas Modificadas: biojava-modfinder, biojava-structure
Llamadas a Web-Services: biojava-core, biojava-ws

### Módulo Principal
Este módulo ofrece clases Java para modelar secuencias de aminoácidos o nucleótidos. Las clases se han diseñado teniendo en cuenta que deben ser conocidos por los biólogos, es decir, los nombres deben tener sentido para los biólogos y al mismo tiempo también proporcionan una representación concreta de los pasos para pasar de una secuencia de genes a una secuencia de la proteína para los científicos de la computación y programadores.
Un cambio importante entre el proyecto BioJava Legacy y BioJava3 radica en la forma que ha sido diseñado el framework para aprovechar las últimas innovaciones en Java. Una secuencia se define como una interfaz genérica permitiéndole al resto de los módulos crear cualquier utilidad que opera en todas las secuencias. Clases específicas para las secuencias comunes, tales como ADN y proteínas se han definido con el fin de mejorar la usabilidad para los biólogos. El motor de traducción realmente aprovecha este trabajo al permitir que las conversiones entre las secuencias de ADN, ARN y aminoácidos. Este motor puede manejar los detalles tales como la elección de la tabla de codones, la conversión de codones de inicio de metionina, el recorte de los codones de parada, especificando el marco de lectura y la entrega de secuencias ambiguas.
Se ha prestado atención especial en el diseño del almacenamiento de las secuencias a fin de minimizar los requisitos de espacio. Patrones de diseño especiales, como el patrón Proxy que permitió a los desarrolladores crear el framework de manera tal que las secuencias se puedan almacenar en la memoria, la demanda de un servicio web como UniProt o leer desde un archivo FASTA según sea necesario. Los dos últimos enfoques ahorran memoria al no cargar datos de la secuencia hasta que se hace referencia en la solicitud. Este concepto se puede ampliar para manejar grandes bases de datos genómicas, tales como NCBI, GenBank o una base de datos propietaria.

### Módulos de Estructura de Proteínas
Los módulos de estructura de proteínas proporcionan herramientas para representar y manipular estructuras biomoleculares 3D. En particular, se centra en la comparación de la estructura de proteínas.
Los siguientes algoritmos se han aplicado y se incluyen en BioJava.
Algoritmo FATCAT para la alineación del cuerpo flexible y rígido.[17]
El algoritmo estándar Combinatoria de Extensión (CE).
Una nueva versión de la CE que puede detectar permutaciones circulares en las proteínas.
Estos algoritmos se utilizan para proporcionar al RCSB Protein Data Bank (PDB) La herramienta de comparación de proteínas, así como comparaciones sistemáticas de todas las proteínas en el PDB semanalmente.
Analizadores de formatos de archivos de PDB y mmCIF permiten la carga de datos de la estructura en un modelo de datos reutilizable. Esta característica es utilizada por el proyecto SIFTS para mapear entre las secuencias de UniProt y estructuras de PDB. Información de la RCSB PDB puede ser dinámicamente obtenida y sin la necesidad de descargar manualmente los datos. Para la visualización, se proporciona una interfaz para el visor 3D Jmol (http://www.jmol.org/) . El equipo afirma que se está trabajando para mejorar la interacción con los viewers de RCSB PDB.
A continuación se muestra un esquema del código para inicializar una ventana que mostrará y comparará dos secuencias de proteínas. Por favor, tenga en cuenta que esto es sólo un esbozo del código. Para hacer este trabajo tendrá que importar el paquete correcto en "org.biojava.bio.structure" y también añadir manejar excepciones utilizando un bloque try-catch.
```

String

name1

=

"4hhb.A"
;

String

name2

=

"4hhb.B"
;

AtomCache

cache

=

new

AtomCache
();

Structure

structure1

=

null
;

Structure

structure2

=

null
;

StructureAlignment

algorithm

=

StructureAlignmentFactory
.
getAlgorithm
(
FatCatRigid
.
algorithmName
);

structure1

=

cache
.
getStructure
(
name1
);

structure2

=

cache
.
getStructure
(
name2
);

Atom
[]

ca1

=

StructureTools
.
getAtomCAArray
(
structure1
);

Atom
[]

ca2

=

StructureTools
.
getAtomCAArray
(
structure2
);

FatCatParameters

params

=

new

FatCatParameters
();

AFPChain

afpChain

=

algorithm
.
align
(
ca1
,
ca2
,
params
);

afpChain
.
setName1
(
name1
);

afpChain
.
setName2
(
name2
);

StructureAlignmentDisplay
.
display
(
afpChain
,

ca1
,

ca2
);

```

El código alinea las dos secuencias de proteínas "4hhb.A" y "4hhb.B" basado en el algoritmo rígido FATCAT.

### Módulos Genoma y Secuenciación
Este módulo se centra en la creación de objetos de secuencias de genes desde el módulo principal. Esto se realiza mediante el apoyo al análisis de los siguientes formatos de archivo estándar populares generados por las aplicaciones de predicción de genes de código abierto:
- Archivos GTF generados por GeneMark[25]
- Archivos GFF2 generados por GeneID[26]
- Archivos GFF3 generados por Glimmer[27]

A continuación, los objetos de secuencias de genes se escriben como un formato GFF3 y se importan en GMOD. Estos formatos de archivo están bien definidos, pero lo que se escribe en el archivo es muy flexible.
En el siguiente código de ejemplo se toma un archivo 454scaffold, que fue utilizado por GeneMark para predecir genes, y devuelve una colección de ChromosomeSequences. Cada secuencia de cromosoma se asigna a una entrada llamada en el archivo FASTA y contendría N secuencias de genes. Las secuencias de genes pueden ser hebra +/- con cambios de marco y múltiples transcripciones.
Pasando la colección de ChromosomeSequences a GeneFeatureHelper.getProteinSequences devolvería todas las secuencias de proteínas. A continuación, puede escribir las secuencias de proteínas a un archivo FASTA.
```
LinkedHashMap
<
String
,

ChromosomeSequence
>

chromosomeSequenceList

=

GeneFeatureHelper
.
loadFastaAddGeneFeaturesFromGeneMarkGTF
(
new

File
(
"454Scaffolds.fna"
),

new

File
(
"genemark_hmm.gtf"
));

LinkedHashMap
<
String
,

ProteinSequence
>

proteinSequenceList

=

GeneFeatureHelper
.
getProteinSequences
(
chromosomeSequenceList
.
values
());

FastaWriterHelper
.
writeProteinSequence
(
new

File
(
"genemark_proteins.faa"
),

proteinSequenceList
.
values
());

```

También puede dar salida a la secuencia del gen en un archivo fasta donde las regiones codificantes estarán en mayúscula y las regiones no codificantes estarán en minúscula.
```
LinkedHashMap
<
String
,

GeneSequence
>

geneSequenceHashMap

=

GeneFeatureHelper
.
getGeneSequences
(
chromosomeSequenceList
.
values
());

Collection
<
GeneSequence
>

geneSequences

=

geneSequenceHashMap
.
values
();

FastaWriterHelper
.
writeGeneSequence
(
new

File
(
"genemark_genes.fna"
),

geneSequences
,

true
);

```

Usted puede escribir fácilmente una vista GFF3 de un ChromosomeSequence con el siguiente código.
```
FileOutputStream

fo

=

new

FileOutputStream
(
"genemark.gff3"
);

GFF3Writer

gff3Writer

=

new

GFF3Writer
();

gff3Writer
.
write
(
fo
,

chromosomeSequenceList
);

fo
.
close
();

```

Para la prestación de apoyo de entrada-salida por varias variantes comunes del formato de archivo FASTQ de los secuenciadores de última generación, se proporciona un módulo de secuenciación independiente. Se llama el módulo de secuencia y está contenido en el paquete org.biojava3.sequencing.io.fastq. Para las muestras sobre el uso de este módulo por favor haga clic aquí (http://biojava.org/wiki/BioJava:CookBook3:FASTQ).
Se está trabajando para llegar a crear un conjunto completo de clases java para hacer conversiones entre diferentes formatos de archivo donde la lista de aplicaciones de predicción de genes compatibles y buscadores de genomas estarán ampliamente basadas en los requerimientos de los usuarios finales.

### Módulo de Alineamiento
Este módulo contiene varias clases y métodos que permiten a los usuarios realizar alineamientos de secuencias por parejas y por secuencias múltiples.
Pairwise alineación de secuencias
Para la alineación global óptima, BioJava implementa el algoritmo Needleman-Wunsch y para realizar alineamientos locales implementa el algoritmo Smith y Waterman. Las salidas de ambos alineamientos locales y globales están disponibles en formatos estándar.
Un ejemplo de cómo usar las bibliotecas se muestra a continuación.
```
protected

void

align
(
String

uniProtID_1
,

String

uniProtID_2
,

PairwiseSequenceAlignerType

alignmentType
)

throws

IOException
,

Exception

{

ProteinSequence

proteinSeq1

=

FastaReaderHelper
.
readFastaProteinSequence
((
new

URL
(
String
.
format

(
"http://www.uniprot.org/uniprot/%s.fasta"
,

uniProtID_1
))).
openStream
()).
get
(
uniProtID_1
);

ProteinSequence

proteinSeq2

=

FastaReaderHelper
.
readFastaProteinSequence
((
new

URL
(
String
.
format

(
"http://www.uniprot.org/uniprot/%s.fasta"
,

uniProtID_2
))).
openStream
()).
get
(
uniProtID_2
);

SequencePair
<
ProteinSequence
,

AminoAcidCompound
>

result

=

Alignments
.
getPairwiseAlignment
(
proteinSeq1
,

proteinSeq2
,

alignmentType
,

new

SimpleGapPenalty
(),

new

SimpleSubstitutionMatrix
<
AminoAcidCompound
>
());

System
.
out
.
println
(
result
.
toString
());

}

```

Un ejemplo de llamada a la función anterior sería algo como esto:
Para un Alineamiento Global
```
align
(
"Q21691"
,

"Q21495"
,

PairwiseSequenceAlignerType
.
GLOBAL
);

```

Para un Alineamiento Local
```
align
(
"Q21691"
,

"Q21495"
,

PairwiseSequenceAlignerType
.
LOCAL
);

```

Además de estos dos algoritmos, existe una implementación del algoritmo de Guan-Uberbacher que lleva a cabo una alineación global de secuencias de manera muy eficiente ya que sólo utiliza la memoria lineal.
Para alineamiento de secuencia múltiples, cualquiera de los métodos discutidos anteriormente pueden utilizarse para llevar a cabo progresivamente una alineación de secuencias múltiples.

### Módulo ModFinder
El módulo ModFinder ofrece nuevos métodos para identificar y clasificar las modificaciones de proteínas en estructuras 3D de proteínas. Se recogieron y curaron más de 400 diferentes tipos de modificaciones de proteínas como la fosforilación, glicosilación, enlaces disulfuro, quelación de metales, etc., basadas en anotaciones en PSI-MOD, RESID y RCSB PDB. El módulo también proporciona una API para la detección de modificaciones de proteínas dentro de las estructuras de las proteínas.
Ejemplo: identificar e imprimir todas las modificaciones precargados de una estructura
```
Set
<
ModifiedCompound
>

identifyAllModfications
(
Structure

struc
)

{

ProteinModificationIdentifier

parser

=

new

ProteinModificationIdentifier
();

parser
.
identify
(
struc
);

Set
<
ModifiedCompound
>

mcs

=

parser
.
getIdentifiedModifiedCompound
();

return

mcs
;

}

```

Ejemplo: identificar sitios de fosforilación en una estructura
```
List
<
ResidueNumber
>

identifyPhosphosites
(
Structure

struc
)

{

List
<
ResidueNumber
>

phosphosites

=

new

ArrayList
<
ResidueNumber
>
();

ProteinModificationIdentifier

parser

=

new

ProteinModificationIdentifier
();

parser
.
identify
(
struc
,

ProteinModificationRegistry
.
getByKeyword
(
"phosphoprotein"
));

Set
<
ModifiedCompound
>

mcs

=

parser
.
getIdentifiedModifiedCompound
();

for

(
ModifiedCompound

mc

:

mcs
)

{

Set
<
StructureGroup
>

groups

=

mc
.
getGroups
(
true
);

for

(
StructureGroup

group

:

groups
)

{

phosphosites
.
add
(
group
.
getPDBResidueNumber
());

}

}

return

phosphosites
;

}

```

Código de demostración para ejecutar los métodos anteriores
```
import

org.biojava.bio.structure.ResidueNumber
;

import

org.biojava.bio.structure.Structure
;

import

org.biojava.bio.structure.io.PDBFileReader
;

import

org.biojava3.protmod.structure.ProteinModificationIdentifier
;

public

static

void

main
(
String
[]

args
)

{

try

{

PDBFileReader

reader

=

new

PDBFileReader
();

reader
.
setAutoFetch
(
true
);

// identify all modifications from PDB:1CAD and print them

String

pdbId

=

"1CAD"
;

Structure

struc

=

reader
.
getStructureById
(
pdbId
);

Set
<
ModifiedCompound
>

mcs

=

identifyAllModfications
(
struc
);

for

(
ModifiedCompound

mc

:

mcs
)

{

System
.
out
.
println
(
mc
.
toString
());

}

// identify all phosphosites from PDB:3MVJ and print them

pdbId

=

"3MVJ"
;

struc

=

reader
.
getStructureById
(
pdbId
);

List
<
ResidueNumber
>

psites

=

identifyPhosphosites
(
struc
);

for

(
ResidueNumber

psite

:

psites
)

{

System
.
out
.
println
(
psite
.
toString
());

}

}

catch
(
Exception

e
)

{

e
.
printStackTrace
();

}

}

```

Hay planes para incluir las modificaciones adicionales a las proteínas mediante la integración de otros recursos como UniProt

### Módulo Propiedades de Aminoácidos
Este módulo trata de proporcionar las propiedades físico-químicas precisas de las proteínas. Las propiedades que pueden ser calculadas usando este módulo son los siguientes:
- Masa molecular
- Coeficiente de extinción
- Índice de Inestabilidad
- Índice alifáticos
- Gran media de hidropatıa
- Punto isoeléctrico
- Composición de aminoácidos

Los pesos moleculares precisos para los aminoácidos comunes marcados isotópicamente se incluyen en este módulo. También existe flexibilidad para definir nuevas moléculas de aminoácidos con sus pesos moleculares utilizando archivos de configuración sencilla XML. Esto puede ser útil donde la masa exacta es de gran importancia, tales como experimentos de espectrometría de masas.

### Módulo de Desorden en la Proteína
El objetivo de este módulo es proporcionar a los usuarios maneras de encontrar desorden en las moléculas de proteína. BioJava incluye una implementación de Java del predictor RONN (http://bioinformatics.oxfordjournals.org/content/21/16/3369.full). La versión de BioJava (3.0.5) hace uso de la ayuda de Java para multithreading para mejorar el rendimiento hasta en 3,2 veces, en una máquina moderna de cuatro núcleos, en comparación con la implementación del legado C.
Hay dos maneras de utilizar este módulo:
- El uso de las llamadas a funciones de biblioteca
- El uso de la línea de comandos

Hacer llamadas a funciones de biblioteca
Los siguientes ejemplos muestran cómo utilizar el módulo y hacer llamadas de función para obtener información acerca de los desórdenes de proteínas. En los dos primeros ejemplos se llama a una función de la biblioteca para calcular la probabilidad de desorden para cada residuo de la secuencia proporcionada.
El tercer y cuarto ejemplo demuestran la facilidad con que se pueden obtener las regiones desordenadas de la proteína.
Ejemplo 1: Calcular la probabilidad de desorden para cada residuo en la secuencia
```

FastaSequence

fsequence

=

new

FastaSequence
(
"name"
,

"LLRGRHLMNGTMIMRPWNFLNDHHFPKFFPHLIEQQAIWLADWWRKKHC"

+

"RPLPTRAPTMDQWDHFALIQKHWTANLWFLTFPFNDKWGWIWFLKDWTPGSADQAQRACTWFFCHGHDTN"
);

float
[]

rawProbabilityScores

=

Jronn
.
getDisorderScores
(
fsequence
);

```

Ejemplo 2: Calcular la probabilidad de desorden para cada residuo en la secuencia para todas las proteínas del archivo de entrada FASTA
```

final

List
<
FastaSequence
>

sequences

=

SequenceUtil
.
readFasta
(
new

FileInputStream
(
"src/test/resources/fasta.in"
));

Map
<
FastaSequence
,

float
[]>

rawProbabilityScores

=

Jronn
.
getDisorderScores
(
sequences
);

```

Ejemplo 3: Obtener las regiones desordenada de la proteína para una sola secuencia de la proteína
```
FastaSequence

fsequence

=

new

FastaSequence
(
"Prot1"
,

"LLRGRHLMNGTMIMRPWNFLNDHHFPKFFPHLIEQQAIWLADWWRKKHC"

+

"RPLPTRAPTMDQWDHFALIQKHWTANLWFLTFPFNDKWGWIWFLKDWTPGSADQAQRACTWFFCHGHDTN"

+

"CQIIFEGRNAPERADPMWTGGLNKHIIARGHFFQSNKFHFLERKFCEMAEIERPNFTCRTLDCQKFPWDDP"
);

Range
[]

ranges

=

Jronn
.
getDisorder
(
fsequence
);

```

Ejemplo 4: Calcular las regiones desordenadas para las proteínas de archivo FASTA
```

final

List
<
FastaSequence
>

sequences

=

SequenceUtil
.
readFasta
(
new

FileInputStream
(
"src/test/resources/fasta.in"
));

Map
<
FastaSequence
,

Range
[]>

ranges

=

Jronn
.
getDisorder
(
sequences
);

```

El uso de la línea de comandos
BioJava módulo biojava3-protein-disorder se puede compilar en un solo archivo JAR ejecutable y ejecutar mediante el comando siguiente.
```
java -jar <jar_file_name>
```

Opciones admitidas por el ejecutable de línea de comandos
```
JRONN version 3.1b usage 1 August 2011:
java -jar JRONN_JAR_NAME -i=inputfile <OPTIONS>

Where -i=input file
        Input file can contain one or more FASTA formatted sequences.

All OPTIONS are optional

OPTION DETAILED DESCRIPTION:
        -o full path to the output file, if not specified
        standard out is used

        -d the value of disorder, defaults to 0.5

        -f output format, V for vertical, where the letters
        of the sequence and corresponding disorder values are
        output in two column layout. H for horizontal, where the
        disorder values are provided under the letters of the
        sequence. Letters and values separated by tabulation in
        this case. Defaults to V.

        -s the file name to write execution statistics to.

        -n the number of threads to use. Defaults to the number of
        cores available on the computer. n=1 mean sequential
        processing. Valid values are 1 < n < (2 x num_of_cores)
        Default value will give the best performance.
```

Ejemplos
Predecir los valores de desorden para las secuencias desde un archivo de entrada /home/input.fasta a una salida estándar de resultados. Utiliza un valor predeterminado de desorden y también utilizar todas las CPU disponibles en el equipo.
```
java -jar JRONN.JAR -i=/home/input.fasta
```

Predecir los valores de desorden para las secuencias desde una archivo de entrada /home/input.fasta los resultados en disposición horizontal a /home/jronn.out, recopilan estadísticas de ejecución al archivo /home/jronn.stat.txt y limitan el número de threads a dos.
```
java -jar JRONN.JAR -i=/home/input.fasta -o=/home/jronn.out -d=0.6 -n=2 -f=H
```

Los argumentos se pueden proporcionar en cualquier orden.

### Módulo de acceso a servicio Web
De acuerdo con las tendencias actuales en la bioinformática, herramientas basadas en web están ganando popularidad. El módulo de servicio web permite a los servicios de bioinformática para acceder a través de protocolos REST. Actualmente, dos servicios se implementan:. NCBI Blast a través de la Blast URLAPI (anteriormente conocido como QBlast) y el servicio de HMMER web.

## Las comparaciones con otras alternativas
La necesidad de software a medida en el campo de la bioinformática ha sido abordado por varios grupos e individuos. Existen proyectos similares a BioJava, los proyectos de código abierto como BioPerl, BioPython y BioRuby todos proporcionan kits de herramientas con múltiples funcionalidades que hacen que sea más fácil para crear pipelines o análisis personalizados.
Como el nombre sugiere, los proyectos mencionados anteriormente utilizan diferentes lenguajes de programación. Todas estas APIs ofrecen herramientas similares, por lo tanto, ¿Qué criterios se deberían tener en cuenta en la elección?. Para los programadores con experiencia en sólo uno de estos idiomas, la elección es sencilla.
En general, para los programas pequeños (<500 líneas) que serán utilizadas únicamente por un pequeño grupo o de forma individual, es difícil de superar a Perl y a BioPerl. Estas restricciones, probablemente, cubren las necesidades de 90 por ciento de los requisitos de programación .
Para los principiantes, y para escribir programas más grandes en el dominio Bio, especialmente aquellos para ser compartido y apoyado por otros, la claridad y la brevedad de Python lo hacen muy atractivo.
Para aquellos que pudieran estar inclinado hacia una carrera en la bioinformática y que quieren aprender un solo idioma, Java cuenta con el apoyo de programación general más amplia, muy buen apoyo en el dominio Bio con BioJava, y ahora es el idioma de facto del negocio.
Aparte de estos Bio* proyectos hay otro proyecto llamado Strap que utiliza Java y apunta a objetivos similares. La caja de herramientas Strap, similar a BioJava es también un conjunto de herramientas Java para el diseño de programas de bioinformática y scripts. Las similitudes y diferencias entre BioJava y STRAP son los siguientes:
Similitudes
- Ambos proporcionan colecciones completas de los métodos de secuencias de proteínas.
- Ambos son utilizados por los programadores de Java para la codificación de algoritmos de Bioinformática.
- Ambas separan las implementaciones y definiciones mediante el uso de interfaces de Java.
- Ambos son proyectos de código abierto.
- Ambos pueden leer y escribir muchos formatos de archivo de secuencia.

Diferencias
- BioJava es aplicable a secuencias de nucleótidos y de péptidos y se puede aplicar para los genomas enteros. STRAP no le puede hacer frente a las secuencias individuales tan largas como un cromosoma entero. STRAP manipula secuencias de péptidos y estructuras 3D del tamaño de las proteínas individuales. Sin embargo, se puede mantener un alto número de secuencias y estructuras en la memoria. STRAP está diseñado para las secuencias de proteínas, pero puede leer archivos de nucleótidos que codifican, que luego se traducen a secuencias péptido.
- STRAP es muy rápido ya que la interfaz gráfica de usuario debe ser muy sensible. BioJava se utiliza donde la velocidad es menos crítica.
- BioJava está bien diseñado en términos de seguridad de tipos, la ontología y el diseño de objetos.
- BioJava utiliza objetos de secuencias, anotaciones y posiciones de la secuencia. Incluso los aminoácidos o ácidos nucleótidos individuales son referencias a objetos. Para mejorar la velocidad, STRAP evita instancias de objeto frecuentes y la invocación de objetos-métodos no finales.
  - En BioJava las secuencias de péptidos y las secuencias de nucleótidos son listas de símbolos. Los símbolos se pueden recuperar uno después del otro con un iterador o se pueden obtener subsecuencia. Las ventajas son que toda la secuencia no reside necesariamente en la memoria y que los programas son menos susceptibles a los errores de programación. Objetos de símbolos son elementos inmutables de un alfabeto. Sin embargo en STRAP las matrices de bytes simples se utilizan para las secuencias y las matrices de flotantes para las coordenadas. Además de la velocidad, el bajo consumo de memoria es una ventaja importante de los tipos de datos básicos. Las clases en STRAP exponen los datos internos. Por lo tanto, los programadores pueden cometer errores de programación, como la manipulación de matrices de bytes directamente en lugar de utilizar los métodos setter. Otra desventaja es que en STRAP no se realizan controles si los caracteres en las secuencias son válidas con respecto a un alfabeto subyacente.
  - En BioJava las posiciones de secuencia se realizan por la clase Location. Los discontinuos objetos de Location se componen de varios objetos contiguos RangeLocation u objetos PointLocation. Sin embargo para la clase StrapProtein, las posiciones de los residuos se indican mediante números enteros entre 0 y countResidues () - 1. Múltiples posiciones están dadas por matrices booleanas. Si el índice determinado es verdadero, será seleccionado.
- BioJava lanza excepciones cuando los métodos se invocan con parámetros no válidos. STRAP evita el tiempo de creación de objetos Throwable. En lugar de ello, los errores en los métodos se indican mediante los valores de retorno NaN, -1 o nulos. Desde el punto de diseño del programa, sin embargo los objetos Throwable son más bonitas.
- En BioJava un objeto de secuencia es o bien una secuencia de péptido o una secuencia de nucleótidos. A StrapProtein puede contener ambos al mismo tiempo si una secuencia de nucleótidos de codificación se leyó y se traduce en proteína. Ambos, la secuencia de nucleótidos y la secuencia de péptidos están contenidas en el mismo objeto StrapProtein. La codificación o regiones no codificantes se pueden cambiar y la secuencia del péptido altera en consecuencia.

## Proyectos usando BioJava
- Metabolic Pathway Builder:Software dedicada a la exploración de las conexiones entre los genes, las proteínas, las reacciones y las vías metabólicas.
- DengueInfo:  Un portal de información sobre el genoma del dengue que utiliza BioJava en el middleware y habla con una base de datos BioSQL.
- Dazzle (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última).: Un servidor DAS basado BioJava.
- BioSense Archivado el 1 de octubre de 2011 en Wayback Machine.: Plugin para la suite InforSense, una plataforma de software de análisis por IDBS que unifica BioJava.
- Bioclipse: Código abierto, banco de trabajo para la quimio y la bioinformática con potentes capacidades de edición y visualización de moléculas, secuencias, proteínas,  espectros etc.
- PROMPT Archivado el 18 de junio de 2008 en Wayback Machine.: Aplicación de código abierto para la comparación y la cartografía de los conjuntos de proteínas. Utiliza BioJava para el manejo de la mayoría de los formatos de datos de entrada.
- Cytoscape: Una plataforma de software de bioinformática de código abierto para la visualización de las redes de interacción molecular.
- BioWeka: Una aplicación de minería de datos biológicos de código abierto.
- Geneious: Un juego de herramientas de la biología molecular.
- MassSieve: una aplicación de código abierto para el análisis de masas de datos proteómica spec.
- Strap: Una herramienta para la alineación de secuencias múltiples y estructura de alineación basada en la secuencia
- Jstacs: Un marco de Java para el análisis estadístico y clasificación de secuencias biológicas.
- jLSTM "Long Short Term-memory" para la clasificación de proteínas.
- LaJolla Alineación estructural de ARN y proteínas utilizando una estructura de índice para una alineación rápida de miles de estructuras. Incluyendo un fácil de usar interfaz de línea de comandos. El código abierto en Sourceforge.
- GenBeans: Una plataforma de cliente enriquecido de la bioinformática se centraron principalmente en la biología molecular y análisis de la secuencia.
- Equant Archivado el 8 de diciembre de 2015 en Wayback Machine.: Un servidor de evaluación de la calidad del modelo para indicar la fiabilidad de estructuras de proteínas.

wikiname: eswiki

title: BioJava

in_language: es

wikitext:
'''BioJava'''<ref name="BioJava">{{cite journal |author = Prlić A, Yates A, Bliven SE|title = BioJava: an open-source framework for bioinformatics in 2012|journal = Bioinformatics|volume = 28|issue = 20|pages = 2693–5|date = October 2012|pmid = 22877863|pmc = 3467744|doi = 10.1093/bioinformatics/bts494|url = http://bioinformatics.oxfordjournals.org/cgi/pmidlookup?view=long&pmid=22877863|display-authors = etal}}</ref> es un proyecto de [[código abierto]] dedicado a proveer herramientas [[Java (lenguaje de programación)|Java]] para el procesamiento de datos biológicos.<ref name="pmid18689808">{{cite journal|author = Holland RC, Down TA, Pocock M, Prlić A, Huen D, James K|title = BioJava: an open-source framework for bioinformatics.|journal = Bioinformatics|year = 2008|volume = 24|issue = 18|pages = 2096–7|pmid = 18689808|doi = 10.1093/bioinformatics/btn397|pmc = 2530884|display-authors = etal}}</ref><ref name="Mathura">VS Matha and P Kangueane, 2009, ''Bioinformatics: a concept-based introduction'', 2009. p26</ref> BioJava es un conjunto de bibliotecas escritas en el [[lenguaje de programación Java]] para manipular secuencias, estructuras de proteínas, conversores de archivos (file parsers), la interoperabilidad [[CORBA]], el [[DAS]], el acceso a [[AceDB]], [[programación dinámica]] y rutinas estadísticas simples. BioJava es compatible con una amplia gama de datos, a partir de ADN y secuencias de proteínas a nivel de las estructuras 3D de proteínas. Las bibliotecas BioJava son útiles para la automatización de muchas tareas cotidianas y mundanas de la [[bioinformática]] como para analizar un archivo [[PDB]] , interactuando con Jmol y muchos más. Esta [[interfaz de programación de aplicaciones]] ofrece diversos programas de análisis de archivos, modelos de datos y algoritmos para facilitar el trabajo con los formatos de datos estándar y permite el desarrollo rápido de aplicaciones y análisis. Estas bibliotecas también se han utilizado en el desarrollo de diversas herramientas de análisis extendido, por ejemplo :

* MUSI : Un sistema integrado para la identificación de la especificidad múltiple de un péptido de gran tamaño o un conjunto de datos de ácidos nucleicos<ref>{{cite journal |author=Kim T, Tyndel MS, Huang H |title=MUSI: an integrated system for identifying multiple specificity from very large peptide or nucleic acid data sets |journal=Nucleic Acids Res. |volume=40 |issue=6 |pages=e47 |date=March 2012 |pmid=22210894 |pmc=3315295 |doi=10.1093/nar/gkr1294 |url=http://nar.oxfordjournals.org/cgi/pmidlookup?view=long&pmid=22210894|display-authors=etal}}</ref>
* JEnsembl : Una versión-aware de Java API para los sistemas de datos Ensembl<ref>{{cite journal |author=Paterson T, Law A |title=JEnsembl: a version-aware Java API to Ensembl data systems |journal=Bioinformatics |volume=28 |issue=21 |pages=2724–31 |date=November 2012 |pmid=22945789 |pmc=3476335 |doi=10.1093/bioinformatics/bts525 |url=http://bioinformatics.oxfordjournals.org/cgi/pmidlookup?view=long&pmid=22945789}}</ref>
* Perfiles de expresión de grupos de firmas genéticas con el método de amplificación Trinucleotide threading (TnT)<ref>{{cite journal |author=Zajac P, Pettersson E, Gry M, Lundeberg J, Ahmadian A |title=Expression profiling of signature gene sets with trinucleotide threading |journal=Genomics |volume=91 |issue=2 |pages=209–17 |date=February 2008 |pmid=18061398 |doi=10.1016/j.ygeno.2007.10.012 |url=http://linkinghub.elsevier.com/retrieve/pii/S0888-7543(07)00254-6}}</ref>
* La resolución de las características estructurales de las islas genómicas : un enfoque de aprendizaje automático<ref>{{cite journal |author=Vernikos GS, Parkhill J |title=Resolving the structural features of genomic islands: a machine learning approach |journal=Genome Res. |volume=18 |issue=2 |pages=331–42 |date=February 2008 |pmid=18071028 |pmc=2203631 |doi=10.1101/gr.7004508 |url=http://genome.cshlp.org/cgi/pmidlookup?view=long&pmid=18071028}}</ref>
* Biblioteca de utilidad para la bioinformática estructural<ref>{{cite journal |author=Gront D, Kolinski A |title=Utility library for structural bioinformatics |journal=Bioinformatics |volume=24 |issue=4 |pages=584–5 |date=February 2008 |pmid=18227118 |doi=10.1093/bioinformatics/btm627 |url=http://bioinformatics.oxfordjournals.org/cgi/pmidlookup?view=long&pmid=18227118}}</ref>

El proyecto BioJava surgió del trabajo de Thomas Down y Mateo Pocock para crear una API para simplificar el desarrollo de herramientas bioinformáticas basadas en Java. BioJava es un proyecto de código abierto activo que se ha desarrollado durante más de 12 años y con más de 60 desarrolladores. BioJava es uno de una serie de Bio *. Proyectos diseñados para reducir la duplicación de código.<ref name="pmid12230038">{{cite journal| author=Mangalam H| title=The Bio* toolkits--a brief overview. | journal=BRIEFINGS IN BIOINFORMATICS | year= 2002 | volume= 3 | issue= 3 | pages= 296–302 | pmid=12230038 | doi= 10.1093/bib/3.3.296| pmc= | url= }}</ref> Los ejemplos de este tipo de proyectos que se enmarcan en Bio * aparte de BioJava son [[Biopython|BioPython]] ,<ref>{{cite journal |author=Cock PJ, Antao T, Chang JT |title=Biopython: freely available Python tools for computational molecular biology and bioinformatics |journal=Bioinformatics |volume=25 |issue=11 |pages=1422–3 |date=June 2009 |pmid=19304878 |pmc=2682512 |doi=10.1093/bioinformatics/btp163 |url=http://bioinformatics.oxfordjournals.org/cgi/pmidlookup?view=long&pmid=19304878|display-authors=etal}}</ref> [[BioPerl]] ,<ref>{{cite journal |author=Stajich JE, Block D, Boulez K |title=The Bioperl toolkit: Perl modules for the life sciences |journal=Genome Res. |volume=12 |issue=10 |pages=1611–8 |date=October 2002 |pmid=12368254 |pmc=187536 |doi=10.1101/gr.361602 |url=http://genome.cshlp.org/cgi/pmidlookup?view=long&pmid=12368254|display-authors=etal}}</ref>[[BioRuby]] ,<ref>{{cite journal |author=Goto N, Prins P, Nakao M, Bonnal R, Aerts J, Katayama T |title=BioRuby: bioinformatics software for the Ruby programming language |journal=Bioinformatics |volume=26 |issue=20 |pages=2617–9 |date=October 2010 |pmid=20739307 |pmc=2951089 |doi=10.1093/bioinformatics/btq475 |url=http://bioinformatics.oxfordjournals.org/cgi/pmidlookup?view=long&pmid=20739307}}</ref> [[EMBOSS]]<ref>{{cite journal |author=Rice P, Longden I, Bleasby A |title=EMBOSS: the European Molecular Biology Open Software Suite |journal=Trends Genet. |volume=16 |issue=6 |pages=276–7 |date=June 2000 |pmid=10827456 |url=http://linkinghub.elsevier.com/retrieve/pii/S0168-9525(00)02024-2 |doi=10.1016/S0168-9525(00)02024-2}}</ref> etc.

La última versión de BioJava (3.0.5) es una importante actualización de las versiones anteriores. La nueva versión de BioJava contiene varios módulos independientes. El viejo proyecto ha sido trasladado a un proyecto independiente llamado proyecto [https://web.archive.org/web/20130109110621/http://www.biojava.org/docs/api1.8.2/ BioJava-legacy].

La versión más reciente de BioJava es 4.1.0.

== Características ==
BioJava proporciona módulos de software para muchas de las tareas típicas de la programación de la bioinformática. Estas incluyen:

* Acceso a los datos de [[nucleótidos]] y a la secuencia de [[péptido]] de [[bases de datos]] locales y remotas.
* La transformación de [[List_of_file_formats#Biology|formatos]] de registros de base de datos / archivos.
* Análisis y manipulación de la estructura de la proteína.
* La manipulación de secuencias individuales.
* Busca secuencias similares.
* Creación y manipulación de [[Sequence_alignment|alineamientos de secuencias]].
* Interfaz de visualización en [[Swing (biblioteca gráfica)|Swing]] y [[AWT]]

=== Requerimientos ===

Desde la versión 3 de BioJava se requiere [[JDK]] 1.6.

=== Licencia ===

BioJava se encuentra licenciado con [[LGPL]] v2.1

Para licenciar los archivos de BioJava, se sigue el [http://biojava.org/wiki/BioJava3_license tutorial].

== Historia y Publicaciones ==

En el año 2008, se publicó la nota de solicitud de BioJava. Se migró desde su repositorio [[CVS]] original al centro de [[GitHub]] en abril de 2013.<ref>{{cite web|url=http://biojava.org/wiki/Get_source#History|title=History|accessdate=30 Jan 2015}}</ref>

En octubre de 2012, se publicó el documento más reciente sobre BioJava. A partir de noviembre de 2012 Google Academic [http://scholar.google.com/scholar?cites=3048631375755320177&as_sdt=2005&sciodt=0,5&hl=en cuenta con más de 130 citas].

== Módulos ==

Durante los últimos 2 años, gran parte de la [[base de código]] original se han reescrito. BioJava 3 es una clara desviación de la serie de la versión 1. Ahora se compone de varios módulos independientes construidos usando una herramienta de automatización llamada [[Apache Maven]].<ref>{{cite web|last=Maven|first=Apache|title=Maven|url=http://maven.apache.org|publisher=Apache}}</ref> Estos módulos proporcionan herramientas del estado del arte para la comparación de la estructura de proteínas, por parejas y múltiples alineamientos de secuencias, trabajando con [[ADN]] y secuencias de proteínas, análisis de propiedades de aminoácidos, la detección de modificaciones de proteínas y predicción de las desordenadas regiones en las proteínas, así como analizadores de formatos de archivo comunes utilizando un [[modelo de datos]] biológicamente significativos. El código original ha pasado a un proyecto separado del proyecto [https://web.archive.org/web/20130109110621/http://www.biojava.org/docs/api1.8.2/ BioJava legacy], que todavía está disponible para la compatibilidad hacia atrás.

Las siguientes secciones describen varios de los nuevos módulos y ponen de relieve algunas de las nuevas características que se incluyen en la versión más reciente de BioJava.

Estructuras proteicas: biojava-structure, biojava-alignment Optional module: biojava-structure-gui for the 3D visualisation Optional external library : JmolApplet.jar for the 3D visualisation

Alineamientos: biojava-alignment, biojava-core, biojava-phylo Required external library:       forester.jar

Genomas: biojava-genome.

Secuenciación: biojava-core,biojava-sequencing, Required external library: guava-11.0.1.jar

Árbol Filogenético: biojava-core, Required external library: forester.jar

Propiedades Físico-químicas: biojava-aa-prop, biojava-structure and biojava-core

Desorden de Proteínas: biojava-protein-disorder.

Identificación de Proteínas Modificadas: biojava-modfinder, biojava-structure

Llamadas a Web-Services: biojava-core, biojava-ws

=== Módulo Principal ===

Este módulo ofrece [[clases]] Java para modelar secuencias de [[aminoácidos]] o [[nucleótidos]]. Las clases se han diseñado teniendo en cuenta que deben ser conocidos por los biólogos, es decir, los nombres deben tener sentido para los biólogos y al mismo tiempo también proporcionan una representación concreta de los pasos para pasar de una secuencia de genes a una secuencia de la proteína para los científicos de la computación y programadores.
Un cambio importante entre el proyecto BioJava Legacy y BioJava3 radica en la forma que ha sido diseñado el framework para aprovechar las últimas innovaciones en Java. Una secuencia se define como una interfaz genérica permitiéndole al resto de los módulos crear cualquier utilidad que opera en todas las secuencias. Clases específicas para las secuencias comunes, tales como ADN y proteínas se han definido con el fin de mejorar la usabilidad para los biólogos. El motor de traducción realmente aprovecha este trabajo al permitir que las conversiones entre las secuencias de ADN, ARN y aminoácidos. Este motor puede manejar los detalles tales como la elección de la tabla de codones, la conversión de codones de inicio de metionina, el recorte de los codones de parada, especificando el marco de lectura y la entrega de secuencias ambiguas.

Se ha prestado atención especial en el diseño del almacenamiento de las secuencias a fin de minimizar los requisitos de espacio. Patrones de diseño especiales, como el [[Proxy_pattern|patrón Proxy]] que permitió a los desarrolladores crear el framework de manera tal que las secuencias se puedan almacenar en la memoria, la demanda de un servicio web como UniProt o leer desde un archivo [[FASTA]] según sea necesario. Los dos últimos enfoques ahorran memoria al no cargar datos de la secuencia hasta que se hace referencia en la solicitud. Este concepto se puede ampliar para manejar grandes bases de datos genómicas, tales como [[NCBI]], [[GenBank]] o una base de datos propietaria.

=== Módulos de Estructura de Proteínas ===
[[Archivo:This window shows two proteins with IDs "4hhb.A" and "4hhb.B" aligned against each other.png|Esta ventana muestra dos proteínas con IDs "4hhb.A" y "4hhb.B" alineados una contra la otra. El código se muestra en el lado izquierdo. Esto se produce utilizando bibliotecas BioJava que a su vez utiliza visor de Jmol. El FATCAT<ref name="fatcat">{{cite journal |author=Ye Y, Godzik A |title=Flexible structure alignment by chaining aligned fragment pairs allowing twists |journal=Bioinformatics |volume=19 |issue=Suppl 2|pages=ii246–55 |date=October 2003 |pmid=14534198 |url=http://bioinformatics.oxfordjournals.org/cgi/pmidlookup?view=long&pmid=14534198 |doi=10.1093/bioinformatics/btg1086}}</ref> algoritmo rígido que se utiliza aquí para hacer la alineación.]]
Los módulos de estructura de proteínas proporcionan herramientas para representar y manipular estructuras biomoleculares 3D. En particular, se centra en la comparación de la estructura de proteínas.
Los siguientes algoritmos se han aplicado y se incluyen en BioJava.

Algoritmo FATCAT para la alineación del cuerpo flexible y rígido.[17]
El algoritmo estándar Combinatoria de Extensión (CE).<ref>{{cite journal |author=Shindyalov IN, Bourne PE |title=Protein structure alignment by incremental combinatorial extension (CE) of the optimal path |journal=Protein Eng. |volume=11 |issue=9 |pages=739–47 |date=September 1998 |pmid=9796821 |url=http://peds.oxfordjournals.org/cgi/pmidlookup?view=long&pmid=9796821 |doi=10.1093/protein/11.9.739}}</ref>
Una nueva versión de la CE que puede detectar permutaciones circulares en las proteínas.<ref>{{cite journal |author=Bliven S, Prlić A |title=Circular permutation in proteins |journal=PLoS Comput. Biol. |volume=8 |issue=3 |pages=e1002445 |year=2012 |pmid=22496628 |pmc=3320104 |doi=10.1371/journal.pcbi.1002445 |url=http://dx.plos.org/10.1371/journal.pcbi.1002445}}</ref>
Estos algoritmos se utilizan para proporcionar al RCSB Protein Data Bank (PDB)<ref>{{cite journal |author=Rose PW, Beran B, Bi C |title=The RCSB Protein Data Bank: redesigned web site and web services |journal=Nucleic Acids Res. |volume=39 |issue=Database issue |pages=D392–401 |date=January 2011 |pmid=21036868 |pmc=3013649 |doi=10.1093/nar/gkq1021 |url=http://nar.oxfordjournals.org/cgi/pmidlookup?view=long&pmid=21036868|display-authors=etal}}</ref> La herramienta de comparación de proteínas, así como comparaciones sistemáticas de todas las proteínas en el PDB semanalmente.<ref>{{cite journal |author=Prlic A, Bliven S, Rose PW |title=Pre-calculated protein structure alignments at the RCSB PDB website |journal=Bioinformatics |volume=26 |issue=23 |pages=2983–5 |date=December 2010 |pmid=20937596 |pmc=3003546 |doi=10.1093/bioinformatics/btq572 |url=http://bioinformatics.oxfordjournals.org/cgi/pmidlookup?view=long&pmid=20937596|display-authors=etal}}</ref>
Analizadores de formatos de archivos de PDB<ref>{{cite journal |author=Bernstein FC, Koetzle TF, Williams GJ |title=The Protein Data Bank: a computer-based archival file for macromolecular structures |journal=J. Mol. Biol. |volume=112 |issue=3 |pages=535–42 |date=May 1977 |pmid=875032 |doi=10.1016/s0022-2836(77)80200-3 |display-authors=etal}}</ref> y mmCIF<ref>Fitzgerald,P.M.D. et al. (2006) Macromolecular dictionary (mmCIF). In Hall,S.R.</ref> permiten la carga de datos de la estructura en un modelo de datos reutilizable. Esta característica es utilizada por el proyecto SIFTS para mapear entre las secuencias de UniProt y estructuras de PDB.<ref>{{cite journal |author=Velankar S, McNeil P, Mittard-Runte V |title=E-MSD: an integrated data resource for bioinformatics |journal=Nucleic Acids Res. |volume=33 |issue=Database issue |pages=D262–5 |date=January 2005 |pmid=15608192 |pmc=540012 |doi=10.1093/nar/gki058 |url=http://nar.oxfordjournals.org/cgi/pmidlookup?view=long&pmid=15608192|display-authors=etal}}</ref> Información de la RCSB PDB puede ser dinámicamente obtenida y sin la necesidad de descargar manualmente los datos. Para la visualización, se proporciona una interfaz para el visor 3D Jmol (http://www.jmol.org/) . El equipo afirma que se está trabajando para mejorar la interacción con los viewers de RCSB PDB.<ref>{{cite journal |author=Moreland JL, Gramada A, Buzko OV, Zhang Q, Bourne PE |title=The Molecular Biology Toolkit (MBT): a modular platform for developing molecular visualization applications |journal=BMC Bioinformatics |volume=6 |issue= |pages=21 |year=2005 |pmid=15694009 |pmc=548701 |doi=10.1186/1471-2105-6-21 |url=http://www.biomedcentral.com/1471-2105/6/21}}</ref>

A continuación se muestra un esquema del código para inicializar una ventana que mostrará y comparará dos secuencias de proteínas. Por favor, tenga en cuenta que esto es sólo un esbozo del código. Para hacer este trabajo tendrá que importar el paquete correcto en "org.biojava.bio.structure" y también añadir manejar excepciones utilizando un bloque try-catch.
<syntaxhighlight lang="java">
 String name1 = "4hhb.A";
 String name2 = "4hhb.B";

 AtomCache cache = new AtomCache();

 Structure structure1 = null;
 Structure structure2 = null;

 StructureAlignment algorithm  =
 StructureAlignmentFactory.getAlgorithm(FatCatRigid.algorithmName);

 structure1 = cache.getStructure(name1);
 structure2 = cache.getStructure(name2);

 Atom[] ca1 = StructureTools.getAtomCAArray(structure1);
 Atom[] ca2 = StructureTools.getAtomCAArray(structure2);

 FatCatParameters params = new FatCatParameters();

 AFPChain afpChain = algorithm.align(ca1,ca2,params);

 afpChain.setName1(name1);
 afpChain.setName2(name2);

 StructureAlignmentDisplay.display(afpChain, ca1, ca2);
</syntaxhighlight>
El código alinea las dos secuencias de proteínas "4hhb.A" y "4hhb.B" basado en el algoritmo rígido FATCAT.

=== Módulos Genoma y Secuenciación ===

Este módulo se centra en la creación de objetos de secuencias de genes desde el módulo principal. Esto se realiza mediante el apoyo al análisis de los siguientes formatos de archivo estándar populares generados por las aplicaciones de predicción de genes de código abierto:

*Archivos GTF generados por GeneMark<ref>{{cite journal |author=Besemer J, Borodovsky M |title=GeneMark: web software for gene finding in prokaryotes, eukaryotes and viruses |journal=Nucleic Acids Res. |volume=33 |issue=Web Server issue |pages=W451–4 |date=July 2005 |pmid=15980510 |pmc=1160247 |doi=10.1093/nar/gki487 |url=http://nar.oxfordjournals.org/cgi/pmidlookup?view=long&pmid=15980510}}</ref>
*Archivos GFF2 generados por GeneID<ref>{{cite journal |author=Blanco E, Abril JF |title=Computational gene annotation in new genome assemblies using GeneID |journal=Methods Mol. Biol. |volume=537 |issue= |pages=243–61 |year=2009 |pmid=19378148 |doi=10.1007/978-1-59745-251-9_12 }}</ref>
*Archivos GFF3 generados por Glimmer<ref>{{cite journal |author=Kelley DR, Liu B, Delcher AL, Pop M, Salzberg SL |title=Gene prediction with Glimmer for metagenomic sequences augmented by classification and clustering |journal=Nucleic Acids Res. |volume=40 |issue=1 |pages=e9 |date=January 2012 |pmid=22102569 |pmc=3245904 |doi=10.1093/nar/gkr1067 |url=http://nar.oxfordjournals.org/cgi/pmidlookup?view=long&pmid=22102569}}</ref>

A continuación, los objetos de secuencias de genes se escriben como un formato GFF3 y se importan en GMOD.<ref>{{cite journal |author=Stein LD, Mungall C, Shu S |title=The generic genome browser: a building block for a model organism system database |journal=Genome Res. |volume=12 |issue=10 |pages=1599–610 |date=October 2002 |pmid=12368253 |pmc=187535 |doi=10.1101/gr.403602 |url=http://genome.cshlp.org/cgi/pmidlookup?view=long&pmid=12368253|display-authors=etal}}</ref> Estos formatos de archivo están bien definidos, pero lo que se escribe en el archivo es muy flexible.

En el siguiente código de ejemplo se toma un archivo 454scaffold, que fue utilizado por GeneMark para predecir genes, y devuelve una colección de ChromosomeSequences. Cada secuencia de cromosoma se asigna a una entrada llamada en el archivo FASTA y contendría N secuencias de genes. Las secuencias de genes pueden ser hebra +/- con cambios de marco y múltiples transcripciones.

Pasando la colección de ChromosomeSequences a GeneFeatureHelper.getProteinSequences devolvería todas las secuencias de proteínas. A continuación, puede escribir las secuencias de proteínas a un archivo FASTA.

<syntaxhighlight lang="java">
LinkedHashMap<String, ChromosomeSequence> chromosomeSequenceList =
    GeneFeatureHelper.loadFastaAddGeneFeaturesFromGeneMarkGTF(new File("454Scaffolds.fna"), new File("genemark_hmm.gtf"));
LinkedHashMap<String, ProteinSequence> proteinSequenceList = GeneFeatureHelper.getProteinSequences(chromosomeSequenceList.values());
FastaWriterHelper.writeProteinSequence(new File("genemark_proteins.faa"), proteinSequenceList.values());

 </syntaxhighlight>

También puede dar salida a la secuencia del gen en un archivo fasta donde las regiones codificantes estarán en mayúscula y las regiones no codificantes estarán en minúscula.

<syntaxhighlight lang="java">
LinkedHashMap<String, GeneSequence> geneSequenceHashMap = GeneFeatureHelper.getGeneSequences(chromosomeSequenceList.values());
Collection<GeneSequence> geneSequences = geneSequenceHashMap.values();
FastaWriterHelper.writeGeneSequence(new File("genemark_genes.fna"), geneSequences, true);

 </syntaxhighlight>

Usted puede escribir fácilmente una vista GFF3 de un ChromosomeSequence con el siguiente código.

<syntaxhighlight lang="java">
FileOutputStream fo = new FileOutputStream("genemark.gff3");
GFF3Writer gff3Writer = new GFF3Writer();
gff3Writer.write(fo, chromosomeSequenceList);
fo.close();

 </syntaxhighlight>

Para la prestación de apoyo de entrada-salida por varias variantes comunes del formato de archivo FASTQ de los secuenciadores de última generación, se proporciona<ref>{{cite journal |author=Cock PJ, Fields CJ, Goto N, Heuer ML, Rice PM |title=The Sanger FASTQ file format for sequences with quality scores, and the Solexa/Illumina FASTQ variants |journal=Nucleic Acids Res. |volume=38 |issue=6 |pages=1767–71 |date=April 2010 |pmid=20015970 |pmc=2847217 |doi=10.1093/nar/gkp1137 |url=http://nar.oxfordjournals.org/cgi/pmidlookup?view=long&pmid=20015970}}</ref> un módulo de secuenciación independiente. Se llama el módulo de secuencia y está contenido en el paquete org.biojava3.sequencing.io.fastq. Para las muestras sobre el uso de este módulo por favor haga clic aquí (http://biojava.org/wiki/BioJava:CookBook3:FASTQ).

Se está trabajando para llegar a crear un conjunto completo de clases java para hacer conversiones entre diferentes formatos de archivo donde la lista de aplicaciones de predicción de genes compatibles y buscadores de genomas estarán ampliamente basadas en los requerimientos de los usuarios finales.

=== Módulo de Alineamiento ===

Este módulo contiene varias clases y métodos que permiten a los usuarios realizar alineamientos de secuencias por parejas y por secuencias múltiples.

Pairwise alineación de secuencias
Para la alineación global óptima, BioJava implementa el algoritmo [[Needleman–Wunsch_algorithm|Needleman-Wunsch]]<ref>{{cite journal |author=Needleman SB, Wunsch CD |title=A general method applicable to the search for similarities in the amino acid sequence of two proteins |journal=J. Mol. Biol. |volume=48 |issue=3 |pages=443–53 |date=March 1970 |pmid=5420325 |url=http://linkinghub.elsevier.com/retrieve/pii/0022-2836(70)90057-4 |doi=10.1016/0022-2836(70)90057-4}}</ref> y para realizar alineamientos locales implementa el algoritmo [[Smith–Waterman_algorithm|Smith y Waterman]].<ref>{{cite journal |author=Smith TF, Waterman MS |title=Identification of common molecular subsequences |journal=J. Mol. Biol. |volume=147 |issue=1 |pages=195–7 |date=March 1981 |pmid=7265238 |url=http://linkinghub.elsevier.com/retrieve/pii/0022-2836(81)90087-5 |doi=10.1016/0022-2836(81)90087-5}}</ref> Las salidas de ambos alineamientos locales y globales están disponibles en formatos estándar.

Un ejemplo de cómo usar las bibliotecas se muestra a continuación.

<syntaxhighlight lang="java">
protected void align(String uniProtID_1, String uniProtID_2, PairwiseSequenceAlignerType alignmentType) throws IOException, Exception {
    ProteinSequence proteinSeq1 = FastaReaderHelper.readFastaProteinSequence((new URL(String.format
        ("http://www.uniprot.org/uniprot/%s.fasta", uniProtID_1))).openStream()).get(uniProtID_1);
    ProteinSequence proteinSeq2 = FastaReaderHelper.readFastaProteinSequence((new URL(String.format
        ("http://www.uniprot.org/uniprot/%s.fasta", uniProtID_2))).openStream()).get(uniProtID_2);

           SequencePair<ProteinSequence, AminoAcidCompound> result = Alignments.getPairwiseAlignment(proteinSeq1, proteinSeq2,
                   alignmentType, new SimpleGapPenalty(), new SimpleSubstitutionMatrix<AminoAcidCompound>());
    System.out.println(result.toString());
}

 </syntaxhighlight>
Un ejemplo de llamada a la función anterior sería algo como esto:

Para un Alineamiento Global
<syntaxhighlight lang="java">
align("Q21691", "Q21495", PairwiseSequenceAlignerType.GLOBAL);
 </syntaxhighlight>
Para un Alineamiento Local
<syntaxhighlight lang="java">
align("Q21691", "Q21495", PairwiseSequenceAlignerType.LOCAL);
 </syntaxhighlight>

Además de estos dos algoritmos, existe una implementación del algoritmo de Guan-Uberbacher<ref>{{cite journal |author=Guan X, Uberbacher EC |title=Alignments of DNA and protein sequences containing frameshift errors |journal=Comput. Appl. Biosci. |volume=12 |issue=1 |pages=31–40 |date=February 1996 |pmid=8670617 |doi=10.1093/bioinformatics/12.1.31}}</ref> que lleva a cabo una alineación global de secuencias de manera muy eficiente ya que sólo utiliza la memoria lineal.

Para alineamiento de secuencia múltiples, cualquiera de los métodos discutidos anteriormente pueden utilizarse para llevar a cabo progresivamente una alineación de secuencias múltiples.

=== Módulo ModFinder ===

[[Archivo:An_example_application_using_the_ModFinder_module_and_the_protein_structure_module.png|Una aplicación de ejemplo usando el módulo ModFinder y el módulo de estructuras de proteínas<ref>{{cite journal |author=Chen K, Jung YS, Bonagura CA |title=Azotobacter vinelandii ferredoxin I: a sequence and structure comparison approach to alteration of [4Fe-4S]2+/+ reduction potential |journal=J. Biol. Chem. |volume=277 |issue=7 |pages=5603–10 |date=February 2002 |pmid=11704670 |doi=10.1074/jbc.M108916200 |url=http://www.jbc.org/cgi/pmidlookup?view=long&pmid=11704670 |display-authors=etal }}</ref>]]

El módulo ModFinder ofrece nuevos métodos para identificar y clasificar las modificaciones de proteínas en estructuras 3D de proteínas. Se recogieron y curaron más de 400 diferentes tipos de modificaciones de proteínas como la [[fosforilación]], [[glicosilación]], [[enlaces disulfuro]], quelación de metales, etc., basadas en anotaciones en PSI-MOD,<ref>{{cite journal |author=Montecchi-Palazzi L, Beavis R, Binz PA |title=The PSI-MOD community standard for representation of protein modification data |journal=Nat. Biotechnol. |volume=26 |issue=8 |pages=864–6 |date=August 2008 |pmid=18688235 |doi=10.1038/nbt0808-864 |display-authors=etal}}</ref> RESID<ref>{{cite journal |author=Garavelli JS |title=The RESID Database of Protein Modifications as a resource and annotation tool |journal=Proteomics |volume=4 |issue=6 |pages=1527–33 |date=June 2004 |pmid=15174122 |doi=10.1002/pmic.200300777 }}</ref> y RCSB PDB.<ref>{{cite journal |author=Berman HM, Westbrook J, Feng Z |title=The Protein Data Bank |journal=Nucleic Acids Res. |volume=28 |issue=1 |pages=235–42 |date=January 2000 |pmid=10592235 |pmc=102472 |doi=10.1093/nar/28.1.235|display-authors=etal}}</ref> El módulo también proporciona una API para la detección de modificaciones de proteínas dentro de las estructuras de las proteínas.

Ejemplo: identificar e imprimir todas las modificaciones precargados de una estructura<ref>{{cite web|last=CookBook3|first=BioJava|title=ModFinder|url=http://biojava.org/wiki/BioJava:CookBook3:ModFinder}}</ref>

<syntaxhighlight lang="java">
Set<ModifiedCompound> identifyAllModfications(Structure struc) {
    ProteinModificationIdentifier parser =
        new ProteinModificationIdentifier();
    parser.identify(struc);
    Set<ModifiedCompound> mcs =
        parser.getIdentifiedModifiedCompound();
    return mcs;
}

 </syntaxhighlight>

Ejemplo: identificar sitios de fosforilación en una estructura

<syntaxhighlight lang="java">
List<ResidueNumber> identifyPhosphosites(Structure struc) {
    List<ResidueNumber> phosphosites = new ArrayList<ResidueNumber>();
    ProteinModificationIdentifier parser =
        new ProteinModificationIdentifier();
    parser.identify(struc,
        ProteinModificationRegistry.getByKeyword("phosphoprotein"));
    Set<ModifiedCompound> mcs = parser.getIdentifiedModifiedCompound();
    for (ModifiedCompound mc : mcs) {
        Set<StructureGroup> groups = mc.getGroups(true);
        for (StructureGroup group : groups) {
            phosphosites.add(group.getPDBResidueNumber());
        }
    }
    return phosphosites;
}

 </syntaxhighlight>

Código de demostración para ejecutar los métodos anteriores

<syntaxhighlight lang="java">
import org.biojava.bio.structure.ResidueNumber;
import org.biojava.bio.structure.Structure;
import org.biojava.bio.structure.io.PDBFileReader;
import org.biojava3.protmod.structure.ProteinModificationIdentifier;

public static void main(String[] args) {
    try {
        PDBFileReader reader = new PDBFileReader();
        reader.setAutoFetch(true);

        // identify all modifications from PDB:1CAD and print them
        String pdbId = "1CAD";
        Structure struc = reader.getStructureById(pdbId);
        Set<ModifiedCompound> mcs = identifyAllModfications(struc);
        for (ModifiedCompound mc : mcs) {
            System.out.println(mc.toString());
        }

        // identify all phosphosites from PDB:3MVJ and print them
        pdbId = "3MVJ";
        struc = reader.getStructureById(pdbId);
        List<ResidueNumber> psites = identifyPhosphosites(struc);
        for (ResidueNumber psite : psites) {
            System.out.println(psite.toString());
        }
    } catch(Exception e) {
        e.printStackTrace();
    }
}

 </syntaxhighlight>

Hay planes para incluir las modificaciones adicionales a las proteínas mediante la integración de otros recursos como UniProt<ref>{{cite journal |author=Farriol-Mathis N, Garavelli JS, Boeckmann B |title=Annotation of post-translational modifications in the Swiss-Prot knowledge base |journal=Proteomics |volume=4 |issue=6 |pages=1537–50 |date=June 2004 |pmid=15174124 |doi=10.1002/pmic.200300764 |display-authors=etal}}</ref>

=== Módulo Propiedades de Aminoácidos ===

Este módulo trata de proporcionar las propiedades físico-químicas precisas de las proteínas. Las propiedades que pueden ser calculadas usando este módulo son los siguientes:

* [[Masa molecular]]
* [[Coeficiente de extinción]]
* Índice de Inestabilidad
* Índice alifáticos
* Gran media de hidropatıa
* [[Punto isoeléctrico]]
* Composición de aminoácidos

Los pesos moleculares precisos para los aminoácidos comunes marcados isotópicamente se incluyen en este módulo. También existe flexibilidad para definir nuevas moléculas de aminoácidos con sus pesos moleculares utilizando archivos de configuración sencilla [[XML]]. Esto puede ser útil donde la masa exacta es de gran importancia, tales como experimentos de [[espectrometría de masas]].

=== Módulo de Desorden en la Proteína ===

El objetivo de este módulo es proporcionar a los usuarios maneras de encontrar desorden en las moléculas de proteína. BioJava incluye una implementación de Java del predictor RONN (http://bioinformatics.oxfordjournals.org/content/21/16/3369.full). La versión de BioJava (3.0.5) hace uso de la ayuda de Java para multithreading para mejorar el rendimiento hasta en 3,2 veces,<ref>{{cite journal |author=Yang ZR, Thomson R, McNeil P, Esnouf RM |title=RONN: the bio-basis function neural network technique applied to the detection of natively disordered regions in proteins |journal=Bioinformatics |volume=21 |issue=16 |pages=3369–76 |date=August 2005 |pmid=15947016 |doi=10.1093/bioinformatics/bti534 |url=http://bioinformatics.oxfordjournals.org/cgi/pmidlookup?view=long&pmid=15947016}}</ref> en una máquina moderna de cuatro núcleos, en comparación con la implementación del legado C.

Hay dos maneras de utilizar este módulo:

* El uso de las llamadas a funciones de biblioteca
* El uso de la línea de comandos

Hacer llamadas a funciones de biblioteca

Los siguientes ejemplos muestran cómo utilizar el módulo y hacer llamadas de función para obtener información acerca de los desórdenes de proteínas. En los dos primeros ejemplos se llama a una función de la biblioteca para calcular la probabilidad de desorden para cada residuo de la secuencia proporcionada.

El tercer y cuarto ejemplo demuestran la facilidad con que se pueden obtener las regiones desordenadas de la proteína.

Ejemplo 1: Calcular la probabilidad de desorden para cada residuo en la secuencia
<syntaxhighlight lang="java">
FastaSequence fsequence = new FastaSequence("name", "LLRGRHLMNGTMIMRPWNFLNDHHFPKFFPHLIEQQAIWLADWWRKKHC" +
                "RPLPTRAPTMDQWDHFALIQKHWTANLWFLTFPFNDKWGWIWFLKDWTPGSADQAQRACTWFFCHGHDTN");
float[]    rawProbabilityScores = Jronn.getDisorderScores(fsequence);

</syntaxhighlight>

Ejemplo 2: Calcular la probabilidad de desorden para cada residuo en la secuencia para todas las proteínas del archivo de entrada FASTA

<syntaxhighlight lang="java">
final List<FastaSequence> sequences = SequenceUtil.readFasta(new FileInputStream("src/test/resources/fasta.in"));
Map<FastaSequence, float[]> rawProbabilityScores = Jronn.getDisorderScores(sequences);

</syntaxhighlight>
Ejemplo 3: Obtener las regiones desordenada de la proteína para una sola secuencia de la proteína

<syntaxhighlight lang="java">
FastaSequence fsequence = new FastaSequence("Prot1", "LLRGRHLMNGTMIMRPWNFLNDHHFPKFFPHLIEQQAIWLADWWRKKHC" +
                "RPLPTRAPTMDQWDHFALIQKHWTANLWFLTFPFNDKWGWIWFLKDWTPGSADQAQRACTWFFCHGHDTN" +
                "CQIIFEGRNAPERADPMWTGGLNKHIIARGHFFQSNKFHFLERKFCEMAEIERPNFTCRTLDCQKFPWDDP");
Range[] ranges = Jronn.getDisorder(fsequence);

 </syntaxhighlight>

Ejemplo 4: Calcular las regiones desordenadas para las proteínas de archivo FASTA

<syntaxhighlight lang="java">
final List<FastaSequence> sequences = SequenceUtil.readFasta(new FileInputStream("src/test/resources/fasta.in"));
Map<FastaSequence, Range[]> ranges = Jronn.getDisorder(sequences);

</syntaxhighlight>

El uso de la línea de comandos

BioJava módulo biojava3-protein-disorder se puede compilar en un solo archivo JAR ejecutable y ejecutar mediante el comando siguiente.<ref>{{cite web|last=CookBook3|first=BioJava|title=Protein Disorder CLI|url=http://biojava.org/wiki/BioJava:CookBook3:ProteinDisorderCLI}}</ref>

 java -jar <jar_file_name>

Opciones admitidas por el ejecutable de línea de comandos

 JRONN version 3.1b usage 1 August 2011:
 java -jar JRONN_JAR_NAME -i=inputfile <OPTIONS>

 Where -i=input file
         Input file can contain one or more FASTA formatted sequences.

 All OPTIONS are optional

 OPTION DETAILED DESCRIPTION:
         -o full path to the output file, if not specified
         standard out is used

         -d the value of disorder, defaults to 0.5

         -f output format, V for vertical, where the letters
         of the sequence and corresponding disorder values are
         output in two column layout. H for horizontal, where the
         disorder values are provided under the letters of the
         sequence. Letters and values separated by tabulation in
         this case. Defaults to V.

         -s the file name to write execution statistics to.

         -n the number of threads to use. Defaults to the number of
         cores available on the computer. n=1 mean sequential
         processing. Valid values are 1 < n < (2 x num_of_cores)
         Default value will give the best performance.

Ejemplos

Predecir los valores de desorden para las secuencias desde un archivo de entrada /home/input.fasta a una salida estándar de resultados. Utiliza un valor predeterminado de desorden y también utilizar todas las CPU disponibles en el equipo.

 java -jar JRONN.JAR -i=/home/input.fasta

Predecir los valores de desorden para las secuencias desde una archivo de entrada /home/input.fasta los resultados en disposición horizontal a /home/jronn.out, recopilan estadísticas de ejecución al archivo /home/jronn.stat.txt y limitan el número de threads a dos.

 java -jar JRONN.JAR -i=/home/input.fasta -o=/home/jronn.out -d=0.6 -n=2 -f=H

Los argumentos se pueden proporcionar en cualquier orden.

=== Módulo de acceso a servicio Web ===

De acuerdo con las tendencias actuales en la bioinformática, herramientas basadas en web están ganando popularidad. El módulo de servicio web permite a los servicios de bioinformática para acceder a través de protocolos [[REST]]. Actualmente, dos servicios se implementan:. [[NCBI]] [[Blast]] a través de la Blast URLAPI (anteriormente conocido como QBlast) y el servicio de HMMER web.<ref>{{cite journal |author=Finn RD, Clements J, Eddy SR |title=HMMER web server: interactive sequence similarity searching |journal=Nucleic Acids Res. |volume=39 |issue=Web Server issue |pages=W29–37 |date=July 2011 |pmid=21593126 |pmc=3125773 |doi=10.1093/nar/gkr367 |url=http://nar.oxfordjournals.org/cgi/pmidlookup?view=long&pmid=21593126}}</ref>

== Las comparaciones con otras alternativas ==

La necesidad de software a medida en el campo de la bioinformática ha sido abordado por varios grupos e individuos. Existen proyectos similares a BioJava, los proyectos de código abierto como BioPerl, BioPython y BioRuby todos proporcionan kits de herramientas con múltiples funcionalidades que hacen que sea más fácil para crear pipelines o análisis personalizados.

Como el nombre sugiere, los proyectos mencionados anteriormente utilizan diferentes lenguajes de programación. Todas estas APIs ofrecen herramientas similares, por lo tanto, ¿Qué criterios se deberían tener en cuenta en la elección?. Para los programadores con experiencia en sólo uno de estos idiomas, la elección es sencilla.

En general, para los programas pequeños (<500 líneas) que serán utilizadas únicamente por un pequeño grupo o de forma individual, es difícil de superar a Perl y a BioPerl. Estas restricciones, probablemente, cubren las necesidades de 90 por ciento de los requisitos de programación .

Para los principiantes, y para escribir programas más grandes en el dominio Bio, especialmente aquellos para ser compartido y apoyado por otros, la claridad y la brevedad de Python lo hacen muy atractivo.

Para aquellos que pudieran estar inclinado hacia una carrera en la bioinformática y que quieren aprender un solo idioma, Java cuenta con el apoyo de programación general más amplia, muy buen apoyo en el dominio Bio con BioJava, y ahora es el idioma de facto del negocio.

Aparte de estos Bio* proyectos hay otro proyecto llamado Strap que utiliza Java y apunta a objetivos similares. La caja de herramientas Strap, similar a BioJava es también un conjunto de herramientas Java para el diseño de programas de bioinformática y scripts. Las similitudes y diferencias entre BioJava y STRAP son los siguientes:

Similitudes

* Ambos proporcionan colecciones completas de los métodos de secuencias de proteínas.
* Ambos son utilizados por los programadores de Java para la codificación de algoritmos de Bioinformática.
* Ambas separan las implementaciones y definiciones mediante el uso de interfaces de Java.
* Ambos son proyectos de código abierto.
* Ambos pueden leer y escribir muchos formatos de archivo de secuencia.

Diferencias

* BioJava es aplicable a secuencias de nucleótidos y de péptidos y se puede aplicar para los genomas enteros. STRAP no le puede hacer frente a las secuencias individuales tan largas como un cromosoma entero. STRAP manipula secuencias de péptidos y estructuras 3D del tamaño de las proteínas individuales. Sin embargo, se puede mantener un alto número de secuencias y estructuras en la memoria. STRAP está diseñado para las secuencias de proteínas, pero puede leer archivos de nucleótidos que codifican, que luego se traducen a secuencias péptido.
* STRAP es muy rápido ya que la interfaz gráfica de usuario debe ser muy sensible. BioJava se utiliza donde la velocidad es menos crítica.
* BioJava está bien diseñado en términos de seguridad de tipos, la ontología y el diseño de objetos.
* BioJava utiliza objetos de secuencias, anotaciones y posiciones de la secuencia. Incluso los aminoácidos o ácidos nucleótidos individuales son referencias a objetos. Para mejorar la velocidad, STRAP evita instancias de objeto frecuentes y la invocación de objetos-métodos no finales.
** En BioJava las secuencias de péptidos y las secuencias de nucleótidos son listas de símbolos. Los símbolos se pueden recuperar uno después del otro con un iterador o se pueden obtener subsecuencia. Las ventajas son que toda la secuencia no reside necesariamente en la memoria y que los programas son menos susceptibles a los errores de programación. Objetos de símbolos son elementos inmutables de un alfabeto. Sin embargo en STRAP las matrices de bytes simples se utilizan para las secuencias y las matrices de flotantes para las coordenadas. Además de la velocidad, el bajo consumo de memoria es una ventaja importante de los tipos de datos básicos. Las clases en STRAP exponen los datos internos. Por lo tanto, los programadores pueden cometer errores de programación, como la manipulación de matrices de bytes directamente en lugar de utilizar los métodos setter. Otra desventaja es que en STRAP no se realizan controles si los caracteres en las secuencias son válidas con respecto a un alfabeto subyacente.
** En BioJava las posiciones de secuencia se realizan por la clase Location. Los discontinuos objetos de Location se componen de varios objetos contiguos RangeLocation u objetos PointLocation. Sin embargo para la clase StrapProtein, las posiciones de los residuos se indican mediante números enteros entre 0 y countResidues () - 1. Múltiples posiciones están dadas por matrices booleanas. Si el índice determinado es verdadero, será seleccionado.
* BioJava lanza excepciones cuando los métodos se invocan con parámetros no válidos. STRAP evita el tiempo de creación de objetos Throwable. En lugar de ello, los errores en los métodos se indican mediante los valores de retorno NaN, -1 o nulos. Desde el punto de diseño del programa, sin embargo los objetos Throwable son más bonitas.
* En BioJava un objeto de secuencia es o bien una secuencia de péptido o una secuencia de nucleótidos. A StrapProtein puede contener ambos al mismo tiempo si una secuencia de nucleótidos de codificación se leyó y se traduce en proteína. Ambos, la secuencia de nucleótidos y la secuencia de péptidos están contenidas en el mismo objeto StrapProtein. La codificación o regiones no codificantes se pueden cambiar y la secuencia del péptido altera en consecuencia.

== Proyectos usando BioJava ==

* [https://web.archive.org/web/20170506143731/http://www.genostar.com/ Metabolic Pathway Builder]:Software dedicada a la exploración de las conexiones entre los genes, las proteínas, las reacciones y las vías metabólicas.
* [https://web.archive.org/web/20061208145541/http://www.dengueinfo.org/ DengueInfo]:  Un portal de información sobre el genoma del dengue que utiliza BioJava en el middleware y habla con una base de datos BioSQL.
* {{Enlace roto|1=[http://www.derkholm.net/thomas/dazzle Dazzle] |2=http://www.derkholm.net/thomas/dazzle |bot=InternetArchiveBot }}: Un servidor DAS basado BioJava.
* [http://www.idbs.com/InforSenseSuite/BioSense BioSense] {{Wayback|url=http://www.idbs.com/InforSenseSuite/BioSense |date=20111001074401 }}: Plugin para la suite InforSense, una plataforma de software de análisis por [http://www.idbs.com/ IDBS] que unifica BioJava.
* [https://web.archive.org/web/20100111032721/http://www.bioclipse.net/ Bioclipse]: Código abierto, banco de trabajo para la quimio y la bioinformática con potentes capacidades de edición y visualización de moléculas, secuencias, proteínas,  espectros etc.
* [http://webclu.bio.wzw.tum.de/prompt PROMPT] {{Wayback|url=http://webclu.bio.wzw.tum.de/prompt |date=20080618082251 }}: Aplicación de código abierto para la comparación y la cartografía de los conjuntos de proteínas. Utiliza BioJava para el manejo de la mayoría de los formatos de datos de entrada.
* [http://www.cytoscape.org Cytoscape]: Una plataforma de software de bioinformática de código abierto para la visualización de las redes de interacción molecular.
* [http://www.bioweka.org BioWeka]: Una aplicación de minería de datos biológicos de código abierto.
* [http://www.biomatters.com Geneious]: Un juego de herramientas de la biología molecular.
* [http://www.ncbi.nlm.nih.gov/staff/slottad/MassSieve/ MassSieve]: una aplicación de código abierto para el análisis de masas de datos proteómica spec.
* [https://web.archive.org/web/20150112161329/http://www.charite.de/bioinf/strap/ Strap]: Una herramienta para la alineación de secuencias múltiples y estructura de alineación basada en la secuencia
* [http://www.jstacs.de Jstacs]: Un marco de Java para el análisis estadístico y clasificación de secuencias biológicas.
* [http://www.bioinf.jku.at/software/LSTM_protein/ jLSTM] "Long Short Term-memory" para la clasificación de proteínas.
* [http://lajolla.sourceforge.net LaJolla] Alineación estructural de ARN y proteínas utilizando una estructura de índice para una alineación rápida de miles de estructuras. Incluyendo un fácil de usar interfaz de línea de comandos. El código abierto en Sourceforge.
* [http://www.geneinfinity.org/genbeans/index.html GenBeans]: Una plataforma de cliente enriquecido de la bioinformática se centraron principalmente en la biología molecular y análisis de la secuencia.
* [http://bioservices.hs-mittweida.de/equant/ Equant] {{Wayback|url=http://bioservices.hs-mittweida.de/equant/ |date=20151208052434 }}: Un servidor de evaluación de la calidad del modelo para indicar la fiabilidad de estructuras de proteínas.

== Referencias ==
{{Listaref|2}}

{{Control de autoridades}}
[[Categoría:Bioinformática]]
[[Categoría:Plataforma Java]]
[[Categoría:Biología computacional]]