JAL-1950 group hits by architecture
authorJim Procter <jprocter@issues.jalview.org>
Mon, 16 Nov 2015 17:36:20 +0000 (17:36 +0000)
committerJim Procter <jprocter@issues.jalview.org>
Mon, 16 Nov 2015 17:36:20 +0000 (17:36 +0000)
src/jalview/ws/ebi/HmmerJSONProcessor.java

index 0aee45f..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);
     }
   }