X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FAlignSeq.java;h=96c9b72219d39dcc665f987e80374bc89c488feb;hb=ad15cff29620f960119f80176f1fd443da9f6763;hp=9815b972614df29faea1657a65fcd73de090ec6a;hpb=97e37bce240ce2430ca838bfb3060bd06dfe1711;p=jalview.git diff --git a/src/jalview/analysis/AlignSeq.java b/src/jalview/analysis/AlignSeq.java index 9815b97..96c9b72 100755 --- a/src/jalview/analysis/AlignSeq.java +++ b/src/jalview/analysis/AlignSeq.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) - * Copyright (C) 2014 The Jalview Authors + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * @@ -20,13 +20,24 @@ */ package jalview.analysis; -import java.util.*; - -import java.awt.*; - -import jalview.datamodel.*; -import jalview.schemes.*; -import jalview.util.*; +import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.Mapping; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceI; +import jalview.schemes.ResidueProperties; +import jalview.schemes.ScoreMatrix; +import jalview.util.Comparison; +import jalview.util.Format; +import jalview.util.MapList; +import jalview.util.MessageManager; + +import java.awt.Color; +import java.awt.Graphics; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.StringTokenizer; /** * @@ -270,6 +281,34 @@ public class AlignSeq } /** + * + * @return aligned instance of Seq 1 + */ + public SequenceI getAlignedSeq1() + { + SequenceI alSeq1 = new Sequence(s1.getName(), getAStr1()); + alSeq1.setStart(s1.getStart() + getSeq1Start() - 1); + alSeq1.setEnd(s1.getStart() + getSeq1End() - 1); + alSeq1.setDatasetSequence(s1.getDatasetSequence() == null ? s1 : s1 + .getDatasetSequence()); + return alSeq1; + } + + /** + * + * @return aligned instance of Seq 2 + */ + public SequenceI getAlignedSeq2() + { + SequenceI alSeq2 = new Sequence(s2.getName(), getAStr2()); + alSeq2.setStart(s2.getStart() + getSeq2Start() - 1); + alSeq2.setEnd(s2.getStart() + getSeq2End() - 1); + alSeq2.setDatasetSequence(s2.getDatasetSequence() == null ? s2 : s2 + .getDatasetSequence()); + return alSeq2; + } + + /** * Construct score matrix for sequences with standard DNA or PEPTIDE matrix * * @param s1 @@ -614,7 +653,7 @@ public class AlignSeq output = output.append("\n\n"); } - pid = pid / (float) (aseq1.length - count) * 100; + pid = pid / (aseq1.length - count) * 100; output = output.append(new Format("Percentage ID = %2.2f\n\n") .form(pid)); @@ -981,22 +1020,29 @@ public class AlignSeq if (allowmismatch || c1 == c2) { - lastmatch = true; - // extend mapping interval. + // extend mapping interval if (lp1 + 1 != alignpos || lp2 + 1 != pdbpos) { as1.add(Integer.valueOf(alignpos)); as2.add(Integer.valueOf(pdbpos)); } + lastmatch = true; lp1 = alignpos; lp2 = pdbpos; } else { + // extend mapping interval + if (lastmatch) + { + as1.add(Integer.valueOf(lp1)); + as2.add(Integer.valueOf(lp2)); + } lastmatch = false; } } // construct range pairs + int[] mapseq1 = new int[as1.size() + (lastmatch ? 1 : 0)], mapseq2 = new int[as2 .size() + (lastmatch ? 1 : 0)]; int i = 0; @@ -1030,11 +1076,19 @@ public class AlignSeq * @param ochains * @param al * @param dnaOrProtein - * @param removeOldAnnots when true, old annotation is cleared before new annotation transferred + * @param removeOldAnnots + * when true, old annotation is cleared before new annotation + * transferred + * @return List originals, List replacement, + * List alignment between each> */ - public static void replaceMatchingSeqsWith(List seqs, List annotations, List ochains, + public static List> replaceMatchingSeqsWith( + List seqs, List annotations, + List ochains, AlignmentI al, String dnaOrProtein, boolean removeOldAnnots) { + List orig = new ArrayList(), repl = new ArrayList(); + List aligs = new ArrayList(); if (al != null && al.getHeight() > 0) { ArrayList matches = new ArrayList(); @@ -1069,10 +1123,13 @@ public class AlignSeq if ((q = ochains.indexOf(sp)) > -1) { seqs.set(p, sq = matches.get(q)); + orig.add(sp); + repl.add(sq); sq.setName(sp.getName()); sq.setDescription(sp.getDescription()); Mapping sp2sq; sq.transferAnnotation(sp, sp2sq = aligns.get(q).getMappingFromS1(false)); + aligs.add(aligns.get(q)); int inspos = -1; for (int ap = 0; ap < annotations.size();) { @@ -1085,9 +1142,10 @@ public class AlignSeq if (removeOldAnnots) { annotations.remove(ap); } else { - AlignmentAnnotation alan = annotations.get(ap); + AlignmentAnnotation alan = annotations.remove(ap); alan.liftOver(sq, sp2sq); alan.setSequenceRef(sq); + sq.addAlignmentAnnotation(alan); } } else @@ -1095,13 +1153,15 @@ public class AlignSeq ap++; } } - if (sq.getAnnotation() != null) + if (sq.getAnnotation() != null && sq.getAnnotation().length > 0) { - annotations.addAll(inspos, Arrays.asList(sq.getAnnotation())); + annotations.addAll(inspos == -1 ? annotations.size() : inspos, + Arrays.asList(sq.getAnnotation())); } } } } + return Arrays.asList(orig, repl, aligs); } /**