*/
public class SeqsetUtils
{
- public static Hashtable uniquify(SequenceI[] sequences)
+ /**
+ * Store essential properties of a sequence in a hashtable for later recovery
+ * Keys are Name, Start, End, SeqFeatures, PdbId
+ * @param seq SequenceI
+ * @return Hashtable
+ */
+ public static Hashtable SeqCharacterHash(SequenceI seq) {
+ Hashtable sqinfo = new Hashtable();
+ sqinfo.put("Name", seq.getName());
+ sqinfo.put("Start", new Integer(seq.getStart()));
+ sqinfo.put("End", new Integer(seq.getEnd()));
+ sqinfo.put("SeqFeatures", seq.getSequenceFeatures());
+ sqinfo.put("PdbId", (seq.getPDBId()!=null) ? seq.getPDBId() : new String("") );
+ return sqinfo;
+ }
+ /**
+ * Recover essential properties of a sequence from a hashtable
+ * TODO: replace these methods with something more elegant.
+ * @param sq SequenceI
+ * @param sqinfo Hashtable
+ * @return boolean
+ */
+ public static boolean SeqCharacterUnhash(SequenceI sq, Hashtable sqinfo) {
+ boolean namePresent = true;
+ String oldname = (String) sqinfo.get("Name");
+ Integer start = (Integer) sqinfo.get("Start");
+ Integer end = (Integer) sqinfo.get("End");
+ java.util.Vector sfeatures = (java.util.Vector) sqinfo.get("SeqFeatures");
+ String pdbid = (String) sqinfo.get("PdbId");
+ if (oldname==null)
+ namePresent = false;
+ else
+ sq.setName(oldname);
+ if (!pdbid.equals(""))
+ sq.setPDBId(pdbid);
+
+ if ((start!=null) && (end!=null)) {
+ sq.setStart(start.intValue());
+ sq.setEnd(end.intValue());
+ }
+ if (sfeatures!=null)
+ sq.setSequenceFeatures(sfeatures);
+ return namePresent;
+ }
+
+ /**
+ * Form of the unique name used in uniquify for the i'th sequence in an ordered vector of sequences.
+ * @param i int
+ * @return String
+ */
+ public static String unique_name(int i) {
+ return new String("Sequence"+i);
+ }
+
+ public static Hashtable uniquify(SequenceI[] sequences, boolean write_names)
{
// Generate a safely named sequence set and a hash to recover the sequence names
Hashtable map = new Hashtable();
+ String[] un_names = new String[sequences.length];
+ if (!write_names)
+
for (int i = 0; i < sequences.length; i++)
{
String safename = new String("Sequence" + i);
- map.put(safename, sequences[i].getName());
- sequences[i].setName(safename);
+ map.put(safename, SeqCharacterHash(sequences[i]));
+ if (write_names)
+ sequences[i].setName(safename);
}
return map;
}
{
if (map.containsKey(sequences[i].getName()))
{
- String unsafename = (String) map.get(sequences[i].getName());
- sequences[i].setName(unsafename);
+ Hashtable sqinfo = (Hashtable) map.get(sequences[i].getName());
+ SeqCharacterUnhash(sequences[i], sqinfo);
}
else
{
for (int i = 0; i < msa.length; i++)
{
- String newname = new String("Sequence"+i);
- // uniquify as we go - JBPNote: TODO: this is a ubiquitous transformation
- SeqNames.put(newname, msa[i].getName());
+ String newname = jalview.analysis.SeqsetUtils.unique_name(i);
+ // uniquify as we go
+ // TODO: JBPNote: this is a ubiquitous transformation - set of jalview seq objects to vamsas sequences with name preservation
+ SeqNames.put(newname, jalview.analysis.SeqsetUtils.SeqCharacterHash(msa[i]));
seqarray[i] = new vamsas.objects.simple.Sequence();
- seqarray[i].setId(new String("Sequence"+i));
+ seqarray[i].setId(newname);
seqarray[i].setSeq((submitGaps) ? msa[i].getSequence()
: AlignSeq.extractGaps("-. ", msa[i].getSequence()));
}