JAL-1950 group hits by architecture
[jalview.git] / src / jalview / ws / ebi / HmmerJSONProcessor.java
index 52ea59e..d0f3c18 100644 (file)
@@ -4,10 +4,13 @@ import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.Annotation;
 import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.io.FileParse;
 
 import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.json.simple.JSONArray;
 import org.json.simple.JSONObject;
@@ -158,12 +161,13 @@ public class HmmerJSONProcessor
           hitseq.addAlignmentAnnotation(eval);
           alipp.createSequenceMapping(hitseq, hitseq.getStart(), false);
           hitseq.addAlignmentAnnotation(alipp);
+          String arch;
           hitseq.addSequenceFeature(new SequenceFeature(
                   "Pfam Domain Architecture", (hmmrhit.get("archindex"))
-                          + " "
-                          + (String) hmmrhit.get("arch"), 0, 0, Integer
-                          .valueOf((String) hmmrhit.get("archScore")),
+                          + " " + (arch = (String) hmmrhit.get("arch")), 0,
+                  0, Integer.valueOf((String) hmmrhit.get("archScore")),
                   "HMMER3"));
+          addArchGroup(hitseq, arch);
           alipp.setScore(Double.valueOf("" + dhit.get("bitscore")));
           alipp.adjustForAlignment();
           resultAl.addAnnotation(pval);
@@ -182,6 +186,28 @@ public class HmmerJSONProcessor
         System.err.println("Warn - multiple matches for json hit " + sname
                 + "/" + alisqfrom + "-" + alisqto);
       }
+      // look for other sequences represented by this hit and create
+    }
+  }
+
+  Map<String, SequenceGroup> groups = new HashMap<String, SequenceGroup>();
+
+  private void addArchGroup(SequenceI seqToAdd, String groupNam)
+  {
+    SequenceGroup sg = groups.get(groupNam);
+    if (sg == null)
+    {
+      sg = new SequenceGroup();
+      sg.setName(groupNam);
+      sg.addSequence(seqToAdd, false);
+      sg.setStartRes(0);
+      sg.setEndRes(resultAl.getWidth() - 1);
+      groups.put(groupNam, sg);
+      resultAl.addGroup(sg);
+    }
+    else
+    {
+      sg.addSequence(seqToAdd, false);
     }
   }
 
@@ -207,7 +233,7 @@ public class HmmerJSONProcessor
     AlignmentAnnotation pprob = new AlignmentAnnotation(
             "Posterior Probability",
             "Likelihood of HMM fit at each hit position.", ae);
-    pprob.graph = pprob.BAR_GRAPH;
+    pprob.graph = AlignmentAnnotation.BAR_GRAPH;
     pprob.visible = false;
     return pprob;
   }