X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FSeqsetUtils.java;h=691b905fe282f389be490f5d7ddffbc0a4dec258;hb=2959d102cb701ba58489e7222cd101d0eb02ead6;hp=564e3f13bcc69cc3edeb28a54947e5f5482b56bf;hpb=70426041e78c134bb4052983ac6897933ae5f702;p=jalview.git diff --git a/src/jalview/analysis/SeqsetUtils.java b/src/jalview/analysis/SeqsetUtils.java index 564e3f1..691b905 100755 --- a/src/jalview/analysis/SeqsetUtils.java +++ b/src/jalview/analysis/SeqsetUtils.java @@ -49,7 +49,13 @@ public class SeqsetUtils sqinfo.put("Name", seq.getName()); sqinfo.put("Start", new Integer(seq.getStart())); sqinfo.put("End", new Integer(seq.getEnd())); - sqinfo.put("SeqFeatures", (seq.getSequenceFeatures() !=null) ? seq.getSequenceFeatures() : new Vector()); + Vector sfeat = new Vector(); + jalview.datamodel.SequenceFeature[] sfarray=seq.getSequenceFeatures(); + if (sfarray!=null && sfarray.length>0) { + for (int i=0;i0) { sq.setPDBId(pdbid); } @@ -95,8 +102,10 @@ public class SeqsetUtils if ((sfeatures != null) && (sfeatures.size()>0)) { - sq.setSequenceFeatures(sfeatures); + SequenceFeature[] sfarray = (SequenceFeature[]) sfeatures.toArray(); + sq.setSequenceFeatures(sfarray); } + if ((seqds!=null) && !(seqds.getName().equals("THISISAPLACEHOLDER") && seqds.getLength()==0)) { sq.setDatasetSequence(seqds); } @@ -114,6 +123,14 @@ public class SeqsetUtils return new String("Sequence" + i); } + /** + * Generates a hash of SeqCharacterHash properties for each sequence + * in a sequence set, and optionally renames the sequences to an + * unambiguous 'safe' name. + * @param sequences SequenceI[] + * @param write_names boolean set this to rename each of the sequences to its unique_name(index) name + * @return Hashtable to be passed to @see deuniquify to recover original names (and properties) for renamed sequences + */ public static Hashtable uniquify(SequenceI[] sequences, boolean write_names) { // Generate a safely named sequence set and a hash to recover the sequence names @@ -134,25 +151,72 @@ public class SeqsetUtils return map; } - + /** + * recover unsafe sequence names and original properties for a sequence + * set using a map generated by @see uniquify(sequences,true) + * @param map Hashtable + * @param sequences SequenceI[] + * @return boolean + */ public static boolean deuniquify(Hashtable map, SequenceI[] sequences) { - // recover unsafe sequence names for a sequence set - boolean allfound = true; - - for (int i = 0; i < sequences.length; i++) - { - if (map.containsKey(sequences[i].getName())) - { - Hashtable sqinfo = (Hashtable) map.get(sequences[i].getName()); - SeqCharacterUnhash(sequences[i], sqinfo); - } - else - { - allfound = false; + jalview.analysis.SequenceIdMatcher matcher = new SequenceIdMatcher(sequences); + SequenceI msq = null; + Enumeration keys = map.keys(); + Vector unmatched = new Vector(); + for (int i=0, j=sequences.length; i0) { + System.err.println("Did not find matches for :"); + for (Enumeration i = unmatched.elements(); i.hasMoreElements(); System.out.println(((SequenceI) i.nextElement()).getName())) + ; + return false; + } - return allfound; + return true; + } + /** + * returns a subset of the sequenceI seuqences, + * including only those that contain at least one residue. + * @param sequences SequenceI[] + * @return SequenceI[] + */ + public static SequenceI[] getNonEmptySequenceSet(SequenceI[] sequences) { + // Identify first row of alignment with residues for prediction + boolean ungapped[] = new boolean[sequences.length]; + int msflen=0; + for (int i=0,j=sequences.length; i