X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FSeqsetUtils.java;h=691b905fe282f389be490f5d7ddffbc0a4dec258;hb=173a7ca81c8d8c00f889fd4e3583cc8733d3d179;hp=bd0f45cf73fff7ee5d3dd0bdc4da06b88a8594a7;hpb=f24dacb1da56fccf05d684e2f4899facec2aecf7;p=jalview.git diff --git a/src/jalview/analysis/SeqsetUtils.java b/src/jalview/analysis/SeqsetUtils.java index bd0f45c..691b905 100755 --- a/src/jalview/analysis/SeqsetUtils.java +++ b/src/jalview/analysis/SeqsetUtils.java @@ -49,10 +49,16 @@ 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()); + Vector sfeat = new Vector(); + jalview.datamodel.SequenceFeature[] sfarray=seq.getSequenceFeatures(); + if (sfarray!=null && sfarray.length>0) { + for (int i=0;i0) { sq.setPDBId(pdbid); } @@ -93,9 +100,14 @@ public class SeqsetUtils sq.setEnd(end.intValue()); } - if (sfeatures != null) + 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); } return namePresent; @@ -111,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 @@ -131,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