+ t1.reRoot( t1.getNode( "A" ) );
+ PhylogenyMethods.midpointRoot( t1 );
+ if ( !isEqual( t1.getNode( "A" ).getDistanceToParent(), 1 ) ) {
+ return false;
+ }
+ if ( !isEqual( t1.getNode( "B" ).getDistanceToParent(), 2 ) ) {
+ return false;
+ }
+ if ( !isEqual( t1.getNode( "C" ).getDistanceToParent(), 3 ) ) {
+ return false;
+ }
+ if ( !isEqual( t1.getNode( "D" ).getDistanceToParent(), 4 ) ) {
+ return false;
+ }
+ if ( !isEqual( t1.getNode( "CD" ).getDistanceToParent(), 1 ) ) {
+ System.exit( -1 );
+ return false;
+ }
+ if ( !isEqual( t1.getNode( "AB" ).getDistanceToParent(), 3 ) ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testMsaQualityMethod() {
+ try {
+ final MolecularSequence s0 = BasicSequence.createAaSequence( "a", "ABAXEFGHIJJE-" );
+ final MolecularSequence s1 = BasicSequence.createAaSequence( "b", "ABBXEFGHIJJBB" );
+ final MolecularSequence s2 = BasicSequence.createAaSequence( "c", "AXCXEFGHIJJ--" );
+ final MolecularSequence s3 = BasicSequence.createAaSequence( "d", "AXDDEFGHIJ---" );
+ final List<MolecularSequence> l = new ArrayList<MolecularSequence>();
+ l.add( s0 );
+ l.add( s1 );
+ l.add( s2 );
+ l.add( s3 );
+ final Msa msa = BasicMsa.createInstance( l );
+ if ( !isEqual( 1, MsaMethods.calculateIdentityRatio( msa, 0 ) ) ) {
+ return false;
+ }
+ if ( !isEqual( 0.5, MsaMethods.calculateIdentityRatio( msa, 1 ) ) ) {
+ return false;
+ }
+ if ( !isEqual( 0.25, MsaMethods.calculateIdentityRatio( msa, 2 ) ) ) {
+ return false;
+ }
+ if ( !isEqual( 0.75, MsaMethods.calculateIdentityRatio( msa, 3 ) ) ) {
+ return false;
+ }
+ if ( !isEqual( 0.75, MsaMethods.calculateIdentityRatio( msa, 10 ) ) ) {
+ return false;
+ }
+ if ( !isEqual( 0.25, MsaMethods.calculateIdentityRatio( msa, 11 ) ) ) {
+ return false;
+ }
+ if ( !isEqual( 0.25, MsaMethods.calculateIdentityRatio( msa, 12 ) ) ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testMsaEntropy() {
+ try {
+ final MolecularSequence s0 = BasicSequence.createAaSequence( "a", "AAAAAAA" );
+ final MolecularSequence s1 = BasicSequence.createAaSequence( "b", "AAAIACC" );
+ final MolecularSequence s2 = BasicSequence.createAaSequence( "c", "AAIIIIF" );
+ final MolecularSequence s3 = BasicSequence.createAaSequence( "d", "AIIIVVW" );
+ final List<MolecularSequence> l = new ArrayList<MolecularSequence>();
+ l.add( s0 );
+ l.add( s1 );
+ l.add( s2 );
+ l.add( s3 );
+ final Msa msa = BasicMsa.createInstance( l );
+ System.out.println( MsaMethods.calcNormalizedShannonsEntropy( 20, msa, 0 ) );
+ System.out.println( MsaMethods.calcNormalizedShannonsEntropy( 20, msa, 1 ) );
+ System.out.println( MsaMethods.calcNormalizedShannonsEntropy( 20, msa, 2 ) );
+ System.out.println( MsaMethods.calcNormalizedShannonsEntropy( 20, msa, 3 ) );
+ System.out.println( MsaMethods.calcNormalizedShannonsEntropy( 20, msa, 4 ) );
+ System.out.println( MsaMethods.calcNormalizedShannonsEntropy( 20, msa, 5 ) );
+ System.out.println( MsaMethods.calcNormalizedShannonsEntropy( 20, msa, 6 ) );
+ System.out.println();
+ System.out.println( MsaMethods.calcNormalizedShannonsEntropy( 6, msa, 0 ) );
+ System.out.println( MsaMethods.calcNormalizedShannonsEntropy( 6, msa, 1 ) );
+ System.out.println( MsaMethods.calcNormalizedShannonsEntropy( 6, msa, 2 ) );
+ System.out.println( MsaMethods.calcNormalizedShannonsEntropy( 6, msa, 3 ) );
+ System.out.println( MsaMethods.calcNormalizedShannonsEntropy( 6, msa, 4 ) );
+ System.out.println( MsaMethods.calcNormalizedShannonsEntropy( 6, msa, 5 ) );
+ System.out.println( MsaMethods.calcNormalizedShannonsEntropy( 6, msa, 6 ) );
+ final List<MolecularSequence> l2 = new ArrayList<MolecularSequence>();
+ l2.add( BasicSequence.createAaSequence( "1", "AAAAAAA" ) );
+ l2.add( BasicSequence.createAaSequence( "2", "AAAIACC" ) );
+ l2.add( BasicSequence.createAaSequence( "3", "AAIIIIF" ) );
+ l2.add( BasicSequence.createAaSequence( "4", "AIIIVVW" ) );
+ l2.add( BasicSequence.createAaSequence( "5", "AAAAAAA" ) );
+ l2.add( BasicSequence.createAaSequence( "6", "AAAIACC" ) );
+ l2.add( BasicSequence.createAaSequence( "7", "AAIIIIF" ) );
+ l2.add( BasicSequence.createAaSequence( "8", "AIIIVVW" ) );
+ l2.add( BasicSequence.createAaSequence( "9", "AAAAAAA" ) );
+ l2.add( BasicSequence.createAaSequence( "10", "AAAIACC" ) );
+ l2.add( BasicSequence.createAaSequence( "11", "AAIIIIF" ) );
+ l2.add( BasicSequence.createAaSequence( "12", "AIIIVVW" ) );
+ l2.add( BasicSequence.createAaSequence( "13", "AAIIIIF" ) );
+ l2.add( BasicSequence.createAaSequence( "14", "AIIIVVW" ) );
+ l2.add( BasicSequence.createAaSequence( "15", "AAAAAAA" ) );
+ l2.add( BasicSequence.createAaSequence( "16", "AAAIACC" ) );
+ l2.add( BasicSequence.createAaSequence( "17", "AAIIIIF" ) );
+ l2.add( BasicSequence.createAaSequence( "18", "AIIIVVW" ) );
+ l2.add( BasicSequence.createAaSequence( "19", "AAAAAAA" ) );
+ l2.add( BasicSequence.createAaSequence( "20", "AAAIACC" ) );
+ l2.add( BasicSequence.createAaSequence( "21", "AAIIIIF" ) );
+ l2.add( BasicSequence.createAaSequence( "22", "AIIIVVW" ) );
+ final Msa msa2 = BasicMsa.createInstance( l2 );
+ System.out.println();
+ System.out.println( MsaMethods.calcNormalizedShannonsEntropy( 20, msa2, 0 ) );
+ System.out.println( MsaMethods.calcNormalizedShannonsEntropy( 20, msa2, 1 ) );
+ System.out.println( MsaMethods.calcNormalizedShannonsEntropy( 20, msa2, 2 ) );
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testDeleteableMsa() {
+ try {
+ final MolecularSequence s0 = BasicSequence.createAaSequence( "a", "AAAA" );
+ final MolecularSequence s1 = BasicSequence.createAaSequence( "b", "BAAA" );
+ final MolecularSequence s2 = BasicSequence.createAaSequence( "c", "CAAA" );
+ final MolecularSequence s3 = BasicSequence.createAaSequence( "d", "DAAA" );
+ final MolecularSequence s4 = BasicSequence.createAaSequence( "e", "EAAA" );
+ final MolecularSequence s5 = BasicSequence.createAaSequence( "f", "FAAA" );
+ final List<MolecularSequence> l0 = new ArrayList<MolecularSequence>();
+ l0.add( s0 );
+ l0.add( s1 );
+ l0.add( s2 );
+ l0.add( s3 );
+ l0.add( s4 );
+ l0.add( s5 );
+ final DeleteableMsa dmsa0 = DeleteableMsa.createInstance( l0 );
+ dmsa0.deleteRow( "b", false );
+ if ( !dmsa0.getIdentifier( 1 ).equals( "c" ) ) {
+ return false;
+ }
+ dmsa0.deleteRow( "e", false );
+ dmsa0.deleteRow( "a", false );
+ dmsa0.deleteRow( "f", false );
+ if ( dmsa0.getLength() != 4 ) {
+ return false;
+ }
+ if ( dmsa0.getNumberOfSequences() != 2 ) {
+ return false;
+ }
+ if ( !dmsa0.getIdentifier( 0 ).equals( "c" ) ) {
+ return false;
+ }
+ if ( !dmsa0.getIdentifier( 1 ).equals( "d" ) ) {
+ return false;
+ }
+ if ( dmsa0.getResidueAt( 0, 0 ) != 'C' ) {
+ return false;
+ }
+ if ( !dmsa0.getSequenceAsString( 0 ).toString().equals( "CAAA" ) ) {
+ return false;
+ }
+ if ( dmsa0.getColumnAt( 0 ).size() != 2 ) {
+ return false;
+ }
+ dmsa0.deleteRow( "c", false );
+ dmsa0.deleteRow( "d", false );
+ if ( dmsa0.getNumberOfSequences() != 0 ) {
+ return false;
+ }
+ //
+ final MolecularSequence s_0 = BasicSequence.createAaSequence( "a", "--A---B-C--X----" );
+ final MolecularSequence s_1 = BasicSequence.createAaSequence( "b", "--B-----C-------" );
+ final MolecularSequence s_2 = BasicSequence.createAaSequence( "c", "--C--AB-C------Z" );
+ final MolecularSequence s_3 = BasicSequence.createAaSequence( "d", "--D--AA-C-------" );
+ final MolecularSequence s_4 = BasicSequence.createAaSequence( "e", "--E--AA-C-------" );
+ final MolecularSequence s_5 = BasicSequence.createAaSequence( "f", "--F--AB-CD--Y---" );
+ final List<MolecularSequence> l1 = new ArrayList<MolecularSequence>();
+ l1.add( s_0 );
+ l1.add( s_1 );
+ l1.add( s_2 );
+ l1.add( s_3 );
+ l1.add( s_4 );
+ l1.add( s_5 );
+ final DeleteableMsa dmsa1 = DeleteableMsa.createInstance( l1 );
+ dmsa1.deleteGapOnlyColumns();
+ dmsa1.deleteRow( "a", false );
+ dmsa1.deleteRow( "f", false );
+ dmsa1.deleteRow( "d", false );
+ dmsa1.deleteGapOnlyColumns();
+ if ( !dmsa1.getSequenceAsString( 0 ).toString().equals( "B--C-" ) ) {
+ return false;
+ }
+ if ( !dmsa1.getSequenceAsString( 1 ).toString().equals( "CABCZ" ) ) {