+ numsqswithali++;
+ }
+ }
+ if (naliannot > -1)
+ {
+ assertEquals("Number of alignment annotations", naliannot,
+ numaliannot);
+ }
+
+ assertTrue(
+ "Number of sequence associated annotations wasn't at least "
+ + nminseqann, numsqswithali >= nminseqann);
+
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ assertTrue("Couln't format the alignment for output file.", false);
+ }
+ }
+
+ /**
+ * assert alignment equivalence
+ *
+ * @param al
+ * 'original'
+ * @param al_input
+ * 'secondary' or generated alignment from some datapreserving
+ * transformation
+ * @param ignoreFeatures
+ * when true, differences in sequence feature annotation are ignored
+ */
+ public static void testAlignmentEquivalence(AlignmentI al,
+ AlignmentI al_input, boolean ignoreFeatures)
+ {
+ assertNotNull("Original alignment was null", al);
+ assertNotNull("Generated alignment was null", al_input);
+
+ assertTrue("Alignment dimension mismatch: original: " + al.getHeight()
+ + "x" + al.getWidth() + ", generated: " + al_input.getHeight()
+ + "x" + al_input.getWidth(),
+ al.getHeight() == al_input.getHeight()
+ && al.getWidth() == al_input.getWidth());
+
+ // check Alignment annotation
+ AlignmentAnnotation[] aa_new = al_input.getAlignmentAnnotation();
+ AlignmentAnnotation[] aa_original = al.getAlignmentAnnotation();
+
+ // note - at moment we do not distinguish between alignment without any
+ // annotation rows and alignment with no annotation row vector
+ // we might want to revise this in future
+ int aa_new_size = (aa_new == null ? 0 : aa_new.length);
+ int aa_original_size = (aa_original == null ? 0 : aa_original.length);
+ Map<Integer, BitSet> orig_groups = new HashMap<Integer, BitSet>();
+ Map<Integer, BitSet> new_groups = new HashMap<Integer, BitSet>();
+
+ if (aa_new != null && aa_original != null)
+ {
+ for (int i = 0; i < aa_original.length; i++)
+ {
+ if (aa_new.length > i)
+ {
+ assertTrue("Different alignment annotation at position " + i,
+ equalss(aa_original[i], aa_new[i]));
+ // compare graphGroup or graph properties - needed to verify JAL-1299
+ assertEquals("Graph type not identical.", aa_original[i].graph,
+ aa_new[i].graph);
+ assertEquals("Visibility not identical.", aa_original[i].visible,
+ aa_new[i].visible);
+ assertEquals("Threshold line not identical.",
+ aa_original[i].threshold, aa_new[i].threshold);
+ // graphGroup may differ, but pattern should be the same
+ Integer o_ggrp = new Integer(aa_original[i].graphGroup + 2);
+ Integer n_ggrp = new Integer(aa_new[i].graphGroup + 2);
+ BitSet orig_g = orig_groups.get(o_ggrp);
+ BitSet new_g = new_groups.get(n_ggrp);
+ if (orig_g == null)
+ {
+ orig_groups.put(o_ggrp, orig_g = new BitSet());
+ }
+ if (new_g == null)