+\r
+ /**\r
+ * compute a deletion map for the current view according to the given\r
+ * gap/match map\r
+ * \r
+ * @param gapMap\r
+ * (as returned from SequenceI.gapMap())\r
+ * @return int[] {intersection of visible regions with gapMap)\r
+ */\r
+ public int[] getVisibleContigMapFor(int[] gapMap)\r
+ {\r
+ int[] delMap = null;\r
+ int[] viscontigs = getVisibleContigs();\r
+ int spos = 0;\r
+ int i = 0;\r
+ if (viscontigs != null)\r
+ {\r
+ // viscontigs maps from a subset of the gapMap to the gapMap, so it will\r
+ // always be equal to or shorter than gapMap\r
+ delMap = new int[gapMap.length];\r
+ for (int contig = 0; contig < viscontigs.length; contig += 2)\r
+ {\r
+\r
+ while (spos < gapMap.length && gapMap[spos] < viscontigs[contig])\r
+ {\r
+ spos++;\r
+ }\r
+ while (spos < gapMap.length\r
+ && gapMap[spos] <= viscontigs[contig + 1])\r
+ {\r
+ delMap[i++] = spos++;\r
+ }\r
+ }\r
+ int tmap[] = new int[i];\r
+ System.arraycopy(delMap, 0, tmap, 0, i);\r
+ delMap = tmap;\r
+ }\r
+ return delMap;\r
+ }\r
+\r
+ /**\r
+ * apply the getSeq(gc) method to each sequence cigar, and return the array of\r
+ * edited sequences, optionally with hidden regions removed.\r
+ * \r
+ * @param gc\r
+ * gap character to use for insertions\r
+ * @param delete\r
+ * remove hidden regions from sequences. Note: currently implemented\r
+ * in a memory inefficient way - space needed is 2*result set for\r
+ * deletion\r
+ * \r
+ * @return SequenceI[]\r
+ */\r
+ public SequenceI[] getEditedSequences(char gc, boolean delete)\r
+ {\r
+ SeqCigar[] msf = getSequences();\r
+ SequenceI[] aln = new SequenceI[msf.length];\r
+ for (int i = 0, j = msf.length; i < j; i++)\r
+ {\r
+ aln[i] = msf[i].getSeq(gc);\r
+ }\r
+ if (delete)\r
+ {\r
+ String[] sqs = getSequenceStrings(gc);\r
+ for (int i = 0; i < sqs.length; i++)\r
+ {\r
+ aln[i].setSequence(sqs[i]);\r
+ sqs[i] = null;\r
+ }\r
+ }\r
+ return aln;\r
+ }\r
+\r
+ public static void summariseAlignmentView(AlignmentView view,\r
+ PrintStream os)\r
+ {\r
+ os.print("View has " + view.sequences.length + " of which ");\r
+ if (view.selected == null) {\r
+ os.print("None");\r
+ } else {\r
+ os.print(" "+view.selected.size());\r
+ }\r
+ os.println(" are selected.");\r
+ os.print("View is " + view.getWidth() + " columns wide");\r
+ int viswid = 0;\r
+ int[] contigs = view.getContigs();\r
+ if (contigs != null)\r
+ {\r
+ viswid = view.width;\r
+ for (int i = 0; i < contigs.length; i += 3)\r
+ {\r
+ viswid += contigs[i + 2];\r
+ }\r
+ os.println("with " + viswid + " visible columns spread over "\r
+ + contigs.length / 3 + " regions.");\r
+ }\r
+ else\r
+ {\r
+ viswid = view.width;\r
+ os.println(".");\r
+ }\r
+ if (view.scGroups != null)\r
+ {\r
+ os.println("There are " + view.scGroups.size()\r
+ + " groups defined on the view.");\r
+ for (int g = 0; g < view.scGroups.size(); g++)\r
+ {\r
+ ScGroup sgr = (ScGroup) view.scGroups.elementAt(g);\r
+ os.println("Group " + g + ": Name = " + sgr.sg.getName()\r
+ + " Contains " + sgr.seqs.size() + " Seqs.");\r
+ os.println("This group runs from " + sgr.sg.getStartRes() + " to "\r
+ + sgr.sg.getEndRes());\r
+ for (int s = 0; s < sgr.seqs.size(); s++)\r
+ {\r
+ if (!((SeqCigar) sgr.seqs.elementAt(s)).isMemberOf(sgr))\r
+ {\r
+ os.println("** WARNING: sequence "\r
+ + ((SeqCigar) sgr.seqs.elementAt(s)).toString()\r
+ + " is not marked as member of group.");\r
+ }\r
+ }\r
+ }\r
+ AlignmentI visal = view.getVisibleAlignment('-');\r
+ if (visal != null)\r
+ {\r
+ os.println("Vis. alignment is " + visal.getWidth()\r
+ + " wide and has " + visal.getHeight() + " seqs.");\r
+ if (visal.getGroups() != null && visal.getGroups().size() > 0)\r
+ {\r
+ SequenceGroup sg;\r
+ Enumeration en = visal.getGroups().elements();\r
+ int i = 1;\r
+ while (en.hasMoreElements())\r
+ {\r
+ sg = (SequenceGroup) en.nextElement();\r
+ os.println("Group " + (i++) + " begins at column "\r
+ + sg.getStartRes() + " and ends at " + sg.getEndRes());\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ public static void testSelectionViews(AlignmentI alignment,\r
+ ColumnSelection csel, SequenceGroup selection)\r
+ {\r
+ System.out.println("Testing standard view creation:\n");\r
+ AlignmentView view = null;\r
+ try\r
+ {\r
+ System.out\r
+ .println("View with no hidden columns, no limit to selection, no groups to be collected:");\r
+ view = new AlignmentView(alignment, csel, selection, false, false,\r
+ false);\r
+ summariseAlignmentView(view, System.out);\r
+\r
+ } catch (Exception e)\r
+ {\r
+ e.printStackTrace();\r
+ System.err\r
+ .println("Failed to generate alignment with selection but no groups marked.");\r
+ }\r
+ try\r
+ {\r
+ System.out\r
+ .println("View with no hidden columns, no limit to selection, and all groups to be collected:");\r
+ view = new AlignmentView(alignment, csel, selection, false, false,\r
+ true);\r
+ summariseAlignmentView(view, System.out);\r
+ } catch (Exception e)\r
+ {\r
+ e.printStackTrace();\r
+ System.err\r
+ .println("Failed to generate alignment with selection marked but no groups marked.");\r
+ }\r
+ try\r
+ {\r
+ System.out\r
+ .println("View with no hidden columns, limited to selection and no groups to be collected:");\r
+ view = new AlignmentView(alignment, csel, selection, false, true,\r
+ false);\r
+ summariseAlignmentView(view, System.out);\r
+ } catch (Exception e)\r
+ {\r
+ e.printStackTrace();\r
+ System.err\r
+ .println("Failed to generate alignment with selection restricted but no groups marked.");\r
+ }\r
+ try\r
+ {\r
+ System.out\r
+ .println("View with no hidden columns, limited to selection, and all groups to be collected:");\r
+ view = new AlignmentView(alignment, csel, selection, false, true,\r
+ true);\r
+ summariseAlignmentView(view, System.out);\r
+ } catch (Exception e)\r
+ {\r
+ e.printStackTrace();\r
+ System.err\r
+ .println("Failed to generate alignment with selection restricted and groups marked.");\r
+ }\r
+ try\r
+ {\r
+ System.out\r
+ .println("View *with* hidden columns, no limit to selection, no groups to be collected:");\r
+ view = new AlignmentView(alignment, csel, selection, true, false,\r
+ false);\r
+ summariseAlignmentView(view, System.out);\r
+ } catch (Exception e)\r
+ {\r
+ e.printStackTrace();\r
+ System.err\r
+ .println("Failed to generate alignment with selection but no groups marked.");\r
+ }\r
+ try\r
+ {\r
+ System.out\r
+ .println("View *with* hidden columns, no limit to selection, and all groups to be collected:");\r
+ view = new AlignmentView(alignment, csel, selection, true, false,\r
+ true);\r
+ summariseAlignmentView(view, System.out);\r
+ } catch (Exception e)\r
+ {\r
+ e.printStackTrace();\r
+ System.err\r
+ .println("Failed to generate alignment with selection marked but no groups marked.");\r
+ }\r
+ try\r
+ {\r
+ System.out\r
+ .println("View *with* hidden columns, limited to selection and no groups to be collected:");\r
+ view = new AlignmentView(alignment, csel, selection, true, true,\r
+ false);\r
+ summariseAlignmentView(view, System.out);\r
+ } catch (Exception e)\r
+ {\r
+ e.printStackTrace();\r
+ System.err\r
+ .println("Failed to generate alignment with selection restricted but no groups marked.");\r
+ }\r
+ try\r
+ {\r
+ System.out\r
+ .println("View *with* hidden columns, limited to selection, and all groups to be collected:");\r
+ view = new AlignmentView(alignment, csel, selection, true, true, true);\r
+ summariseAlignmentView(view, System.out);\r
+ } catch (Exception e)\r
+ {\r
+ e.printStackTrace();\r
+ System.err\r
+ .println("Failed to generate alignment with selection restricted and groups marked.");\r
+ }\r
+\r
+ }\r