+ // does this sequence represent other sequences ?
+ SequenceGroup repset;
+ // is the representative also redundant ?
+ SequenceI repForI = rep.get(redreps[i]);
+ if (repForI==null) {
+ // the representative is still in the alignment.
+ // is it representing anything already ?
+ repset = reps.get(redreps[i]);
+ if (repset==null)
+ {
+ repset = new SequenceGroup();
+ }
+ repset.addSequence(originalSequences[i], false);
+ rep.put(originalSequences[i], redreps[i]);
+ reps.put(redreps[i], repset);
+ // and save the representative sequence for originalSeq
+ repForI = redreps[i];
+ } else {
+ // already hidden the representative for this sequence, so look up its redundant peers
+ repset = reps.get(repForI);
+ if (repset==null)
+ {
+ throw new Error("Implementation failure for redundancy set creation");
+ }
+ // add the sequence to the peerset, and mark sequence's representative in hash
+ repset.addSequence(originalSequences[i], false);
+ rep.put(originalSequences[i], repForI);
+ }
+ // merge any sequences represented by this with its new containing group
+ SequenceGroup existingreps = reps.remove(originalSequences[i]);
+ if (existingreps!=null)
+ {
+ for (SequenceI sq:existingreps.getSequences())
+ {
+ rep.put(sq, repForI);
+ repset.addSequence(sq, false);
+ }
+ }