![JAR search and dependency download from the Maven repository](/logo.png)
org.biojava.bio.program.sax.BlastLikeVersionSupport Maven / Gradle / Ivy
/*
* BioJava development code
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public Licence. This should
* be distributed with the code. If you do not have a copy,
* see:
*
* http://www.gnu.org/copyleft/lesser.html
*
* Copyright for this code is held jointly by the individual
* authors. These should be listed in @author doc comments.
*
* For more information on the BioJava project and its aims,
* or to join the biojava-l mailing list, visit the home page
* at:
*
* http://www.biojava.org/
*
*/
package org.biojava.bio.program.sax;
import java.util.StringTokenizer;
/**
* A Helper class for checking Blast-like program version support.
*
* When the parsing mode is STRICT,
* parsing will not be attempted on output from
* unsupported versions of programs.
* When the parsing mode is LAZY, parsing will be
* attempted if the program is recognized, but
* the particular version of the program is
* not supported. In this case, incorrect results
* may be obtained.
*
* Primary author -
* Simon Brocklehurst (CAT)
* Other authors -
* Tim Dilks (CAT)
* Colin Hardman (CAT)
* Stuart Johnston (CAT)
* Mathieu Wiepert (Mayo Foundation)
* Keith James (Sanger Institute)
* Travis Banks
*
* Copyright 2000 Cambridge Antibody Technology Group plc.
*
* This code released to the biojava project, May 2000
* under the LGPL license.
*
* @author Cambridge Antibody Technology Group plc
* @author Travis Banks
* @version 0.1
*
*/
final class BlastLikeVersionSupport {
public static final int UNKNOWN = 0;
public static final int NCBI_BLASTN = 1;
public static final int NCBI_BLASTP = 2;
public static final int NCBI_BLASTX = 3;
public static final int NCBI_TBLASTN = 4;
public static final int NCBI_TBLASTX = 5;
public static final int WU_BLASTN = 11;
public static final int WU_BLASTP = 12;
public static final int WU_BLASTX = 13;
public static final int WU_TBLASTN = 14;
public static final int WU_TBLASTX = 15;
public static final int HMMER = 21;
public static final int GCG = 31;
public static final int GCG_BLASTN = 32;
// NCBI Blast
public static final int V2_0_11 = 100;
public static final int V2_2_2 = 101;
public static final int V2_2_3 = 102;
public static final int V2_2_11 = 103;
public static final int V2_2_15 = 104;
public static final int V2_2_18 = 105;
// GCG Blast
public static final int V2_0_10 = 150;
public static final int V2_1_2 = 151;
// WU Blast
public static final int V2_0A19MP_WASHU = 200;
// HMMER
public static final int V2_0 = 300;
public static final int V2_1_1 = 301;
public static final int STRICT = 0;
public static final int LAZY = 1;
//set default parsing mode
private static int iMode = BlastLikeVersionSupport.STRICT;
private static int iProgram = BlastLikeVersionSupport.UNKNOWN;
private static int iVersion = BlastLikeVersionSupport.UNKNOWN;
private static String oProgramString = "unknown";
private static String oVersionString = "unknown";
private static String oProgramStub;
public BlastLikeVersionSupport() {
}
/**
* If parsing mode is strict, then check program and version
* must be supported.
* If parsing mode is lazy, then unsupported versions of
* supported programs will return true.
*
* Given a program name, and a version checks if the software
* is supported. Returns true if it is, false if not.
*
* @param poProgram A String representation of the program name
* @param poVersion A String representation of the version
* @return boolean -
*/
public boolean isSupported() {
//Check version support for NCBI Blast
if ( (iProgram == NCBI_BLASTN) ||
(iProgram == NCBI_BLASTX) ||
(iProgram == NCBI_BLASTP) ||
(iProgram == NCBI_TBLASTN) ||
(iProgram == NCBI_TBLASTX) ) {
if (iVersion == V2_0_11 || iVersion == V2_2_2 || iVersion == V2_2_3
|| iVersion == V2_2_11 || iVersion == V2_2_15 || iVersion == V2_2_18) {
return true;
}
//if get here, program version is unsupported
//return false if mode is strict, true if LAZY
if (this.getMode() == BlastLikeVersionSupport.STRICT) {
return false;
}
if (this.getMode() == BlastLikeVersionSupport.LAZY) {
return true;
}
} //end if NCBI Blast
//Check version support for WU_BLAST
if ( (iProgram == WU_BLASTN) ||
(iProgram == WU_BLASTX) ||
(iProgram == WU_BLASTP) ||
(iProgram == WU_TBLASTN) ||
(iProgram == WU_TBLASTX) ) {
if (iVersion == V2_0A19MP_WASHU) {
return true;
}
}
//Check version support for HMMER
if (iProgram == HMMER) {
if (iVersion == V2_0 || iVersion == V2_1_1 ) {
return true;
}
}
//Check version support for GCG
if (iProgram == GCG_BLASTN) {
if ((iVersion == V2_0_10)||
(iVersion == V2_1_2)){
return true;
}
//if get here, program version is unsupported
//return false if mode is strict, true if LAZY
if (this.getMode() == BlastLikeVersionSupport.STRICT) {
return false;
}
if (this.getMode() == BlastLikeVersionSupport.LAZY) {
return true;
}
} //end if GCG Blast
//if get here, the program version is unsupported
//return false if mode is strict, true if LAZY
if (this.getMode() == BlastLikeVersionSupport.STRICT) {
return false;
}
if (this.getMode() == BlastLikeVersionSupport.LAZY) {
return true;
}
//if get here, program is unsupported because
//program type is not recognized
return false;
}
/**
* Describe 'isStartOfDataSet' method here.
* @param poLine line to process
* @return boolean -
*/
public boolean isStartOfDataSet(String poLine) {
if ( (poLine.startsWith("BLAST")) ||
(poLine.startsWith("HMMER")) ||
(poLine.startsWith("TBLAST")) ||
(poLine.startsWith("!!")) ) { //GCG check
if (poLine.startsWith("!!")) {
//Flag to indicate program type, not needed for
//other programs
iProgram = GCG;
}
return true;
}
//if get here, not the start of a new dataset
return false;
}
public int getProgram() {
return iProgram;
}
public int getVersion() {
return iVersion;
}
public String getProgramString() {
return oProgramString;
}
public String getVersionString() {
return oVersionString;
}
/**
* Assign program and version from by parsing a line
* from the raw output.
* @param poLine line to process
* @return true if format recognised (could be wrong versioN), false
* if the format not recognised at all.
*/
public boolean assignProgramAndVersion(String poLine) {
//Take first two tokens only (this is OK for current programs)
boolean tFormatFound = false;
StringTokenizer oSt = new StringTokenizer(poLine);
//deal with Blast, WU-blast, GCG and HMMER
//first potentially identify program e.g. blastn
oProgramStub = oSt.nextToken().toLowerCase();
oVersionString = oSt.nextToken().toLowerCase();
//if it's a blast, then choose ncbi-blast, wu-blast or GCG
if (oProgramStub.indexOf("blast") != -1) {
if ((oVersionString.indexOf("washu") == -1)) {
//here if GCG or NCBI-BLAST
if (iProgram==GCG) {
oProgramString = "gcg-".concat(oProgramStub);
} else {
oProgramString = "ncbi-".concat(oProgramStub);
}
} else {
//here if WU-BLAST
oProgramString = "wu-".concat(oProgramStub);
}
}
//if it's hmmer
if (oProgramStub.indexOf("hmmer") != -1) {
oProgramString = oProgramStub;
}
//NCBI blast
if (oProgramString.equals("ncbi-blastn")) {
iProgram = NCBI_BLASTN;
tFormatFound = true;
}
if (oProgramString.equals("ncbi-blastx")) {
iProgram = NCBI_BLASTX;
tFormatFound = true;
}
if (oProgramString.equals("ncbi-blastp")) {
iProgram = NCBI_BLASTP;
tFormatFound = true;
}
if (oProgramString.equals("ncbi-tblastn")) {
iProgram = NCBI_TBLASTN;
tFormatFound = true;
}
if (oProgramString.equals("ncbi-tblastx")) {
iProgram = NCBI_TBLASTX;
tFormatFound = true;
}
if (oVersionString.equals("2.0.11")) {
iVersion = V2_0_11;
}
if (oVersionString.equals("2.2.2")) {
iVersion = V2_2_2;
}
if (oVersionString.equals("2.2.3")) {
iVersion = V2_2_3;
}
if (oVersionString.equals("2.2.11")) {
iVersion = V2_2_11;
}
if (oVersionString.equals("2.2.15")) {
iVersion = V2_2_15;
}
if (oVersionString.equals("2.2.18")) {
iVersion = V2_2_18;
}
//wu-blast
if (oProgramString.equals("wu-blastn")) {
iProgram = WU_BLASTN;
tFormatFound = true;
}
if (oProgramString.equals("wu-blastx")) {
iProgram = WU_BLASTX;
tFormatFound = true;
}
if (oProgramString.equals("wu-blastp")) {
iProgram = WU_BLASTP;
tFormatFound = true;
}
if (oProgramString.equals("wu-tblastn")) {
iProgram = WU_TBLASTN;
tFormatFound = true;
}
if (oProgramString.equals("wu-tblastx")) {
iProgram = WU_TBLASTX;
tFormatFound = true;
}
if (oVersionString.equals("2.0a19mp-washu")) {
iVersion = V2_0A19MP_WASHU;
tFormatFound = true;
}
//hmmer
if (oProgramString.equals("hmmer")) {
iProgram = HMMER;
tFormatFound = true;
}
if (oVersionString.equals("2.0")) {
iVersion = V2_0;
tFormatFound = true;
}
if (oVersionString.equals("2.1.1")) {
iVersion = V2_0;
tFormatFound = true;
}
//GCG
if (oProgramString.equals("gcg-blastn")) {
iProgram = GCG_BLASTN; //First pass assigned this to GCG
//Second pass is more specific.
tFormatFound = true;
}
//GCG Version
if (oVersionString.equals("2.0.10")) {
iVersion = V2_0_10;
}
//GCG Version
if (oVersionString.equals("2.1.2")) {
iVersion = V2_1_2;
}
if (!tFormatFound) {
return false;
}
return true;
}
/**
* Set the parsing mode to STRICT or LAZY.
*
* @param piMode Should be one of ParsingMode.STRICT
* or ParsingMode.LAZY.
*/
public void setMode(int piMode) {
iMode = piMode;
}
/**
* Get parsing mode. Typically will be compared to
* ParsingMode.STRICT or ParsingMode.LAZY to
* see if parsing should continue or not.
*
* @return int The current parsing mode.
*/
public int getMode() {
return iMode;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy