BioJava
Originalförfattare | Andreas Prlić |
---|---|
Utvecklare | Amr ALHOSSARY, Andreas Prlic, Dmytro Guzenko, Hannes Brandstätter-Müller, Jose Manuel Duarte, Thomas Down, Michael L Heuer, Peter Troshin, JianJiong Gao, Aleix Lafita, Peter Rose, Spencer Bliven |
Initial release | 2002 |
Stabil frisättning | 6.0.3 / 19 december 2021
|
Förvar | |
Skrivet i | Java |
Plattform | Webbläsare med Java SE |
Tillgänglig i | engelsk |
Typ | Bioinformatik |
Licens | Lesser GPL 2.1 |
Hemsida |
BioJava är ett program med öppen källkod för att tillhandahålla Java- verktyg för att bearbeta biologiska data. BioJava är en uppsättning biblioteksfunktioner skrivna i programmeringsspråket Java för att manipulera sekvenser, proteinstrukturer, filparsers, Common Object Request Broker Architecture (CORBA) interoperabilitet, Distributed Annotation System (DAS), tillgång till AceDB , dynamisk programmering och enkel statistisk rutiner. BioJava stöder ett stort utbud av data, från DNA och proteinsekvenser till nivån av 3D-proteinstrukturer. BioJava-biblioteken är användbara för att automatisera många dagliga och vardagliga bioinformatiska uppgifter som att analysera en Protein Data Bank- fil (PDB), interagera med Jmol och många fler. Detta applikationsprogrammeringsgränssnitt (API) tillhandahåller olika filtolkare, datamodeller och algoritmer för att underlätta arbetet med standarddataformaten och möjliggör snabb applikationsutveckling och analys.
Ytterligare projekt från BioJava inkluderar rcsb-sequenceviewer, biojava-http, biojava-spark och rcsb-viewers.
Funktioner
BioJava tillhandahåller mjukvarumoduler för många av de typiska uppgifterna för bioinformatikprogrammering. Dessa inkluderar:
- Åtkomst till nukleotid- och peptidsekvensdata från lokala och avlägsna databaser
- Omvandla format av databas-/filposter
- Analys av proteinstruktur och manipulation
- Manipulera individuella sekvenser
- Söker efter liknande sekvenser
- Skapa och manipulera sekvensanpassningar
Historia och publikationer
BioJava-projektet växte ur arbete av Thomas Down och Matthew Pocock för att skapa ett API för att förenkla utvecklingen av Java-baserade bioinformatikverktyg. BioJava är ett aktivt öppen källkodsprojekt som har utvecklats under mer än 12 år och av mer än 60 utvecklare. BioJava är ett av ett antal Bio*-projekt utformade för att minska kodduplicering. Exempel på sådana projekt som faller under Bio* förutom BioJava är BioPython , BioPerl , BioRuby , EMBOSS mm.
I oktober 2012 publicerades den första artikeln om BioJava. Detta dokument beskrev BioJavas moduler, funktioner och syfte.
Från och med november 2018 räknar Google Scholar mer än 130 citeringar.
Den senaste artikeln om BioJava skrevs i februari 2017. Den här artikeln beskrev ett nytt verktyg som heter BioJava-ModFinder. Detta verktyg kan användas för identifiering och efterföljande kartläggning av proteinmodifieringar till 3D i Protein Data Bank ( PBD ). Paketet var också integrerat med RCSB PDB-webbapplikationen och lade till proteinmodifieringskommentarer till sekvensdiagrammet och strukturdisplayen. Mer än 30 000 strukturer med proteinmodifieringar identifierades med hjälp av BioJava-ModFinder och kan hittas på RCSB PDB-webbplatsen.
År 2008 publicerades BioJavas första Application note. Det migrerades från sitt ursprungliga CVS-arkiv till GitHub i april 2013. Projektet har flyttats till ett separat arkiv, BioJava-legacy, och underhålls fortfarande för mindre ändringar och buggfixar.
Version 3 släpptes i december 2010. Det var en stor uppdatering av de tidigare versionerna. Syftet med den här utgåvan var att skriva om BioJava så att den kunde modulariseras till små återanvändbara komponenter. Detta gjorde det möjligt för utvecklare att bidra lättare och minskade beroenden. Det nya tillvägagångssättet i BioJava 3 var modellerat efter Apache Commons .
Version 4 släpptes i januari 2015. Denna version gav många nya funktioner och förbättringar av paketen biojava-core, biojava-structure, biojava-structure-gui, biojava-phylo, samt andra. BioJava 4.2.0 var den första utgåvan som var tillgänglig med Maven från Maven Central.
Version 5 släpptes i mars 2018. Detta representerar en stor milstolpe för projektet. BioJava 5.0.0 är den första släppta baserad på Java 8 som introducerar användningen av lambda- funktioner och strömmande API-anrop. Det gjordes också stora förändringar i biojava-strukturmodulen. De tidigare datamodellerna för makromolekylära strukturer har också anpassats för att närmare representera mmCIF- datamodellen. Detta var den första releasen på över två år. Några av de andra förbättringarna inkluderar optimeringar i biojava-strukturmodulen för att förbättra symmetridetektering och extra stöd för MMTF-format. Andra allmänna förbättringar inkluderar Javadoc-uppdateringar, beroendeversioner och alla tester är nu Junit4. Releasen innehåller 1 170 commits från 19 bidragsgivare.
Moduler
Under 2014-2015 har stora delar av den ursprungliga kodbasen skrivits om. BioJava 3 är ett tydligt avsteg från version 1-serien. Den består nu av flera oberoende moduler byggda med hjälp av ett automationsverktyg som heter Apache Maven . Dessa moduler tillhandahåller toppmoderna verktyg för jämförelse av proteinstrukturer, parvisa och multipla sekvensanpassningar, arbete med DNA och proteinsekvenser, analys av aminosyraegenskaper, detektering av proteinmodifieringar, förutsägelse av störda regioner i proteiner och parsers för gemensamma filer format med hjälp av en biologiskt meningsfull datamodell. Den ursprungliga koden har flyttats till ett separat BioJava legacy-projekt, som fortfarande är tillgängligt för bakåtkompatibilitet.
BioJava 5 introducerade nya funktioner till två moduler, biojava-alignment och biojava-structure.
Följande avsnitt kommer att beskriva flera av de nya modulerna och belysa några av de nya funktionerna som ingår i den senaste versionen av BioJava.
Kärnmodul
Denna modul tillhandahåller Java- klasser för att modellera aminosyra- eller nukleotidsekvenser . Klasserna utformades så att namnen är bekanta och vettiga för biologer och ger också en konkret representation av stegen i att gå från en gensekvens till en proteinsekvens för datavetare och programmerare.
En stor förändring mellan det äldre BioJava-projektet och BioJava3 ligger i hur ramverket har utformats för att utnyttja då nya innovationer i Java. En sekvens definieras som ett generiskt gränssnitt som tillåter resten av modulerna att skapa alla verktyg som fungerar på alla sekvenser. Specifika klasser för vanliga sekvenser som DNA och proteiner har definierats för att förbättra användbarheten för biologer. Översättningsmotorn utnyttjar verkligen detta arbete genom att tillåta omvandlingar mellan DNA, RNA och aminosyrasekvenser. Denna motor kan hantera detaljer som att välja kodontabell, omvandla startkodon till metionin, trimma stoppkodon, specificera läsramen och lämna tvetydiga sekvenser.
Särskild uppmärksamhet har ägnats åt att utforma lagringen av sekvenser för att minimera utrymmesbehov. Speciella designmönster som Proxy-mönstret gjorde det möjligt för utvecklarna att skapa ramverket så att sekvenser kan lagras i minnet, hämtas på begäran från en webbtjänst som UniProt eller läsas från en FASTA-fil efter behov. De två senare tillvägagångssätten sparar minne genom att inte ladda sekvensdata förrän det refereras till i applikationen. Detta koncept kan utökas till att hantera mycket stora genomiska datamängder, såsom NCBI GenBank eller en egen databas.
Proteinstrukturmoduler
Proteinstrukturmodulerna tillhandahåller verktyg för att representera och manipulera 3D-biomolekylära strukturer. De fokuserar på jämförelse av proteinstruktur.
Följande algoritmer har implementerats och inkluderats i BioJava.
- FATCAT-algoritm för flexibel och styv kroppsinriktning.
- Standardalgoritmen Combinatorial Extension (CE).
- En ny version av CE som kan upptäcka cirkulära permutationer i proteiner.
Dessa algoritmer används för att tillhandahålla RCSB Protein Data Bank (PDB) Protein Comparison Tool samt systematiska jämförelser av alla proteiner i PDB på veckobasis.
Parsers för PDB- och mmCIF-filformat tillåter inläsning av strukturdata till en återanvändbar datamodell. Denna funktion används av SIFTS-projektet för att kartlägga mellan UniProt-sekvenser och PDB-strukturer. Information från RCSB PDB kan hämtas dynamiskt utan att man behöver ladda ner data manuellt. För visualisering tillhandahålls ett gränssnitt till 3D-visaren Jmol.
Genom- och sekvenseringsmoduler
Denna modul är fokuserad på skapandet av gensekvensobjekt från kärnmodulen. Detta förverkligas genom att stödja analysen av följande populära standardfilformat som genereras av genförutsägelseprogram med öppen källkod:
- GTF-filer genererade av GeneMark
- GFF2-filer genererade av GeneID
- GFF3-filer genererade av Glimmer
Sedan skrivs gensekvensobjekten ut som ett GFF3-format och importeras till GMOD. Dessa filformat är väldefinierade men det som skrivs i filen är mycket flexibelt.
För att tillhandahålla input-output-stöd för flera vanliga varianter av FASTQ-filformatet från nästa generations sequencers, tillhandahålls en separat sekvenseringsmodul. För exempel på hur man använder denna modul, gå till denna länk .
Uppriktningsmodul
Denna modul innehåller flera klasser och metoder som tillåter användare att utföra parvis och multipel sekvensanpassning. Sekvenser kan justeras på både ett enkel- och flertrådigt sätt. BioJava implementerar Needleman-Wunsch- algoritmen för optimala globala anpassningar och Smith och Watermans algoritm för lokala anpassningar. Utdata från både lokala och globala anpassningar är tillgängliga i standardformat. Utöver dessa två algoritmer finns det en implementering av Guan–Uberbacher-algoritmen som utför global sekvensanpassning mycket effektivt eftersom den bara använder linjärt minne.
För multipelsekvensinriktning kan vilken som helst av metoderna som diskuterats ovan användas för att progressivt utföra en multipelsekvensinriktning.
ModFinder-modul
ModFinder-modulen tillhandahåller nya metoder för att identifiera och klassificera proteinmodifieringar i protein 3D-strukturer. Över 400 olika typer av proteinmodifieringar såsom fosforylering , glykosylering , disulfidbindningsmetallkelering etc. samlades in och kurerades baserat på anteckningar i PSI-MOD, RESID och RCSB PDB. Modulen tillhandahåller också ett API för att detektera pre-, co- och posttranslationella proteinmodifieringar inom proteinstrukturer. Denna modul kan också identifiera fosforylering och skriva ut alla förladdade modifieringar från en struktur.
Modul för aminosyraegenskaper
Denna modul försöker tillhandahålla korrekta fysiokemiska egenskaper hos proteiner. Egenskaperna som kan beräknas med denna modul är följande:
- Molekylär massa
- Extinktionskoefficient
- Instabilitetsindex
- Alifatiskt index
- Stort genomsnitt av hydropati
- Isoelektrisk punkt
- Aminosyrasammansättning
De exakta molekylvikterna för vanliga isotopiskt märkta aminosyror ingår i denna modul. Det finns också flexibilitet att definiera nya aminosyramolekyler med sina molekylvikter med hjälp av enkla XML- konfigurationsfiler. Detta kan vara användbart där den exakta massan är av stor betydelse, såsom masspektrometriexperiment .
Proteinstörningsmodul
Målet med denna modul är att ge användarna sätt att hitta störningar i proteinmolekyler. BioJava inkluderar en Java-implementering av RONN- prediktorn. BioJava 3.0.5 använder Javas stöd för multithreading för att förbättra prestandan med upp till 3,2 gånger, på en modern fyrkärnig maskin, jämfört med den äldre C-implementeringen.
Det finns två sätt att använda den här modulen:
- Använda biblioteksfunktionsanrop
- Använder kommandoraden
Några funktioner i denna modul inkluderar:
- Beräknar sannolikheten för störning för varje rest i en sekvens
- Beräknar sannolikheten för störning för varje rest i sekvensen för alla proteiner från en FASTA-indatafil
- Få de oordnade regionerna av proteinet för en enskild proteinsekvens eller för alla proteiner från en FASTA-indatafil
Åtkomstmodul för webbtjänster
Enligt de nuvarande trenderna inom bioinformatik vinner webbaserade verktyg i popularitet. Webbtjänstmodulen gör att bioinformatiktjänster kan nås med REST- protokoll. För närvarande implementeras två tjänster: NCBI Blast genom Blast URLAPI (tidigare känt som QBlast) och HMMER webbtjänst.
Jämförelser med andra alternativ
Behovet av skräddarsydd mjukvara inom området bioinformatik har tagits upp av flera grupper och individer. I likhet med BioJava programvaruprojekt med öppen källkod som BioPerl , BioPython och BioRuby alla verktygssatser med flera funktioner som gör det lättare att skapa anpassade pipelines eller analyser.
Som namnen antyder använder de ovan nämnda projekten olika programmeringsspråk. Alla dessa API:er erbjuder liknande verktyg, så på vilka kriterier ska man basera sitt val? För programmerare som bara har erfarenhet av ett av dessa språk är valet enkelt. Men för en välgrundad bioinformatiker som kan alla dessa språk och vill välja det bästa språket för ett jobb, kan valet göras baserat på följande riktlinjer som ges av en mjukvarugranskning gjord på Bio* verktygssatser.
I allmänhet är det svårt att slå Perl och BioPerl för små program (<500 rader) som endast kommer att användas av en individ eller en liten grupp . Dessa begränsningar täcker förmodligen behoven hos 90 procent av personlig bioinformatikprogrammering.
För nybörjare och för att skriva större program i Bio-domänen, särskilt de som ska delas och stödjas av andra, gör Pythons tydlighet och korthet det mycket attraktivt.
För dem som kanske lutar åt en karriär inom bioinformatik och som bara vill lära sig ett språk, har Java det bredaste generella programmeringsstödet, mycket bra stöd inom Bio-domänen med BioJava, och är nu det de facto affärsspråket (det nya COBOL, på gott och ont).
Förutom dessa Bio*-projekt finns det ett annat projekt som heter STRAP som använder Java och syftar till liknande mål. STRAP-verktygslådan, liknande BioJava, är också en Java-verktygslåda för design av bioinformatikprogram och skript. Likheterna och skillnaderna mellan BioJava och STRAP är följande:
Likheter
- Båda tillhandahåller omfattande samlingar av metoder för proteinsekvenser.
- Båda används av Java-programmerare för att koda bioinformatikalgoritmer.
- Både separata implementeringar och definitioner genom att använda java-gränssnitt.
- Båda är projekt med öppen källkod.
- Båda kan läsa och skriva många sekvensfilformat.
Skillnader
- BioJava är applicerbart på nukleotid- och peptidsekvenser och kan användas för hela genom. STRAP klarar inte av enstaka sekvenser lika länge som en hel kromosom. Istället manipulerar STRAP peptidsekvenser och 3D-strukturer av storleken på enstaka proteiner. Ändå kan den hålla ett stort antal sekvenser och strukturer i minnet. STRAP är designat för proteinsekvenser men kan läsa kodande nukleotidfiler, som sedan översätts till peptidsekvenser.
- STRAP är mycket snabbt eftersom det grafiska användargränssnittet måste vara mycket responsivt. BioJava används där hastigheten är mindre kritisk.
- BioJava är väldesignad vad gäller typsäkerhet, ontologi och objektdesign. BioJava använder objekt för sekvenser, anteckningar och sekvenspositioner. Även enstaka aminosyror eller nukleotider är objektreferenser. För att öka hastigheten undviker STRAP frekventa objektinstanseringar och anropande av icke-slutliga objektmetoder.
- I BioJava är peptidsekvenser och nukleotidsekvenser listor med symboler. Symbolerna kan hämtas efter varandra med en iterator eller så kan undersekvenser erhållas. Fördelarna är att hela sekvensen inte nödvändigtvis finns i minnet och att program är mindre känsliga för programmeringsfel. Symbolobjekt är oföränderliga element i ett alfabet. I STRAP används dock enkla byte-arrayer för sekvenser och float-arrayer för koordinater. Förutom hastighet är den låga minnesförbrukningen en viktig fördel med grundläggande datatyper. Klasser i Strap exponerar interna data. Därför kan programmerare begå programmeringsfel som att manipulera byte-arrayer direkt istället för att använda sättermetoderna. En annan nackdel är att inga kontroller utförs i STRAP om tecknen i sekvenser är giltiga med avseende på ett underliggande alfabet.
- I BioJava realiseras sekvenspositioner av klassen Location . Discontiguous Location- objekt är sammansatta av flera angränsande RangeLocation- objekt eller PointLocation -objekt. För klassen StrapProtein indikeras dock enstaka restpositioner med heltal mellan 0 och countResidues()-1 . Flera positioner ges av booleska arrayer. Sant vid ett givet index betyder valt medan falskt betyder inte valt.
- BioJava ger undantag när metoder anropas med ogiltiga parametrar. STRAP undviker det tidskrävande skapandet av kastbara objekt. Istället indikeras fel i metoder med returvärdena NaN, -1 eller null. När det gäller programdesign Throwable- objekt trevligare.
- I BioJava är ett Sequence- objekt antingen en peptidsekvens eller en nukleotidsekvens. Ett StrapProtein kan hålla båda samtidigt om en kodande nukleotidsekvens lästes och översatts till protein. Både nukleotidsekvensen och peptidsekvensen finns i samma StrapProtein-objekt. De kodande eller icke-kodande regionerna kan ändras och peptidsekvensen ändras i enlighet därmed.
Projekt som använder BioJava
Följande projekt använder sig av BioJava.
- Metabolic Pathway Builder: Programvarusvit dedikerad till utforskning av kopplingar mellan gener, proteiner, reaktioner och metaboliska vägar
- DengueInfo : en informationsportal för denguegenomet som använder BioJava i mellanvaran och pratar med en biosql-databas.
- Dazzle : En BioJava-baserad DAS-server.
- BioSense : Ett plugin-program för InforSense Suite, en analysprogramvaruplattform från IDBS som förenar BioJava.
- Bioclipse : En gratis, öppen källkod, arbetsbänk för kemo- och bioinformatik med kraftfulla redigerings- och visualiseringsförmåga för molekyler, sekvenser, proteiner, spektra, etc.
- PROMPT : Ett gratis ramverk med öppen källkod och applikation för jämförelse och kartläggning av proteinuppsättningar. Använder BioJava för att hantera de flesta indataformat.
- Cytoscape : En mjukvaruplattform för bioinformatik med öppen källkod för att visualisera molekylära interaktionsnätverk.
- BioWeka : En öppen källkod för biologisk datautvinning.
- Geneious : En verktygslåda för molekylärbiologi.
- MassSieve : En öppen källkodsapplikation för att analysera massspecifik proteomikdata.
- STRAP : Ett verktyg för multipelsekvensanpassning och sekvensbaserad strukturanpassning.
- Jstacs : Ett Java-ramverk för statistisk analys och klassificering av biologiska sekvenser
- jLSTM : "Long Short-Term Memory" för proteinklassificering
- LaJolla : Ett strukturellt anpassningsverktyg med öppen källkod för RNA och proteiner som använder en indexstruktur för snabb anpassning av tusentals strukturer; innehåller ett lättanvänt kommandoradsgränssnitt.
- GenBeans : En rik klientplattform för bioinformatik främst inriktad på molekylärbiologi och sekvensanalys.
- JEnsembl : Ett versionsmedvetet Java API till Ensembl-datasystem.
- MUSI : Ett integrerat system för att identifiera multipel specificitet från mycket stora peptid- eller nukleinsyradatauppsättningar.
- Bioshell : Ett verktygsbibliotek för strukturell bioinformatik
Se även
- Open Bioinformatics Foundation
- BioPerl , Biopython , BioRuby
- Bioklipp
- Jämförelse av programvara för molekylär mekanik modellering