import charite.christo.strap.StrapProtein;
import charite.christo.interfaces.*;
import charite.christo.strap.extensions.PairAlignerNeoBioPROXY;
import charite.christo.strap.extensions.MultipleAlignerClustalW;
import static java.lang.System.*;
import charite.christo.CacheResult;
/*
  java DemoSequenceAligner1
  This demo shows how proteins are aligned using automatic procedures.
  In STRAP are a few implementations of SequenceAligner.
  Most alignment methods can also align more than two sequences if
  getMaxNumberOfSequences() returns a number larger than two.
*/
public class DemoSequenceAligner1 {
    public static void main(String[] argv){

        /* Enable cache */
        CacheResult.setEnabled(true);

        final byte[][] seqs={
            "ASDFGHKL".getBytes(),
            "TEYGKL".getBytes(),
            "ATDYGHKL".getBytes(),
        };
        /* Make an instance and set the sequences */
        final SequenceAligner aligner=new MultipleAlignerClustalW();
        aligner.setSequences(seqs);
        /* First start computation, then retrieve the result. */
        aligner.compute();
        final byte[] ss[]=aligner.getAlignedSequences();

        /* Some alignment methods can cluster similar sequences together */
        /* This information is obtained with the following method: */
        final int[] order= aligner instanceof SequenceAlignerSorting ? ((SequenceAlignerSorting)aligner).getIndicesOfSequences() : null;

        out.println();
        for(int i=0;i<ss.length;i++) {
            if (order!=null) out.print(order[i]+" ");
            out.println(" "+new String(ss[i]));
        }
        /* Save result cache */
        CacheResult.save();
        System.exit(0);
    }
}