import jalview.datamodel.Alignment;
import jalview.datamodel.AlignmentAnnotation;
import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Annotation;
import jalview.datamodel.HiddenMarkovModel;
import jalview.datamodel.SequenceI;
import jalview.gui.AlignFrame;
StockholmFile file = new StockholmFile(new FileParse(
inputAlignmentTemp.getAbsolutePath(), DataSourceType.FILE));
seqs = file.getSeqsAsArray();
-
+ // look for PP cons and ref seq in alignment only annotation
+ AlignmentAnnotation modelpos = null, ppcons = null;
+ for (AlignmentAnnotation aa : file.getAnnotations())
+ {
+ if (aa.sequenceRef == null)
+ {
+ if (aa.label.equals("Reference Positions")) // RF feature type in
+ // stockholm parser
+ {
+ modelpos = aa;
+ }
+ if (aa.label.equals("Posterior Probability"))
+ {
+ ppcons = aa;
+ }
+ }
+ }
readTable(searchOutputFile);
int seqCount = Math.min(seqs.length, seqsToReturn);
else
{
AlignmentI al = new Alignment(hmmAndSeqs);
+ if (ppcons != null)
+ {
+ al.addAnnotation(ppcons);
+ }
+ if (modelpos != null)
+ {
+ al.addAnnotation(modelpos);
+ }
AlignFrame alignFrame = new AlignFrame(al, AlignFrame.DEFAULT_WIDTH,
AlignFrame.DEFAULT_HEIGHT);
String ttl = "hmmSearch of " + databaseName + " using "
&& !"".equals(line))
{
SequenceI seq = seqs[index];
+ AlignmentAnnotation pp = seq
+ .getAlignmentAnnotations("", "Posterior Probability")
+ .get(0);
Scanner scanner = new Scanner(line);
String str = scanner.next();
addScoreAnnotation(str, seq, "hmmsearch E-value",
- "Full sequence E-value");
+ "Full sequence E-value", pp);
str = scanner.next();
addScoreAnnotation(str, seq, "hmmsearch Score",
- "Full sequence bit score");
+ "Full sequence bit score", pp);
+ seq.removeAlignmentAnnotation(pp);
scanner.close();
line = br.readLine();
index++;
protected void addScoreAnnotation(String value, SequenceI seq,
String label, String description)
{
+ addScoreAnnotation(value, seq, label, description, null);
+ }
+
+ /**
+ * A helper method that adds one score-only (non-positional) annotation to a
+ * sequence
+ *
+ * @param value
+ * @param seq
+ * @param label
+ * @param description
+ * @param pp
+ * existing posterior probability annotation - values copied to new
+ * annotation row
+ */
+ protected void addScoreAnnotation(String value, SequenceI seq,
+ String label, String description, AlignmentAnnotation pp)
+ {
try
{
- AlignmentAnnotation annot = new AlignmentAnnotation(label,
+ AlignmentAnnotation annot = null;
+ if (pp == null)
+ {
+ new AlignmentAnnotation(label,
description, null);
+ }
+ else
+ {
+ annot = new AlignmentAnnotation(pp);
+ annot.label = label;
+ annot.description = description;
+ }
annot.setCalcId(HMMSEARCH);
double eValue = Double.parseDouble(value);
annot.setScore(eValue);