JAL-1516 Annotation row score output script for jalview-discuss request from David...
authorj.procter@dundee.ac.uk <jprocter@carderbee.dyn.lifesci.dundee.ac.uk>
Fri, 12 Sep 2014 09:52:46 +0000 (10:52 +0100)
committerj.procter@dundee.ac.uk <jprocter@carderbee.dyn.lifesci.dundee.ac.uk>
Fri, 12 Sep 2014 09:52:46 +0000 (10:52 +0100)
examples/groovy/annotationForSelectedSequence.groovy [new file with mode: 0644]

diff --git a/examples/groovy/annotationForSelectedSequence.groovy b/examples/groovy/annotationForSelectedSequence.groovy
new file mode 100644 (file)
index 0000000..851e035
--- /dev/null
@@ -0,0 +1,49 @@
+// Requested by David M Garcia (v3)
+// very messy script to output the scores in annotation rows
+// for the first sequence in a selection on the topmost alignment
+
+// thanks to this thread for cut'n'paste code
+// http://comments.gmane.org/gmane.comp.lang.groovy.user/53010
+
+// Jalview issue at http://issues.jalview.org/browse/JAL-1516
+
+import java.awt.datatransfer.StringSelection
+import static java.awt.Toolkit.*
+
+
+def curviewport = Jalview.getAlignframes()[Jalview.getAlignframes().length-1].getViewport();
+
+// TSV output by default.
+// change "\t" to "," to output CSV file
+def sep = "\t"; 
+
+if (curviewport.getSelectionGroup()) {
+  // gets selection for topmost alignment
+  def selreg = curviewport.getSelectionGroup();
+  // get aligned positions of first sequence selected
+  def gaps = selreg.getSequenceAt(0).gapMap(); 
+  String csvfile="";
+  String sseq=""
+
+  curviewport.getAlignment().getAlignmentAnnotation().eachWithIndex{ aa, apos -> 
+    def count=1
+    String csv=""
+    gaps.eachWithIndex{col,spos -> if (col>=selreg.getStartRes() && col<=selreg.getEndRes()) { 
+      // add sequence for debugging
+      if (count>sseq.length()) { sseq+=sep+selreg.getSequenceAt(0).getCharAt(col); count=sseq.length()+1;};
+      // output height of histogram
+      csv+=sep+aa.annotations[col].value; 
+      // Uncomment to output string shown in tooltip
+      // csv+=sep+aa.annotations[col].description; 
+    }}
+    if (csv.length()>0) {
+        csvfile+=aa.label+csv+"\n"
+    }
+  }
+  defaultToolkit.systemClipboard.setContents(new StringSelection(selreg.getSequenceAt(0).getName()+sseq+"\n"+csvfile), null)
+  print "Sequence"+sseq+"\n";
+  print csvfile;
+  print "\nAlignment Annotation for first selected sequence copied to the clipboard.\n"
+} else {
+    "Select a region in the alignment window.";
+}