X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FAlignedCodonFrame.java;h=3cca4533fc653e27b11acb497366fb9c7b702fba;hb=HEAD;hp=6faf7a69179a11f7a6a83c058b93bb52dcef8f6a;hpb=b59e6ecc36fb98f4285213a685d0546e98ebd556;p=jalview.git diff --git a/src/jalview/datamodel/AlignedCodonFrame.java b/src/jalview/datamodel/AlignedCodonFrame.java index 6faf7a6..3cca453 100644 --- a/src/jalview/datamodel/AlignedCodonFrame.java +++ b/src/jalview/datamodel/AlignedCodonFrame.java @@ -118,44 +118,50 @@ public class AlignedCodonFrame */ public boolean covers(SequenceI seq) { - return covers(seq,false,false); + return covers(seq, false, false); } + /** * * @param seq - * @param localCover - when true - compare extent of seq's dataset sequence rather than the local extent - * @param either - when true coverage is required for either seq or the mapped sequence - * @return true if mapping covers full length of given sequence (or the other if either==true) + * @param localCover + * - when true - compare extent of seq's dataset sequence rather + * than the local extent + * @param either + * - when true coverage is required for either seq or the mapped + * sequence + * @return true if mapping covers full length of given sequence (or the + * other if either==true) */ - public boolean covers(SequenceI seq, boolean localCover,boolean either) + public boolean covers(SequenceI seq, boolean localCover, boolean either) { - List mappedRanges = null,otherRanges=null; + List mappedRanges = null, otherRanges = null; MapList mapList = mapping.getMap(); - int mstart=seq.getStart(),mend=seq.getEnd(),ostart,oend; - ; + int mstart = seq.getStart(), mend = seq.getEnd(), ostart, oend; + ; if (fromSeq == seq || fromSeq == seq.getDatasetSequence()) { - if (localCover && fromSeq !=seq) + if (localCover && fromSeq != seq) { - mstart=fromSeq.getStart(); - mend=fromSeq.getEnd(); + mstart = fromSeq.getStart(); + mend = fromSeq.getEnd(); } mappedRanges = mapList.getFromRanges(); - otherRanges=mapList.getToRanges(); - ostart=mapping.to.getStart(); - oend=mapping.to.getEnd(); + otherRanges = mapList.getToRanges(); + ostart = mapping.to.getStart(); + oend = mapping.to.getEnd(); } else if (mapping.to == seq || mapping.to == seq.getDatasetSequence()) { - if (localCover && mapping.to !=seq) + if (localCover && mapping.to != seq) { - mstart=mapping.to.getStart(); - mend=mapping.to.getEnd(); + mstart = mapping.to.getStart(); + mend = mapping.to.getEnd(); } mappedRanges = mapList.getToRanges(); - otherRanges=mapList.getFromRanges(); - ostart=fromSeq.getStart(); - oend=fromSeq.getEnd(); + otherRanges = mapList.getFromRanges(); + ostart = fromSeq.getStart(); + oend = fromSeq.getEnd(); } else { @@ -167,12 +173,12 @@ public class AlignedCodonFrame * (necessary for circular CDS - example EMBL:J03321:AAA91567) * and mapped length covers (at least) sequence length */ - int length = countRange(mappedRanges,mstart,mend); + int length = countRange(mappedRanges, mstart, mend); if (length != -1) { - // add 1 to mapped length to allow for a mapped stop codon - if (length + 1 >= (mend - mstart + 1)) + // add 3 to mapped length to allow for a mapped stop codon + if (length + 3 >= (mend - mstart + 1)) { return true; } @@ -191,9 +197,10 @@ public class AlignedCodonFrame } return false; } - private int countRange(List mappedRanges,int mstart,int mend) + + private int countRange(List mappedRanges, int mstart, int mend) { - int length=0; + int length = 0; for (int[] range : mappedRanges) { int from = Math.min(range[0], range[1]); @@ -209,7 +216,8 @@ public class AlignedCodonFrame /** * Adds any regions mapped to or from position {@code pos} in sequence - * {@code seq} to the given search results + * {@code seq} to the given search results Note: recommend first using the + * .covers(,true,true) to ensure mapping covers both sequences * * @param seq * @param pos @@ -224,7 +232,7 @@ public class AlignedCodonFrame { ds = seq; } - + if (this.fromSeq == seq || this.fromSeq == ds) { codon = this.mapping.map.locateInTo(pos, pos); @@ -452,42 +460,11 @@ public class AlignedCodonFrame } for (SequenceToSequenceMapping ssm : mappings) { - ssm.markMappedRegion(ds, index, results); - } - } - - /** - * Returns the DNA codon positions (base 1) for the given position (base 1) in - * a mapped protein sequence, or null if no mapping is found. - * - * Intended for use in aligning cDNA to match aligned protein. Only the first - * mapping found is returned, so not suitable for use if multiple protein - * sequences are mapped to the same cDNA (but aligning cDNA as protein is - * ill-defined for this case anyway). - * - * @param seq - * the DNA dataset sequence - * @param aaPos - * residue position (base 1) in a protein sequence - * @return - */ - public int[] getDnaPosition(SequenceI seq, int aaPos) - { - /* - * Adapted from markMappedRegion(). - */ - MapList ml = null; - int i = 0; - for (SequenceToSequenceMapping ssm : mappings) - { - if (ssm.fromSeq == seq) + if (ssm.covers(seq, true, true)) { - ml = getdnaToProt()[i]; - break; + ssm.markMappedRegion(ds, index, results); } - i++; } - return ml == null ? null : ml.locateInFrom(aaPos, aaPos); } /** @@ -502,39 +479,18 @@ public class AlignedCodonFrame */ public SequenceI findAlignedSequence(SequenceI seq, AlignmentI al) { - return findAlignedSequence(seq, al, null); - } - /** - * Convenience method to return the first aligned sequence in the given - * alignment whose dataset has a mapping with the given (aligned or dataset) - * sequence, and optionally the mapping that relates them - * - * @param seq - * @param al - * @param map - list to add the mapping to - * @return sequence from al that maps to seq - */ - public SequenceI findAlignedSequence(SequenceI seq, AlignmentI al,List map) - { /* * Search mapped protein ('to') sequences first. */ for (SequenceToSequenceMapping ssm : mappings) { - int mStart=ssm.getMapping().getMap().getFromLowest(),mEnd=ssm.getMapping().map.getFromHighest(); - if ((ssm.fromSeq == seq || ssm.fromSeq == seq.getDatasetSequence()) - // here AlignmentUtilsTest. testAlignProteinAsDna_incompleteStartCodon fails because mStart/mEnd is contained by seq - // without this filter, we don't get the correct mapping, however - )// && seq.getStart()>=mStart && seq.getEnd()<=mEnd) + if (ssm.fromSeq == seq || ssm.fromSeq == seq.getDatasetSequence()) { for (SequenceI sourceAligned : al.getSequences()) { - if (ssm.covers(sourceAligned,true,false)) + if (ssm.mapping.to == sourceAligned.getDatasetSequence() + || ssm.mapping.to == sourceAligned) { - if (map != null) - { - map.add(ssm); - } return sourceAligned; } } @@ -546,19 +502,13 @@ public class AlignedCodonFrame */ for (SequenceToSequenceMapping ssm : mappings) { - int mStart=ssm.getMapping().getMap().getToLowest(),mEnd=ssm.getMapping().map.getToHighest(); - if ((ssm.mapping.to == seq + if (ssm.mapping.to == seq || ssm.mapping.to == seq.getDatasetSequence()) - && seq.getStart()>=mStart && seq.getEnd()<=mEnd) { for (SequenceI sourceAligned : al.getSequences()) { - if (ssm.covers(sourceAligned,true,true)) + if (ssm.fromSeq == sourceAligned.getDatasetSequence()) { - if (map != null) - { - map.add(ssm); - } return sourceAligned; } } @@ -757,7 +707,8 @@ public class AlignedCodonFrame ds.setSequenceFeatures(dna.getSequenceFeatures()); // dnaSeqs[i] = ds; ssm.fromSeq = ds; - System.out.println("Realised mapped sequence " + ds.getName()); + jalview.bin.Console + .outPrintln("Realised mapped sequence " + ds.getName()); } } }