+ /**\r
+ * fake the collection of DbRefs with associated exon mappings to identify\r
+ * if a translation would generate distinct product in the currently selected region.\r
+ * @param selection\r
+ * @param viscontigs\r
+ * @return\r
+ */\r
+ public static boolean canTranslate(SequenceI[] selection, 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 && 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], viscontigs[vc+1]);\r
+ if (mpr!=null) {\r
+ return true;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+ /**\r
+ * generate a set of translated protein products from annotated sequenceI\r
+ * @param selection\r
+ * @param viscontigs\r
+ * @param gapCharacter\r
+ * @param dataset 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 && 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, null, alwidth, dataset);\r
+ }\r
+ return null;\r
+ }\r