+ * fake the collection of DbRefs with associated exon mappings to identify if\r
+ * a translation would generate distinct product in the currently selected\r
+ * region.\r
+ * \r
+ * @param selection\r
+ * @param viscontigs\r
+ * @return\r
+ */\r
+ public static boolean canTranslate(SequenceI[] selection,\r
+ int viscontigs[])\r
+ {\r
+ for (int gd = 0; gd < selection.length; gd++)\r
+ {\r
+ SequenceI dna = selection[gd];\r
+ jalview.datamodel.DBRefEntry[] dnarefs = jalview.util.DBRefUtils\r
+ .selectRefs(dna.getDBRef(),\r
+ jalview.datamodel.DBRefSource.DNACODINGDBS);\r
+ if (dnarefs != null)\r
+ {\r
+ // intersect with pep\r
+ // intersect with pep\r
+ Vector mappedrefs = new Vector();\r
+ DBRefEntry[] refs = dna.getDBRef();\r
+ for (int d = 0; d < refs.length; d++)\r
+ {\r
+ if (refs[d].getMap() != null && refs[d].getMap().getMap() != null\r
+ && refs[d].getMap().getMap().getFromRatio() == 3\r
+ && refs[d].getMap().getMap().getToRatio() == 1)\r
+ {\r
+ mappedrefs.addElement(refs[d]); // add translated protein maps\r
+ }\r
+ }\r
+ dnarefs = new DBRefEntry[mappedrefs.size()];\r
+ mappedrefs.copyInto(dnarefs);\r
+ for (int d = 0; d < dnarefs.length; d++)\r
+ {\r
+ Mapping mp = dnarefs[d].getMap();\r
+ if (mp != null)\r
+ {\r
+ for (int vc = 0; vc < viscontigs.length; vc += 2)\r
+ {\r
+ int[] mpr = mp.locateMappedRange(viscontigs[vc],\r
+ viscontigs[vc + 1]);\r
+ if (mpr != null)\r
+ {\r
+ return true;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+\r
+ /**\r
+ * generate a set of translated protein products from annotated sequenceI\r
+ * \r
+ * @param selection\r
+ * @param viscontigs\r
+ * @param gapCharacter\r
+ * @param dataset\r
+ * destination dataset for translated sequences\r
+ * @param annotations\r
+ * @param aWidth\r
+ * @return\r
+ */\r
+ public static AlignmentI CdnaTranslate(SequenceI[] selection,\r
+ int viscontigs[], char gapCharacter, Alignment dataset)\r
+ {\r
+ int alwidth = 0;\r
+ Vector cdnasqs = new Vector();\r
+ Vector cdnasqi = new Vector();\r
+ Vector cdnaprod = new Vector();\r
+ for (int gd = 0; gd < selection.length; gd++)\r
+ {\r
+ SequenceI dna = selection[gd];\r
+ jalview.datamodel.DBRefEntry[] dnarefs = jalview.util.DBRefUtils\r
+ .selectRefs(dna.getDBRef(),\r
+ jalview.datamodel.DBRefSource.DNACODINGDBS);\r
+ if (dnarefs != null)\r
+ {\r
+ // intersect with pep\r
+ Vector mappedrefs = new Vector();\r
+ DBRefEntry[] refs = dna.getDBRef();\r
+ for (int d = 0; d < refs.length; d++)\r
+ {\r
+ if (refs[d].getMap() != null && refs[d].getMap().getMap() != null\r
+ && refs[d].getMap().getMap().getFromRatio() == 3\r
+ && refs[d].getMap().getMap().getToRatio() == 1)\r
+ {\r
+ mappedrefs.addElement(refs[d]); // add translated protein maps\r
+ }\r
+ }\r
+ dnarefs = new DBRefEntry[mappedrefs.size()];\r
+ mappedrefs.copyInto(dnarefs);\r
+ for (int d = 0; d < dnarefs.length; d++)\r
+ {\r
+ Mapping mp = dnarefs[d].getMap();\r
+ StringBuffer sqstr = new StringBuffer();\r
+ if (mp != null)\r
+ {\r
+ Mapping intersect = mp.intersectVisContigs(viscontigs);\r
+ // generate seqstring for this sequence based on mapping\r
+\r
+ if (sqstr.length() > alwidth)\r
+ alwidth = sqstr.length();\r
+ cdnasqs.addElement(sqstr.toString());\r
+ cdnasqi.addElement(dna);\r
+ cdnaprod.addElement(intersect);\r
+ }\r
+ }\r
+ }\r
+ SequenceI[] cdna = new SequenceI[cdnasqs.size()];\r
+ DBRefEntry[] prods = new DBRefEntry[cdnaprod.size()];\r
+ String[] xons = new String[cdnasqs.size()];\r
+ cdnasqs.copyInto(xons);\r
+ cdnaprod.copyInto(prods);\r
+ cdnasqi.copyInto(cdna);\r
+ return CdnaTranslate(cdna, xons, prods, viscontigs, gapCharacter,\r
+ null, alwidth, dataset);\r
+ }\r
+ return null;\r
+ }\r
+\r
+ /**\r