[Biojava-dev] WeightMatrixAnnotator
Tanya Vavouri
tvavouri at hotmail.com
Tue Dec 2 07:04:15 EST 2003
Hi,
I've made some really simple changes to the latest WeightMatrixAnnotator
that have allowed me to annotate sequences with multiple weight matrices.
Basically, I've just added an extra variable the String wmID, a constructor
that initialises with a user specified weight matrix ID and a getter/setter
for the weight matrix ID.
The changes are really simple but below is the code if anyone is interested
to use it or add it to biojava.
Thanks
Tanya Vavouri
package org.biojava.bio.dp;
import java.io.Serializable;
import org.biojava.bio.BioException;
import org.biojava.bio.SimpleAnnotation;
import org.biojava.bio.seq.Feature;
import org.biojava.bio.seq.Sequence;
import org.biojava.bio.seq.SequenceAnnotator;
import org.biojava.bio.seq.impl.ViewSequence;
import org.biojava.bio.symbol.IllegalAlphabetException;
import org.biojava.bio.symbol.RangeLocation;
import org.biojava.utils.ChangeVetoException;
/**
* Annotates a sequence with hits to a weight-matrix.
*
* <p>
* This SequenceAnnotator implementation returns a new
* ViewSequence wrapping the underlying Sequence
* </p>
*
* @author Matthew Pocock
* @author Thomas Down
*/
public class WeightMatrixAnnotator implements SequenceAnnotator,
Serializable {
private WeightMatrix matrix;
private double threshold;
private final ScoreType scoreType;
private String wmID;
public Sequence annotate(Sequence seq)
throws IllegalAlphabetException, BioException, ChangeVetoException
{
seq = new ViewSequence(seq);
int cols = matrix.columns();
Feature.Template template = new Feature.Template();
template.source = "WeightMatrixAnnotator";
template.type = wmID;
for(int offset = 1;
offset <= seq.length() - cols + 1;
offset++) {
double score = DP.scoreWeightMatrix(matrix, seq, scoreType, offset);
double q = Math.exp(score);
if(q >= threshold) {
template.location = new RangeLocation(offset, offset+cols-1);
SimpleAnnotation ann = new SimpleAnnotation();
ann.setProperty("score", new Double(q));
ann.setProperty("weightMatrix", matrix);
template.annotation = ann;
seq.createFeature(template);
}
}
return seq;
}
/**
* Create a new annotator that uses the PROBABILITY score type and an ID
for the weight matrix.
*
* @param wm the weight matrix
* @param threshold the threshold
* @param wmID the weight matrix ID
*/
public WeightMatrixAnnotator(WeightMatrix wm, ScoreType scoreType,
double threshold, String wmID) {
this.matrix = wm;
this.threshold = threshold;
this.scoreType = ScoreType.PROBABILITY;
this.wmID = wmID;
}
/**
* Create a new annotator that uses PROBABILITY score type.
*
* @param wm a <code>WeightMatrix</code> value
* @param threshold a <code>double</code> value
*/
public WeightMatrixAnnotator(WeightMatrix wm, double threshold) {
this(wm, ScoreType.PROBABILITY, threshold, "hit");
}
/**
* Create a new annotator that uses a specific score type.
*
* @param wm the weigth matrix
* @param scoreType the score type
* @param threshold the threshold
* @since 1.4
*/
public WeightMatrixAnnotator(WeightMatrix wm, ScoreType scoreType,
double threshold) {
this.matrix = wm;
this.scoreType = scoreType;
this.threshold = threshold;
this.wmID = "hit";
}
/**
* Get the value of the weight matrix id.
* @return value of the weight matrix id.
*/
public String getWmID() {
return wmID;
}
/**
* Set the weight matrix id.
* @param v Value to assign to the weight matrix id.
*/
public void setWmID(String v) {
this.wmID = v;
}
}
_________________________________________________________________
Tired of 56k? Get a FREE BT Broadband connection
http://www.msn.co.uk/specials/btbroadband
More information about the biojava-dev
mailing list