package uk.co.flax.biosolr.pdbe.phmmer; import javax.json.JsonArray; import javax.json.JsonObject; public class Alignment { public static double SIGNIFICANCE_THRESHOLD = 1.0d; private String target; private String species; private String description; private double score; private double eValue; private double eValueInd; private double eValueCond; private String querySequence; private int querySequenceStart; private int querySequenceEnd; private String match; private String targetSequence; private int targetSequenceStart; private int targetSequenceEnd; private int targetEnvelopeStart; private int targetEnvelopeEnd; private String posteriorProbability; private double bias; private double accuracy; private double bitScore; private double identityPercent; private int identityCount; private double similarityPercent; private int similarityCount; public Alignment(JsonObject hit) { target = hit.getString("acc"); species = hit.getString("species"); description = hit.getString("desc"); score = Double.parseDouble(hit.getString("score")); eValue = Double.parseDouble(hit.getString("evalue")); JsonArray domains = hit.getJsonArray("domains"); for (int i = 0; i < domains.size(); ++i) { JsonObject domain = domains.getJsonObject(i); // skip insignificant matches (by ind. eValue) eValueInd = Double.parseDouble(domain.getString("ievalue")); if (eValueInd >= SIGNIFICANCE_THRESHOLD) continue; eValueCond = Double.parseDouble(domain.getString("cevalue")); querySequence = domain.getString("alimodel"); querySequenceStart = domain.getInt("alihmmfrom"); querySequenceEnd = domain.getInt("alihmmto"); match = domain.getString("alimline"); targetSequence = domain.getString("aliaseq"); targetSequenceStart = domain.getInt("alisqfrom"); targetSequenceEnd = domain.getInt("alisqto"); targetEnvelopeStart = domain.getInt("ienv"); targetEnvelopeEnd = domain.getInt("jenv"); posteriorProbability = domain.getString("alippline"); bias = Double.parseDouble(domain.getString("bias")); accuracy = Double.parseDouble(domain.getString("oasc")); bitScore = domain.getJsonNumber("bitscore").doubleValue(); identityPercent = 100 * domain.getJsonNumber("aliId").doubleValue(); identityCount = domain.getInt("aliIdCount"); similarityPercent = 100 * domain.getJsonNumber("aliSim").doubleValue(); similarityCount = domain.getInt("aliSimCount"); // we consider only the first significant match break; } } public String getTarget() { return target; } public double getEValue() { return eValue; } public double getEValueInd() { return eValueInd; } public double getEValueCond() { return eValueCond; } public double getBitScore() { return bitScore; } public String getSpecies() { return species; } public String getDescription() { return description; } public double getScore() { return score; } public String getQuerySequence() { return querySequence; } public int getQuerySequenceStart() { return querySequenceStart; } public int getQuerySequenceEnd() { return querySequenceEnd; } public String getMatch() { return match; } public String getTargetSequence() { return targetSequence; } public int getTargetSequenceStart() { return targetSequenceStart; } public int getTargetSequenceEnd() { return targetSequenceEnd; } public int getTargetEnvelopeStart() { return targetEnvelopeStart; } public int getTargetEnvelopeEnd() { return targetEnvelopeEnd; } public String getPosteriorProbability() { return posteriorProbability; } public double getBias() { return bias; } public double getAccuracy() { return accuracy; } public double getIdentityPercent() { return identityPercent; } public int getIdentityCount() { return identityCount; } public double getSimilarityPercent() { return similarityPercent; } public int getSimilarityCount() { return similarityCount; } }