X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FAlignmentUtils.java;h=6385fa75076c0ef2d32d715ae67781bcb8126f39;hb=b5d61763044c1d72f06ce0e50da2171422a3774b;hp=2e607c08fff25b96a6aa129d8efccde40fee4c7c;hpb=135d3c8e51d19e221e68134a3cd7290fa9c783a8;p=jalview.git diff --git a/src/jalview/analysis/AlignmentUtils.java b/src/jalview/analysis/AlignmentUtils.java index 2e607c0..6385fa7 100644 --- a/src/jalview/analysis/AlignmentUtils.java +++ b/src/jalview/analysis/AlignmentUtils.java @@ -1,22 +1,46 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) + * Copyright (C) 2014 The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.analysis; +import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.SequenceI; + import java.util.ArrayList; import java.util.List; -import jalview.datamodel.SequenceI; -import jalview.datamodel.AlignmentI; - /** - * grab bag of useful alignment manipulation operations - * Expect these to be refactored elsewhere at some point. + * grab bag of useful alignment manipulation operations Expect these to be + * refactored elsewhere at some point. + * * @author jimp - * + * */ public class AlignmentUtils { /** - * given an existing alignment, create a new alignment including all, or up to flankSize additional symbols from each sequence's dataset sequence + * given an existing alignment, create a new alignment including all, or up to + * flankSize additional symbols from each sequence's dataset sequence + * * @param core * @param flankSize * @return AlignmentI @@ -25,67 +49,114 @@ public class AlignmentUtils { List sq = new ArrayList(); int maxoffset = 0; - for (SequenceI s:core.getSequences()) + for (SequenceI s : core.getSequences()) { SequenceI newSeq = s.deriveSequence(); - if (newSeq.getStart()>maxoffset) + if (newSeq.getStart() > maxoffset + && newSeq.getDatasetSequence().getStart() < s.getStart()) { maxoffset = newSeq.getStart(); } sq.add(newSeq); } - if (flankSize>-1) { + if (flankSize > -1) + { maxoffset = flankSize; } // now add offset to create a new expanded alignment - for (SequenceI s:sq) + for (SequenceI s : sq) { SequenceI ds = s; - while (ds.getDatasetSequence()!=null) { - ds=ds.getDatasetSequence(); + while (ds.getDatasetSequence() != null) + { + ds = ds.getDatasetSequence(); } + int s_end = s.findPosition(s.getStart() + s.getLength()); // find available flanking residues for sequence - int ustream_ds=s.getStart()-ds.getStart(),dstream_ds=ds.getEnd()-s.getEnd(); - + int ustream_ds = s.getStart() - ds.getStart(), dstream_ds = ds + .getEnd() - s_end; + // build new flanked sequence - + // compute gap padding to start of flanking sequence - int offset=maxoffset - ustream_ds; - + int offset = maxoffset - ustream_ds; + // padding is gapChar x ( maxoffset - min(ustream_ds, flank) - if (flankSize>=0) { - if (flankSize= 0) + { + if (flankSize < ustream_ds) { - // take up to flankSize residues - offset = maxoffset-flankSize; - ustream_ds = flankSize; - } - if (flankSize