X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FDna.java;h=8bf0c24e61fa6a125863353afcf9f70a91ea8b46;hb=8ef4f0d1832bd4cf56c33eff8f822b233e84f3f1;hp=d534c8f52e1592cc5d5e9b8ae059358540814844;hpb=8213e48c6973494f7a6e22e1a97290520a461d1b;p=jalview.git diff --git a/src/jalview/analysis/Dna.java b/src/jalview/analysis/Dna.java index d534c8f..8bf0c24 100644 --- a/src/jalview/analysis/Dna.java +++ b/src/jalview/analysis/Dna.java @@ -194,10 +194,11 @@ public class Dna } /** + * Translates cDNA using the specified code table * * @return */ - public AlignmentI translateCdna() + public AlignmentI translateCdna(GeneticCodeI codeTable) { AlignedCodonFrame acf = new AlignedCodonFrame(); @@ -209,7 +210,7 @@ public class Dna for (s = 0; s < sSize; s++) { SequenceI newseq = translateCodingRegion(selection.get(s), - seqstring[s], acf, pepseqs); + seqstring[s], acf, pepseqs, codeTable); if (newseq != null) { @@ -252,29 +253,30 @@ public class Dna for (int gd = 0; gd < selection.length; gd++) { SequenceI dna = selection[gd]; - DBRefEntry[] dnarefs = DBRefUtils.selectRefs(dna.getDBRefs(), + List dnarefs = DBRefUtils.selectRefs(dna.getDBRefs(), jalview.datamodel.DBRefSource.DNACODINGDBS); if (dnarefs != null) { // intersect with pep List mappedrefs = new ArrayList<>(); - DBRefEntry[] refs = dna.getDBRefs(); - for (int d = 0; d < refs.length; d++) + List refs = dna.getDBRefs(); + for (int d = 0, nd = refs.size(); d < nd; d++) { - if (refs[d].getMap() != null && refs[d].getMap().getMap() != null - && refs[d].getMap().getMap().getFromRatio() == 3 - && refs[d].getMap().getMap().getToRatio() == 1) + DBRefEntry ref = refs.get(d); + if (ref.getMap() != null && ref.getMap().getMap() != null + && ref.getMap().getMap().getFromRatio() == 3 + && ref.getMap().getMap().getToRatio() == 1) { - mappedrefs.add(refs[d]); // add translated protein maps + mappedrefs.add(ref); // add translated protein maps } } - dnarefs = mappedrefs.toArray(new DBRefEntry[mappedrefs.size()]); - for (int d = 0; d < dnarefs.length; d++) + dnarefs = mappedrefs;//.toArray(new DBRefEntry[mappedrefs.size()]); + for (int d = 0, nd = dnarefs.size(); d < nd; d++) { - Mapping mp = dnarefs[d].getMap(); + Mapping mp = dnarefs.get(d).getMap(); if (mp != null) { - for (int vc = 0; vc < viscontigs.length; vc += 2) + for (int vc = 0, nv = viscontigs.length; vc < nv; vc += 2) { int[] mpr = mp.locateMappedRange(viscontigs[vc], viscontigs[vc + 1]); @@ -429,14 +431,16 @@ public class Dna * @param acf * Definition of global ORF alignment reference frame * @param proteinSeqs + * @param codeTable * @return sequence ready to be added to alignment. */ protected SequenceI translateCodingRegion(SequenceI selection, String seqstring, AlignedCodonFrame acf, - List proteinSeqs) + List proteinSeqs, GeneticCodeI codeTable) { List skip = new ArrayList<>(); int[] skipint = null; + int npos = 0; int vc = 0; @@ -465,9 +469,8 @@ public class Dna /* * Filled up a reading frame... */ - AlignedCodon alignedCodon = new AlignedCodon(cdp[0], cdp[1], - cdp[2]); - String aa = ResidueProperties.codonTranslate(new String(codon)); + AlignedCodon alignedCodon = new AlignedCodon(cdp[0], cdp[1], cdp[2]); + String aa = codeTable.translate(new String(codon)); rf = 0; final String gapString = String.valueOf(gapChar); if (aa == null) @@ -574,7 +577,7 @@ public class Dna skip.add(skipint); skipint = null; } - if (aa.equals("STOP")) + if (aa.equals(ResidueProperties.STOP)) { aa = STOP_ASTERIX; } @@ -795,19 +798,20 @@ public class Dna private static void transferCodedFeatures(SequenceI dna, SequenceI pep, MapList map) { - DBRefEntry[] dnarefs = DBRefUtils.selectRefs(dna.getDBRefs(), - DBRefSource.DNACODINGDBS); - if (dnarefs != null) - { - // intersect with pep - for (int d = 0; d < dnarefs.length; d++) - { - Mapping mp = dnarefs[d].getMap(); - if (mp != null) - { - } - } - } + // BH 2019.01.25 nop? +// List dnarefs = DBRefUtils.selectRefs(dna.getDBRefs(), +// DBRefSource.DNACODINGDBS); +// if (dnarefs != null) +// { +// // intersect with pep +// for (int d = 0, nd = dnarefs.size(); d < nd; d++) +// { +// Mapping mp = dnarefs.get(d).getMap(); +// if (mp != null) +// { +// } +// } +// } for (SequenceFeature sf : dna.getFeatures().getAllFeatures()) { if (FeatureProperties.isCodingFeature(null, sf.getType())) @@ -881,6 +885,23 @@ public class Dna } /** + * Answers the reverse complement of the input string + * + * @see #getComplement(char) + * @param s + * @return + */ + public static String reverseComplement(String s) + { + StringBuilder sb = new StringBuilder(s.length()); + for (int i = s.length() - 1; i >= 0; i--) + { + sb.append(Dna.getComplement(s.charAt(i))); + } + return sb.toString(); + } + + /** * Returns dna complement (preserving case) for aAcCgGtTuU. Ambiguity codes * are treated as on http://reverse-complement.com/. Anything else is left * unchanged.